- 9 mail/mailx command examples to send emails from command line on Linux
- Send mails from command line
- How does it work
- Install the mailx command
- Using the mailx command
- 1. Simple mail
- 2. Take message from a file
- 3. Multiple recipients
- 4. CC and BCC
- 5. Specify From name and address
- 6. Specify «Reply-To» address
- 7. Attachments
- 8. Use external SMTP server
- 9. Verbose — watch smtp communication
- Troubleshooting
- Notes and Resources
- 14 thoughts on “ 9 mail/mailx command examples to send emails from command line on Linux ”
- Отправка почты из командной строки Linux
- Подготовка
- Синтаксис
- Примеры использования командной строки для email-отправки
- 1. Отправка письма с вложением
- 2. Несколько получателей
- 3. Отправка с копией
- 4. Указать отправителя
- 5. Отправка через другой SMTP сервер
- Примеры использования Mutt
9 mail/mailx command examples to send emails from command line on Linux
Send mails from command line
The mail command is an essential one that should be available on any linux server so that various services and other web applications can generate and transmit emails.
In a previous post on mail command we saw how the mail command can be used to send emails from the command line on your linux server.
In this tutorial we shall be using an enhanced version of the mail command. Its called mailx (or just mail when installed), and it can do many more things than what the older mail command from gnu mailutils package can do.
How does it work
The mail/mailx command needs a local smtp server (MTA) running in order to deliver the emails. THe route taken by the email is somewhat like this —
The recipient MTA would be gmail’s smtp server if your recipient is someone at gmail.com for instance. For the local MTA, you need to install an smtp server like Postfix. A basic installation of Postfix with minimal configuration would work in most cases.
Install the mailx command
On Ubuntu/Debian based systems the mailx command is available from 2 different packages —
We shall be using the heirloom-mailx package because it has more features and options.
On CentOS/Fedora based systems, there is only one package named «mailx» which is the heirloom package.
To find out what mailx package is installed on your system, check the «man mailx» output and scroll down to the end and you should see some useful information.
Using the mailx command
Once installed, the mailx command can be directly referenced with the name mail, so you just type in that in the command line.
1. Simple mail
Run the following command, and then mailx would wait for you to enter the message of the email. You can hit enter for new lines. When done typing the message, press Ctrl+D and mailx would display EOT.
After than mailx automatically delivers the email to the destination.
2. Take message from a file
The message body of the email can be taken from a file as well.
The message can also be piped using the echo command —
3. Multiple recipients
To send the mail to multiple recipients, specify all the emails separated by a comma
4. CC and BCC
The «-c» and «-b» options can be used to add CC and BCC addresses respectively.
5. Specify From name and address
To specify a «FROM» name and address, use the «-r» option. The name should be followed by the address wrapped in «<>«.
6. Specify «Reply-To» address
The reply to address is set with the internal option variable «replyto» using the «-S» option.
7. Attachments
Attachments can be added with the «-a» option.
8. Use external SMTP server
This is an exclusive feature, that you get only with heirloom mailx and not bsd mailx, or the mail command from gnu mailutils or the mutt command.
The mailx command can use an external smtp server to use to relay the message forward. The syntax is a bit lengthy but makes sense.
Here is a breakdown
You can use the gmail smtp servers and send emails via your gmail account. That is so cool!
For gmail specifically you would need to enable less secure apps settings before you can send mail like that.
9. Verbose — watch smtp communication
When using external smtp servers, you can choose to watch the entire smtp communication that is done in the background. This is useful specially when testing or debugging smtp servers.
Troubleshooting
In case the mails are not being delivered properly you need to check a few things. The first thing to check is that an smtp server (mta) is running locally. The netstat command can tell that
If an stmp server like Postfix is running and still mails are not going, then try re-configuring Postfix for example. On Ubuntu/Debian systems, this can be done with the dpkg-reconfigure command
Then retry, the mail command and it should work. If it still doesn’t, try contacting your server provider.
No mails from local systems
If you try to send mails from your local computer to a gmail address, your mail would most likely be rejected, so don’t try doing that.
This is because ordinary computers connected to internet address have an ip address that is not associated with any valid domain as such, and gmail strictly verifies such credentials before approving any mail to go through.
Notes and Resources
Apart from mailx, there are other tools like Swaks and smtp-cli that can be used to send mails from command line and support various features like specifying smtp servers and adding attachments and so on.
However the mailx command is available in the default repositories of most common distros, so can be installed easily. Further it maintains a syntax very similar to that of the mail command which makes it a drop in replacement for the older mail command.
The mailx command is even capable of reading mails from remote IMAP servers, but that is something we kept out of this post and would talk later. To learn more check the man page for the mailx command with «man mailx».
A Tech Enthusiast, Blogger, Linux Fan and a Software Developer. Writes about Computer hardware, Linux and Open Source software and coding in Python, Php and Javascript. He can be reached at [email protected] .
14 thoughts on “ 9 mail/mailx command examples to send emails from command line on Linux ”
might be worth pointing out that most of this won’t work on a lot of systems,
illegal option — S
illegal option — a
illegal option — r
You don’t detail how mailx determines the smtp envelope from address
>>> MAIL FROM:
Obviously it’s [email protected], but how can this be over-ridden with mailx ?
Hello.
I want my printer to send emails to external email addresses like Gmail.com, I setup the ubuntu server as explained and set the ubuntu server as the smtp server on printer. I can send emails from ubuntu server to gmail, but it’s not relaying emails to gmail.com from the printer itself. What should I do? Please help.
I would like to know, whether we have option to send the attachment with password protected through mailx UNIX command? can anyone help me on this.
I have a cron job like this:
tar -czf /home/backup/myfolder/myfile_$(/bin/date +\%Y\%m\%d).tgz /home/public_html -X /home/backup/myfile-exclude.txt
I have edit my cron job to this:
tar -czf /home/backup/myfolder/myfile_$(/bin/date +\%Y\%m\%d).tgz /home/public_html -X /home/backup/myfile-exclude.txt | mail -s “Cron Daemon: mywebsite.com – files backup” [email protected]
Normally the Cron job puts some info into the Body, but how do I get this to work? I have tried with:
I am using attachment command in phone script but it is not working whether if the same command runing on emulator
You could setup home computer as well but it needs to integrate with the from address mail domain SMTP relays to send emails.
I have followd your “tuto” ( use Centos7 )
I still have this error ?? can you help me ?
Connecting to 82.216.111.2:25 . . . connected.
220 smtp3.tech.numericable.fr ESMTP Postfix
>>> EHLO centos7
250-smtp3.tech.numericable.fr
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-ENHANCEDSTATUSCODES
250 8BITMIME
>>> AUTH LOGIN
503 5.5.1 Error: authentication not enabled
smtp-server: 503 5.5.1 Error: authentication not enabled
my mailrc file ;
#set smtp-use-starttls
set nss-config-dir=
/.mozilla/firefox/yyyyyyyy.default/
set ssl-verify=ignore
set smtpd_sasl_auth_enable
# set smtp
set smtp=smtp://smtp.numericable.fr:25
set [email protected]
# tell mailx that it needs to authorise
set smtp-auth=login
# set the user for SMTP
# set [email protected]
set [email protected]
# set the password for authorisation
set smtp-auth-password=xxxxxx
bye.
Hi,
I am not able to use FROM option using -r, specified in 5th point.
Good info. Just to clarify, sendmail/postfix/etc are MTAs and either relay through an smtp relay or directly communicates to the destination smtp servers, depending on how the MTA is configured. So the flow would be mail_client > mta > smtp_relay OR destination_smtp_server > recipient’s inbox. So using common programs as an example: mailx > postfix > smtp.yourorg.com > smtp.gmail.com > [email protected] inbox. A common example where this configuration is used is Linux servers that need to send to external email recipients (alerts and stuff). In that case, you configure the Linux server to use your outgoing smtp server via sendmail or postfix or other MTA to relay the email by allowing the IP of the Linux server to relay through the smtp server.
Thank you for your post. Can I use Mailx for send up to 15000 mails ? I’m searching a alternative to online newsletter service (payment)!
I hope your ISP blocks you.
Yes, you can use Mailx or any other scripts to send any volume of emails provided that your domain SMTP relay is capable to handle volume. Do you run your own mail server or using one of the shared hosting? If you run yours … yes you could send any volume but may take few hours to send. You can’t send out emails just using home computer as those will not be delivered to end users or will directly go in users Spam folder. If you need to use home computer … you would need to hop / forward your emails to your domain SMTP relay of “from user” to send the emails to users. Reach-out if you need professional help for setting up mail server to handle your newsletter … you would need one dedicated public IPAddress on a Linux server. I am assuming that these are registered users for business and you are authorized to send them newsletter.
Источник
Отправка почты из командной строки Linux
Подготовка
Для начала устанавливаем утилиту для отправки почты. В противном случае мы увидим ошибку mail: command not found.
В Debian / Ubuntu:
apt-get install mailutils
В CentOS / Red Hat:
yum install mailx
Синтаксис
Можно отправить сообщение следующей командой:
echo «Test text» | mail -s «Test title» master@dmosk.ru
* в данном примере будет отправлено письмо на электронный адрес master@dmosk.ru с темой Test title и телом письма — Test text.
Если при отправке возникли проблемы, можно проверить логи следующей командой:
Примеры использования командной строки для email-отправки
1. Отправка письма с вложением
Для разных типов дистрибутива Linux команды могут отличаться.
а) для CentOS / Red Hat:
echo ‘Attachment’ | mail -s ‘Subject attachment message’ -a /var/log/maillog master@dmosk.ru
echo ‘Attachment’ | mail -s ‘Subject attachment message’ -a /var/log/maillog -a /var/log/maillog2 master@dmosk.ru
echo ‘Attachment’ | mail -s ‘Subject attachment message’ -A /var/log/maillog -A /var/log/maillog2 master@dmosk.ru
* где /var/log/maillog и /var/log/maillog2 — файлы, которые будут прикреплены к письму. Обратите внимание, что обе команды отличаются по регистру опции a и A — все зависит от версии и сборки Linux (в каких-то нужно использовать маленькую, в каких-то — большую). Также обратите внимание, что в примере для Ubuntu мы отправим 2 файла — для этого просто добавляем к команде еще одну опцию прикрепления файла.
2. Несколько получателей
Для отправки письма нескольким получателям, просто перечисляем их через запятую:
echo «Test text» | mail -s «Test title» master@dmosk.ru,shmaster@dmosk.ru
* в данном примере мы отправил письмо на ящики master@dmosk.ru и shmaster@dmosk.ru.
3. Отправка с копией
Отправить копию на адрес master2@dmosk.ru:
echo «Test copy» | mail -s «Test copy title» master@dmosk.ru -c master2@dmosk.ru
Отправить скрытую копию на адрес master3@dmosk.ru:
echo «Test hidden copy» | mail -s «Test hidden copy title» master@dmosk.ru -b master3@dmosk.ru
4. Указать отправителя
В CentOS / Red Hat:
echo «Test text» | mail -s «Test title» -r postmaster@dmosk.ru master@dmosk.ru
В Debian / Ubuntu:
echo «Test text» | mail -s «Test title» master@dmosk.ru -aFrom:postmaster@dmosk.ru
5. Отправка через другой SMTP сервер
а) Для Ubuntu / Debian:
echo «Test text» | mail -s «Test title» -a «Smtp: smtp.mail.ru:25» -a «From: postmaster@dmosk.ru» -a «Return-path: postmaster@dmosk.ru» master@dmosk.ru
б) Для CentOS / Red Hat:
echo «Test text» | mail -s «Test title» -S smtp=»smtp.mail.ru:25″ master@dmosk.ru
Однако, если сторонний почтовый сервер работает по шифрованному каналу и требует аутентификацию, необходимо ввести следующее:
echo «Test text» | mail -v -s «Test title» -S smtp=»smtp.dmosk.ru:587″ -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user=»master@dmosk.ru» -S smtp-auth-password=»password» -S ssl-verify=ignore -S nss-config-dir=/etc/pki/nssdb -S from=postmaster@dmosk.ru master@dmosk.ru
* где smtp.dmosk.ru — сервер smtp; 587 — порт для подключения к серверу отправки; smtp-use-starttls указывает на использование шифрования через TLS; smtp-auth=login задает аутентификацию с использованием логина и пароля; smtp-auth-user и smtp-auth-password — соответственно логин и пароль; ssl-verify=ignore отключает проверку подлинности сертификата безопасности; nss-config-dir указывает на каталог с базами nss; from задает поле FROM
При возникновении проблем, можно воспользоваться программой mutt. Сначала поставим ее.
а) если используем CentOS / Red Hat:
yum install mutt
б) если используем Ubuntu / Debian:
apt-get install mutt
Теперь можно пользоваться. Синтаксис:
echo «Текст сообщения» | mutt -s «Тема» [дополнительные опции] —
Примеры использования Mutt
1. Отправить вложение:
echo «Attachment» | mutt -s «subject» -a /var/log/maillog — master@dmosk.ru
* где /var/log/maillog — файл, который будет прикреплен к письму.
2. Указать отправителя:
echo «Mail From» | mutt -s «subject» -e ‘my_hdr From: Дмитрий
* данной командой mutt отправит письмо от postmaster@dmosk.ru.
3. Отправка через другой сервер.
Для начала, открываем файл с конфигурацией Mutt:
* в данном примере мы отправим всю нашу почту через узел smtp.mail.ru, порт 25.
Также можно добавить при необходимости:
set smtp_user = user
set smtp_pass = password
set ssl_verify_host = no
set ssl_verify_dates = no
set ssl_starttls = no
set ssl_force_tls = no
- smtp_user — имя учетной записи, под которой нужно авторизоваться на SMTP.
- smtp_pass — пароль для аутентификации.
- ssl_verify_host — нужно ли проверять валидность сертификата.
- ssl_verify_dates — нужно ли проверять дату действия сертификата.
- ssl_starttls — нужно ли использовать STARTTLS.
- ssl_force_tls — нужно ли принудительное использование TLS.
Теперь можно отправлять письмо:
echo «Mail From» | mutt -s «subject» -e ‘my_hdr From: Дмитрий
Источник