Email Attachments w/ base64 Encoding on Rhat - email

I am migrating from an old HP-UX box to a new Rhat box. Our ERP emailer program saves the email (including MIME headers) as "Email_msg_port.html" and the attachment in the user's home dir. No problem so far.
The emailer then issues the following command:
(cat Email_msg_8.html ; base64 /home/johnsmith/APMS9010.txt) | sendmail -t
The email itself is fine, but the attachment is always empty (though it says it is about 300 bytes).
My MIME header looks like this:
MIME-Version: 1.1
From: myEmail#myCompany.com
To: myEmail#myCompany.com
Subject: APMS9010.1 - Download Top Vendor Purchase - LIVE.DATA
Content-Type: multipart/mixed; boundary="_boundarystring"
This is a multi-part message in MIME format.
--_boundarystring
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: binary
Content-Disposition: inline
Content-Base: "http://myCompany.com/";
I have tried Content-Transfer-Encoding: binary (and 7bit)
Is my MIME stuff wrong, the base64 command wrong, both, or something else?
Thanks

Related

How to read MIME file

I need some help to download email attachments from S3 bucket, email formats are MIME files. How can I read this email file and download attachment? Any good source is appreciated too
Content-Type: application/octet-stream;
name="3c1bd1393c7543cd9f38c1ff26d474ab.snappy.parquet"
Content-Disposition: attachment;
filename="3c1bd1393c7543cd9f38c1ff26d474ab.snappy.parquet"
Content-Transfer-Encoding: base64
Content-ID: <f_l6z42itv0>
X-Attachment-Id: f_l6z42itv0

in Perl sendmail, why is my Image attachment becoming corrupt, sometimes?

I intend to rewrite this in Net::SMTP but right now i need a backup subroutine that doesn't "use" much, so;
The code works and sends emails, when received in most email service (Godaddy,ProtonMail) i get the full image, but in another (34SP) email service i only get the top half of the image.
my $msg = "From: John <$sender>
To: bob <$recipient>
Subject: $subject
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=\"BOUNDARY\"
--BOUNDARY
Content-Type: multipart/alternative; boundary=\"MSGBOUNDARY\"
--MSGBOUNDARY
Content-Type: text/html; charset=iso-8859-1
Content-Disposition: inline
<html><body>Hello, World<br><img src=\"cid:hello\"></body></html>
--MSGBOUNDARY
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Hello, World,[you're missing an image here]
--MSGBOUNDARY--
--BOUNDARY
Content-Type: image/jpeg
Content-Disposition: inline; filename=\"hello.jpg\"
Content-Transfer-Encoding: base64
Content-Id: <hello>
$jpgg
--BOUNDARY--";
open MAIL, "| $sendmail -t"
or die "Couldn't pipe to $sendmail";
print MAIL $msg;
close MAIL;
I've tested the 34SP email service by sending this first attachment from another location and it receives it fine, so it must be a problem with the code. If anyone can see something I've done wrong, I'd appreciate it.
EDIT(1); as per Polar Bears suggestion I've edited the code for easier reading, I've tested this version and am still getting the same issue.
Just a suggestion to change the code to following form
my $msg = "
From: John <$sender>
To: bob <$recipient>
Subject: $subject
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=\"BOUNDARY\"
--BOUNDARY
Content-Type: multipart/alternative; boundary=\"MSGBOUNDARY\"
--MSGBOUNDARY
Content-Type: text/html; charset=iso-8859-1
Content-Disposition: inline
<html><body>Hello, World<br><img src=\"cid:hello\"></body></html>
--MSGBOUNDARY
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Hello, World,[you're missing an image here]
--MSGBOUNDARY--
--BOUNDARY
Content-Type: image/jpeg
Content-Disposition: inline; filename=\"hello.jpg\"
Content-Transfer-Encoding: base64
Content-Id: <hello>
$jpgg
--BOUNDARY--
";
open MAIL, "| $sendmail -t"
or die "Couldn't pipe to $sendmail";
print MAIL $msg;
close MAIL;

mime-type missing in mailsend email client

I'm using "mailsend v.1.19" to text a webmail client.
When I set mime-type, whether is with message body or one line message, I cannot find any trace of it into the raw email.
e,g:
mailsend -smtp local-mail.com -f sender#sender.local -t receiver#receiver.local -sub "Another Test Email With HTML body and mime type set from file body" -msg-body ~/justbody.html -starttls -user xxx -pass xxxx -mime-type "text/html"
I'm deliberately not setting content-type for testing purposes.
My SMPT ingestor will get the following raw stream with no signs of "text-html":
Received: from localhost (unknown [10.91.142.1])
by local-mail.dev.com (Postfix) with ESMTPS
for receiver#receiver.local; Wed, 31 Jan 2018 11:37:10 +0000 (UTC)
Subject: Another Test Email With HTML body and mime type set from file body
From: sender#sender.local
Date: Wed, 31 Jan 2018 11:37:10 +0000
To: receiver#receiver.local
X-Mailer: #(#) mailsend v1.19 (Unix)
X-Copyright: BSD. It is illegal to use this software for Spamming
Mime-version: 1.0
Content-Type: (null); charset=utf-8
What am I getting wrong?
I have tried using mailsend with both parameters -content-type and mime-type both placed before the message body in the command line.
The result is that the header Content-type is filled with mime-type value.
So when mime-type is set, content-type header contains its value, when both are set, content-type still takes the mime-type parameter value and ignores the content-type.
I believe this issue is related to mailsend clean in documentation what is the logic behind it.

Ubuntu. Sending emails with embedded images

I have Ubuntu server(16.04) + Nagios, also I have created a script that makes a screenshot(Nagios status) every night and sends this screenshot to two recipients. But occurs problem, I receive mail with images(embed in a body, not attachment) - is OK, but my friend receives the same mail with broken images(blank files in attachment).
Any suggestion, how to solve this problem?
Script code:
#!/bin/bash
cat <<EOT | /usr/sbin/sendmail -t
TO: #email1, #email2
SUBJECT: Report: Nagios Event Log $(date +%F --date=yesterday)
MIME-Version: 1.0
Content-Type: multipart/related;boundary="XYZ"
--XYZ
Content-Type: text/html; charset=ISO-8859-15
Content-Transfer-Encoding: 7bit
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-15">
</head>
<body bgcolor="#ffffff" text="#000000">
Hello Team,<br>Daily Nagios report of $(date +%F --date=yesterday) is generated.
<img src="cid:part1.06090408.01060107" alt="">
<br>Best Regards, Nagios Admin
</body>
</html>
--XYZ
Content-Type: image/png;name="Nagios-EventLog-`date +%F --date="yesterday"`.png"
Content-Transfer-Encoding: base64
Content-ID: <part1.06090408.01060107>
Content-Disposition: inline; filename="Nagios-EventLog-`date +%F --date="yesterday"`.png"
$(base64 /some_path/NagiosReport/Nagios-EventLog-`date +%F --date="yesterday"`.png)
--XYZ--
EOT
You lack a newline between the MIME headers and the base64 image data.
Running base64 in a command substitution inside a here document will probably produce overlong lines in the output. Try (rough pseudocode)
( cat <<EOF
From: blah blah ...
Subject: blah blah ...
:
--XYZ
Content-description: image/png; name=etc etc
EOF
base64 file
printf "\n--XYZ--\n" ) | sendmail -oi -t
(I'm assuming you did PATH=/usr/sbin:$PATH near the top of the script so you don't have to hard-code the path to sendmail.)
If improved knowledge of MIME isn't a personal development goal, probably use a program which knows how to do this properly. Many people use mutt to send mail on their behalf without having to worry about how exactly to do it right.
As a stylistic aside, running $(date +%F) multiple times seems clunky. Just run it once and capture the output in a variable. (In the pathological case, the script runs around midnight, and you get different dates in different parts of the message!)

Unix: How to send Mime files as mails

I have a program that outputs MIME formatted files. I need to send these from an unix machine.
The files have the format as such:
From: ******
To: ******
Message-ID: ******
Subject: ******
MIME-Version: ******
Content-Type: ******
Content-Transfer-Encoding: ******
<PAYLOAD>
Is there a way to specify such a file (Preferably without specifying any other information than the file) through a native unix command, such as sendmail?