Отправка писем из консоли linux
by rudjuk
Чтобы отослать электронное письмо из командной строки, можно воспользоваться утилитой mail. Также она может встречаться под названием mailx или Mail. Для отправки письма пишем следующую команду:
$ mail -s «Тема письма» pupkin@mail.ru
Привет!
Я пишу тебе из консоли!
Ctrl+D
Комбинация клавиш Ctrl+D (^D) с новой строки позволяет завершить ввод письма. После этого у меня появляется приглашение ввести получателя копии — просто жму «Enter», и письмо отправляется.
Если тело письма находится в файле, то можно просто воспользоваться перенаправлением входного потока:
$ mail -s «Письмо из файла» pupkin@mail.ru < mail_body.txt
Аналогично поступаем, если требуется отослать вывод какой-либо команды. Например, следующая команда отошлет мне на мыло содержание текущего каталога:
$ ls | mail -s «Вывод команды» pupkin@mail.ru
Кроме того, утилита позволяет не только читать письма, но и получать их, отвечать и делать прочие полезные манипуляции. Но вот чего она, похоже, не позволяет — так это добавить вложение к письму. Однако, это не беда. Есть немало способов отправить файл из консоли по электронной почте. Я рассмотрю три из них, которые не потребовали от меня разбираться в чем-то или что-то скачивать/устанавливать.
1. Если нужно отправить двоичный файл письмом, можно его просто закодировать с помощью uuencode. Команда будет выглядет следующим образом:
$ uuencode image.jpg image.jpg | mail -s «Метод 1» sombeody@somewhere.net
И хотя файл действительно закодируется и отправится, это не является вложением в полном смысле электронной почты. некоторые почтовые клиенты адэкватно отреагируют на файл в письме, другие же покажут его как простой текст, и раскодировать его придется вручную.
2. С помощью консольной утилиты mpack. Эта утилита пакует файл в сообщение и отсылает полученное сообщение туда, куда изволите.
$ mpack -s «Метод 2» image.jpg sombeody@somewhere.net
3. С помощью полноценного консольного почтового клиента mutt. Можно запустить его, сформировать письмо и отправить куда надо. А можно запустить mutt в режиме эмуляции диалога mailx (параметр -x), при этом передав через параметры все необходимое, чтобы не получать лишних вопросов от этой программы. Второй вариант выглядит так:
$ echo «Смотри вложение» | mutt -x -s «Метод 3» -a image.jpg sombeody@somewhere.net
Если какой-то из программ у вас не окажется (в чем я сильно сомневаюсь), ищите ее в репозиториях Debian.
- Linux
- Почта
Step 2: Uninstall Postfix 2 / Sendmail / sSMTP
The next thing we have to do is to ensure that there aren’t any other mail sending softwares configured within our server, unless we really want to keep Postfix 3 and one (or more) of them. In case we don’t, we can easily uninstall all of them with the following terminal commands:
Shell
# sudo yum remove postfix
# sudo yum remove ssmtp
# sudo yum remove sendmail
1 |
# sudo yum remove postfix # sudo yum remove ssmtp # sudo yum remove sendmail |
Although performing a
yum remove is a required step for Postfix – assuming we want to install a newer version – we could also choose to
systemctl disable and
systemctl stop sSMTP and/or Sendmail instead of removing them. The only important thing to do here is to ensure that neither of them will be up and running, otherwise they will prevent our soon-to-be-installed Postfix 3 from working properly.
Установка Postfix
На этом шаге мы выполним установку Postfix. Быстрее всего будет установить пакет , включающий Postfix и несколько дополнительных программ, которые можно использовать для тестирования отправки электронной почты.
Вначале обновите базу данных пакетов:
Затем выполните установку Postfix, запустив следующую команду:
Перед окончанием установки вы увидите окно настройки конфигурации Postfix:
По умолчанию используетя опция (сайт). Это наиболее подходящая опция для нашего случая, поэтому нажмите , а затем нажмите . Если вы увидите только текст описания, нажмите для выбора пункта , а затем нажмите .
Если опция не отображается автоматически, запустите следующую команду:
После этого откроется еще один диалог настройки конфигурации System mail name (имя системной почты):
Имя системной почты System mail name должно совпадать с именем, которое вы присвоили своему серверу при его создании. После завершения настройки нажмите , а затем нажмите .
Мы установили Postfix и готовы приступить к настройке.
Настройка Postfix
На этом шаге мы настроим Postfix для отправки и приема электронных писем только с сервера, на котором он запущен, т. е. с .
Для этого нужно настроить Postfix для прослушивания только интерфейса loopback, интерфейса виртуальной сети, который сервер использует для внутренней связи. Для внесения изменений потребуется отредактировать главный файл конфигурации Postfix с именем , хранящийся в каталоге .
Откройте его для редактирования в предпочитаемом текстовом редакторе:
Найдите следующие строки:/etc/postfix/main.cf
Задайте для параметра значение :/etc/postfix/main.cf
Также вам потребуется изменить директиву , используемую для указания списка доменов, доставляемых через транспорт доставки почты . По умолчанию значения выглядят примерно так: /etc/postfix/main.cf
Измените строку, чтобы она выглядела следующим образом: /etc/postfix/main.cf
Если ваш домен фактически является субдоменом, и вы хотите, чтобы сообщения электронной почты выглядели, как если бы они были отправлены с главного домена, вы можете добавить следующую строку в конец файла : /etc/postfix/main.cf
Необязательный параметр указывает, для каких доменов в адресе электронной почты будут урезаться субдомены.
После внесения изменений сохраните и закройте файл.
Примечание. В случае хостинга нескольких доменов на одном сервере другие домены также можно передать Postfix с помощью директивы .
Затем перезапустите Postfix, выполнив следующую команду:
Вы настроили Postfix только для отправки почты с вашего сервера. Теперь протестируем настройку, отправив тестовое сообщение на адрес электронной почты.
Переадресация системной почты
На этом шаге мы настроим переадресацию электронной почты для пользователя , чтобы сгенерированные системой сообщения, отправляемые на этот адрес, пересылались на внешний адрес электронной почты.
Файл содержит список альтернативных имен получателей электронных писем. Откройте его для редактирования:
По умолчанию он выглядит так: /etc/aliases
Единственная содержащаяся в нем директива предписывает пересылать сгенерированные системой электронные сообщения пользователю .
Добавьте в конец файла следующую строку: /etc/aliases
Для вступления изменений в силу выполните следующую команду:
При запуске команды будет построена база данных псевдонимов, используемых командой . Эти псевдонимы берутся из файла конфигурации, который вы только что отредактировали.
Протестируйте отправку электронных писем пользователю с помощью следующей команды:
Письмо должно прийти на указанный вами почтовый ящик. Если его там нет, проверьте папку «Нежелательная почта».
На этом шаге мы настроили переадресацию сгенерированных системой сообщений на ваш адрес электронной почты. Теперь мы можем включить шифрование сообщений, чтобы все отправляемые вашим сервером электронные письма были защищены от модификации во время пересылки и считались легитимными.
Примеры использования командной строки для email-отправки
1. Отправка письма с вложением
Для разных типов дистрибутива Linux команды могут отличаться.
а) для CentOS / Red Hat:
echo ‘Attachment’ | mail -s ‘Subject attachment message’ -a /var/log/maillog master@dmosk.ru
б) для Ubuntu:
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 сервер
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
Настройка системы
Настраиваем планировщик cron для синхронизации времени:
crontab -e
И добавляем следующую строку:
0 0 * * * /sbin/ntpdate ru.pool.ntp.org
* в данном примере команда будет выполняться каждый день в 00:00.
* путь к исполняемому скрипту ntpdate может быть другой. Если при запуске /sbin/ntpdate система выдаст ошибку No such file or directory, запустите which ntpdate, чтобы узнать правильный путь к скрипту.
Задаем часовой пояс и выполняем синхронизацию времени:
\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
ntpdate ru.pool.ntp.org
* если система выдаст ошибку, установите утилиту командой yum install ntpdate или yum install ntp.
Задаем имя сервера:
vi /etc/hostname
mailer.dmosk.ru
* необходимо задать полное доменное имя (FQDN), по возможности, в том домене, с которого будем отправлять сообщения. В данном примере имя сервера — mailer, домен — dmosk.ru.
Сразу применяем настройку имени хоста:
hostname mailer.dmosk.ru
Настраиваем брандмауэр:
firewall-cmd —permanent —add-port=25/tcp
firewall-cmd —reload
* в данном случае мы открыли 25 SMTP-порт для отправки электронных писем.
Команда Maildir-utils
«mu» — это набор утилит командной строки для Linux/Unix, который позволяет производить быстрый поиск писем.
Пользователи Debian/Ubuntu могут установить его с помощью apt-get:
# apt-get install maildir-utils
Пользователи Fedora / CentOS / Red Hat Enterprise Linux (RHEL) могут использовать yum:
# yum install maildir-utils
Ниже пара простых команд из этого пакета:
$ mu find from:william subject:report
для поиска писем от william с темой report.
Чтобы проверить текущие настройки почты, используется опция info.
# mu-tool info VERSION=2.99.97 SYSCONFDIR=/etc MAILSPOOLDIR=/var/mail/ SCHEME=mbox LOG_FACILITY=mail .....
Итак, можно подвести итоги. На самом деле получение и отправление писем из командной строки не представляет особой сложности, если вы знаете, что делаете.
Тестирование сервера SMTP
На этом шаге мы проверим, может ли Postfix отправлять электронные сообщения на внешний адрес электронной почты, используя команду , которая входит в пакет , установленный на первом шаге.
Выполните следующую команду для отправки тестового письма:
Проверьте почтовый ящик, на адрес которого вы отправили сообщение. Вы должны увидеть это сообщение в папке «Входящие». Если его там нет, проверьте папку «Нежелательная почта». Сейчас все электронные письма отправляются без шифрования, и поэтому провайдеры могут посчитать их спамом. Шифрование мы настроим немного позднее, на шаге 5.
Если при выполнении команды появится сообщение об ошибке, или вы не получите письмо в течение длительного времени, проверьте правильность измененной вами конфигурации Postfix и соответствие имени сервера и имени хоста вашему домену.
С этой конфигурацией адрес в поле «» в отправляемых тестовых письмах будет иметь вид , где — имя пользователя сервера, от лица которого вы запустили команду.
Вы отправили с сервера электронное письмо и убедились, что оно успешно получено. На следующем шаге мы настроим переадресацию электронной почты для пользователя .
SMTP: Настройка конфигурационных файлов
Время приготовить конфигурационные файлы. Файлы transport и aliases не поставляются при установке, их нужно создать вручную.
:~# cd /etc/postfix :/etc/postfix# touch transport aliases
main.cf
Сделайте резервную копию main.cf а затем модифицируйте. Следующие строки добавлены/изменены в конфигурационном файле. Для дальнейших подробностей о параметрах обратитесь к официальному README и документу по настройки.
:/etc/postfix# vim main.cf
## имя сервера ## myhostname = mail.example.tst ## определение псевдонимов ## alias_maps = hash:/etc/postfix/aliases alias_database = hash:/etc/postfix/aliases ## определение transport ## transport_maps = hash:/etc/postfix/transport ## myorigin задаёт доменное имя для писем, берущих начало с этого сервера. В нашем случае, все исходящие письма должны иметь '@example.tst' в качестве домена отправителя ## myorigin = example.tst ## mydestination параметр определяет, какие домены эта машина будет доставлять локально вместо того, чтобы переправлять на другую машину. ## mydestination = mail.example.tst, localhost.example.tst, localhost, hash:/etc/postfix/transport ## адрес smarthost. В этом уроке не используется, о нём будет расказанов в будущей инструкции ## relayhost = ## доверенные сети отправителя. postfix не будет пересылать письма, приходящие из других сетей ## mynetworks = 127.0.0.0/8 /104 /128 192.168.10.0/24 ## размер почтового ящика в байтах. 0 означает без ограничений ## mailbox_size_limit = 0 ## postfix будет прослушивать все доступные интерфейсы, например, eth0, eth1, eth2 и так далее ## inet_interfaces = all
transport
Письмам, предназначенным для домена example.tst, определено быть доставлено локально без каких-либо DNS запросов.
:/etc/postfix# vim transport
example.tst local: .example.tst local:
:/etc/postfix# postmap transport
aliases
Предполагаем, что все письма, отправленные пользователю userA, должны быть доставлены также пользователю userB, для этого файл aliases изменён как показано ниже:
:/etc/postfix# vim aliases
userA: userA, userB
:/etc/postfix# postalias aliases
Обратите внимание: Синтекс ‘userA: userB’ определяет, что почта должна быть направлена только пользователю userB. Пользователь userA не будет получать копию письма.
Hosting
Note: PostfixAdmin needs to be run as its own user and group (i.e. ). It’s using , and for configurations, template caches and (potentially) sockets (respectively)!
Apache
This article or section needs expansion.
php-fpm
Include the following configuration in your Apache HTTP Server configuration (i.e. ) and restart the web server:
/etc/httpd/conf/postfixadmin.conf
Alias /postfixadmin "/usr/share/webapps/postfixadmin/public" <Directory "/usr/share/webapps/postfixadmin/public"> DirectoryIndex index.html index.php <FilesMatch \.php$> SetHandler "proxy:unix:/run/postfixadmin/postfixadmin.sock|fcgi://localhost/" </FilesMatch> AllowOverride All Options FollowSymlinks Require all granted SetEnv PHP_ADMIN_VALUE "open_basedir = /tmp/:/usr/share/webapps/postfixadmin:/etc/webapps/postfixadmin/:/var/cache/postfixadmin/templates_c" </Directory>
Create a pool for postfixadmin and restart php-fpm.service:
/etc/php/php-fpm.d/postfixadmin.conf
user = postfixadmin group = postfixadmin listen = /run/postfixadmin/postfixadmin.sock listen.owner = http listen.group = http pm = ondemand pm.max_children = 4
Note: If using php7.4, change the settings to the following:
/etc/php/php-fpm.d/postfixadmin.conf
user = postfixadmin group = postfixadmin listen = /run/postfixadmin/postfixadmin.sock listen.acl_users = http listen.acl_groups = http pm = ondemand pm.max_children = 4
Then override the default tmpfiles rule creating the directory :
cp /usr/lib/tmpfiles.d/postfixadmin.conf /etc/tmpfiles.d/
And append the following rule to it :
/etc/tmpfiles.d/postfixadmin.conf
... a+ %t/postfixadmin - - - - group:root:rwx
Then reboot.
To only allow localhost access to postfixadmin (for heightened security), add this to the previous directive:
Order Deny,Allow Deny from all Allow from 127.0.0.1
Nginx
Nginx can proxy application servers such as and uWSGI, that run a dynamic web application.
The following examples describe a folder based setup over a non-default port (for simplicity).
Note: For server entry management in nginx have a look at .
Note: Postfixadmin ships a configuration for uWSGI.
php-fpm
/etc/php/php-fpm.d/postfixadmin.conf
user = postfixadmin group = postfixadmin listen = /run/postfixadmin/postfixadmin.sock listen.owner = http listen.group = http pm = ondemand pm.max_children = 4
Note: If using php7.4, change the settings to the following:
/etc/php/php-fpm.d/postfixadmin.conf
user = postfixadmin group = postfixadmin listen = /run/postfixadmin/postfixadmin.sock listen.acl_users = http listen.acl_groups = http pm = ondemand pm.max_children = 4
Then override the default tmpfiles rule creating the directory :
cp /usr/lib/tmpfiles.d/postfixadmin.conf /etc/tmpfiles.d/
And append the following rule to it :
/etc/tmpfiles.d/postfixadmin.conf
... a+ %t/postfixadmin - - - - group:root:rwx
Then reboot.
You will need to at least activate the and extensions in . Make sure you also add to open_basedir in your php.ini. Restart php-fpm for all these to take effect.
Add the following configuration for nginx and restart it.
/etc/nginx/sites-available/postfixadmin.conf
server { listen 8081; server_name postfixadmin; root /usr/share/webapps/postfixadmin/public/; index index.php; charset utf-8; access_log /var/log/nginx/postfixadmin-access.log; error_log /var/log/nginx/postfixadmin-error.log; location / { try_files $uri $uri/ index.php; } location ~* \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; include fastcgi_params; fastcgi_pass unix:/run/postfixadmin/postfixadmin.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; } }
uWSGI
Install , create a per-application socket for uWSGI (see for reference) and the unit.
Add the following configuration for nginx and restart nginx.
/etc/nginx/sites-available/postfixadmin.conf
server { listen 8081; server_name postfixadmin; root /usr/share/webapps/postfixadmin/public/; index index.php; charset utf-8; access_log /var/log/nginx/postfixadmin-access.log; error_log /var/log/nginx/postfixadmin-error.log; location / { try_files $uri $uri/ index.php; } # pass all .php or .php/path urls to uWSGI location ~ ^(.+\.php)(.*)$ { include uwsgi_params; uwsgi_modifier1 14; uwsgi_pass unix:/run/postfixadmin/postfixadmin.sock; } }
Настройка учетной записи GMail или какой-либо другой почтовой службы
Так как мы решили отправлять сообщения электронной почты с помощью SMTP-сервера компании GMail, нам, очевидно, понадобится учетная запись GMail. При желании вы можете использовать любую другую почтовую службу, например, .
Вам не придется изменять каких-либо параметров учетной записи GMail, за исключением предоставления доступа к почтовому ящику приложениям, которые Google считает «менее безопасными».
После входа в интерфейс GMail вам придется перейти по адресу и активировать опцию «Access for less secure apps» таким образом, как показано на иллюстрации ниже.
Думаю, что другие почтовые службы также требуют выполнения аналогичных действий из-за повсеместного использования механизмов обеспечения безопасности пользовательских почтовых ящиков. Вам придется выполнить дополнительные действия, если вы используете двухфакторную авторизацию.
Prerequisites
I assume that you have followed part 1 and part 2 of this tutorial series. If you followed mail server tutorials on other websites, I recommend purging your configurations and start over with my tutorial series, so you are not going to be confused by different setup processes.
PostfixAdmin is written in PHP and requires a database (MySQL/MariaDB, PostgreSQL or SQLite). This article will use MariaDB database. You also need to run Apache or Nginx web server. So basically we are going to need a LAMP or LEMP stack.
If you prefer to use Apache web server, then set up a LAMP stack.
How to set up LAMP stack on CentOS 8/RHEL 8
If you prefer to use Nginx web server, then set up a LEMP stack.
How to set up LEMP stack on CentOS 8/RHEL 8
Once the above requirements are met, let’s install and configure PostfixAdmin.
Отправка почты
В зависимости от дистрибутива, который вы используете, может понадобиться установить дополнительные пакеты, такие как mailutils, чтобы команда mail нормально работала.
Пользователи Debian/Ubuntu могут воспользоваться командой apt-get:
# apt-get install mailutils
Пользователи Fedora / CentOS / Red Hat Enterprise Linux (RHEL) могут сделать это с помощью yum:
# yum install mailutils
Теперь команда mail должна быть готова к работе.
Выполните приведенную ниже команду, заменив «user@yourmaildomain.com» на свой адрес электронной почты. Опция s задает тему письма.
$ mail -s "Hello World" user@yourmaildomain.com
Теперь вы можете вводить текст письма. Когда закончите, нажмите «control-D» в начале новой строки.
# mail -s "This is the subject" m00n.silv3r@gmail.com Cc: Hi Silver How are you doing Hope its going fine. Bye
Вы отправили первое письмо из командной строки. Содержимое письма можно вставить из файла.
В некоторых дистрибутивах командная оболочка сначала запросит в интерактивном режиме ввод других полей, таких как «Cc» (Carbon copy). Просто нажимайте «Enter», чтобы пропустить этот этап. Когда вы введете адрес или адреса электронной почты, необходимо нажать «Enter», чтобы перейти на новую строку, к телу письма.
После нажатия Ctrl+D вы возвращаетесь в командную строку без каких либо дополнительных оповещений. Однако ваше письмо было отправлено.
Интересно, что если вы ничего не введете в теле письма и нажмете Ctrl+D, команда mail отреагирует на это:
# mail -s "This is the subject" m00n.silv3r@gmail.com Cc: Null message body; hope that's ok
Если тело письма хранится у нас в отдельном файле, мы можем напрямую использовать его для отправки письма. Это полезно при вызове команды mail из скриптов, или других программ, написанных, например, на perl или php.
$ mail -s "Hello World" user@yourmaildomain.com < /home/user/mailcontent.txt
Или быстрая отправка письма одной строкой:
# echo "This is the message body" | mail -s "This is the subject" m00n.silv3r@gmail.com
Другие полезные параметры команды mail:
Ниже пример использования этих опций:
$ mail -s "Hello World" user@yourmaildomain.com -c usertocc@yourmaildomain.com -b usertobcc@yourmaildomain.com
Возможно задавать несколько получателей, перечисляя их адреса через запятую.
$ mail -s "Hello World" user1@yourmaildomain.com,user2@yourmaildomain.com
Указать адрес отправителя тоже несложно, но здесь есть своя хитрость. После отправляемого письма необходимо добавить перед своим адресом следующую последовательность символов:
(двойное тире) (пробел) (одинарное тире) (без пробела) f
Ниже пример:
$ mail -s "Hello World" user@yourmaildomain.com -- -f from_user@yourmaildomain.com
Однако приведенная выше последовательность может работать в centos, но не в debian или ubuntu. В этих системах используется альтернативный синтаксис:
# echo "This is the message body" | mail -s "This is the subject" m00n.silv3r@gmail.com -aFrom:blog@binarytides.com
Опция a в целом добавляет дополнительные заголовки. Чтобы задать с ее помощью отправителя, используется следующий синтаксис:
# echo "This is the message body" | mail -s "This is the subject" m00n.silv3r@gmail.com -aFrom:Blogger\<blog@binarytides.com\>
Обратите внимание, что бы экранируем угловые скобки, так как они могут иметь свое назначение для командной оболочки
Установка и настройка sSMTP
На следующем шаге нужно установить агент передачи сообщений (Message Transfer Agent — MTA), в нашем случае , который может лишь отправлять сообщения электронной почты, но не принимать их.
Команда для установки sSMTP в Debian или Ubuntu:
sudo apt-get install ssmtp
Команда для установки sSMTP в OpenWRT:
opkg update && opkg install ssmtp ca-certificates
Примечание: вероятно, вам придется переместить корневую файловую систему вашего маршрутизатора на внешний флеш-накопитель, так как необходимая для работы sSMTP библиотека занимает примерно 1.7 МБ.
Файл конфигурации sSMTP, в который вам придется добавить информацию для доступа к почтовому серверу, расположен по пути .
Пример содержимого этого файла приведен ниже.
mailhub=smtp.gmail.com:587 rewriteDomain=gmail.com hostname=smtp.gmail.com:587 AuthUser=<имя-пользователя>@gmail.com AuthPass=<пароль> FromLineOverride=YES UseTLS=YES USESTARTTLS=YES
Используйте команду для получения информации обо всех параметрах конфигурации sSMTP.
Отправка писем из скриптов bash/shell
Теперь давайте копнем глубже и попробуем отправить письмо из скрипта оболочки. Ниже простой скрипт, отправляющий информацию по использованию диска.
#!/bin/bash du -sh | mail -s "disk usage report" user@yourmaildomain.com
Откройте новый файл, вставьте в него приведенные выше строки, сохраните и запустите. Вы получите письмо, содержащее вывод команды «du -sh».
И последняя хитрость в письмах из командной сроки — добавление вложений к письмам, отправляемым из скриптов. Предположим, вам необходимо сделать резервную копию директории с конфигурационными файлами, заархивировать ее и отправить в качестве вложения с помощью mutt:
#!/bin/bash tar -zcf /home/user/backup.tar.gz /home/user/files_to_backup echo "Archived configuration files" | mutt -a /home/user/backup.tar.gz -s "backup data" user@yourmaildomain.com
Команда echo в начале третьей строки добавляет текст «Archived configuration files» в тело письма.
Примеры использования командной строки для email-отправки
1. Отправка письма с вложением
Для разных типов дистрибутива Linux команды могут отличаться.
а) для CentOS / Red Hat:
echo ‘Attachment’ | mail -s ‘Subject attachment message’ -a /var/log/maillog master@dmosk.ru
б) для Ubuntu:
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