Send email with attachment on Linux host

5
(1)

How to use echo with sendmail

sendmail implements Postfix’s compatibility interface and is present in almost all Unix-like operating systems, as mail transfer agent whose history goes back to the early 1980s.

echo with sendmail

sendmail sends email over the Internet to a specific recipient. This can be done by running the sendmail command on a Linux command line, and can also be used within a programming script.

  sendmail: fatal: open /etc/postfix/main.cf: No such file or directory

Make sure sendmail is present on the Linux host with the command which sendmail or man sendmail. If sendmail is not found and no MTA like Postfix is installed, sendmail can be deployed as follows.

$ sudo apt install sendmail -y

sendmail in the command line

The following example shows a sendmail command to send a message from the command line with using the echo command.

$ echo -e "Subject:Test Mail using sendmail \nThis is a Test Message\n" | sendmail youremail@example.tld

The next command sends an email with sender (From:) address.

$ /usr/sbin/sendmail youremail@example.tld
From: nobody@example.tld
Subject: Test Mail using sendmail
This is a Test Message
.

  Enter period (.) ends the editor and the e-mail will by submit.

Using the example shown above, an email is interactively created with each line, a message with the subject “Test Mail using sendmail” should be delivered to the inbox of youremail@example.tld. Change the recipient email address accordingly, make sure sendmail is present on the host and the host is allowed to send email.

Further, sendmail robs the pipeline instruction, thereby making it possible to send a message using a text file.

$ /usr/sbin/sendmail < message.txt -t -i youremail@example.tld

The content of the message.txt file in this example is as follows.

From: nobody@example.tld
Subject: Test Mail using sendmail
This is a Test Message

  The sendmail -i option handles reading the message from standard input without a period (.) at the end of a line. The -t option extracts the recipients from the message headers and adds them to all recipients specified on the command line.

How to send file using sendmail

Administrators are often faced with the task of sending an email directly from a host, in this example sendmail is used to send a file as an attachment. The purpose here is to filter out the delivery attempts rejected as SPAM “blocked using” on a Postfix MTA, and to send them as archives.txt.gz, for this purpose, Postfix must be configured on the host, it can also be another local MTA, or an external SMTP-Relay is used.

#!/bin/bash
cat /var/log/maillog* | grep 'blocked using' | grep 'middleton.tld' > /tmp/blocked.txt
gzip -f /tmp/blocked.txt
( echo "to: sysop@example.tld"
  echo "from: no_reply@$HOSTNAME"
  echo "subject: Report of messages blocked by $HOSTNAME"
  echo "mime-version: 1.0"
  echo "content-type: multipart/related; boundary=messageBoundary"
  echo
  echo "--messageBoundary"
  echo "content-type: text/plain"
  echo
  echo "Please find the document attached."
  echo
  echo "--messageBoundary"
  echo "content-type: text/plain; name=blocked.txt.gz"
  echo "content-transfer-encoding: base64"
  echo
  openssl base64 < /tmp/blocked.txt.gz) | sendmail -t -i

  The -t option extracts the recipients from the message header.
The -i option don´t treat a . character as the end of input.

Conclusion

This example shows how to use sendmail to send an email with attachment directly from the Linux shell. By changing the individual lines, many other applications can come into play, whereby the Base64 encoding is done by openssl, the echo statements performs the MIME message body.

more related in this post

How useful was this post?

Click on a star to rate it!

Average rating 5 / 5. Vote count: 1

No votes so far! Be the first to rate this post.

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?

Leave a Reply

Your email address will not be published. Required fields are marked *