Разное

Ubuntu sendmail: configuration — sendmail: how to configure sendmail on ubuntu?

Sendmail — это средство маршрутизации электронной почты общего назначения, используемое для передачи электронной почты через Интернет.

Он включает SMTP (Simple Mail Transfer Protocol) для пересылки почты и доставки электронной почты.

Большинство системных администраторов предпочитают использовать сервер Sendmail в качестве MTA.

Вы также можете использовать сервер Sendmail для отправки электронной почты через внешние SMTP-серверы, такие как Gmail, Amazon SES, MailChimp и т. д.

Содержание

1. Удалите Постфикс

Postfix — это служба SMTP по умолчанию, предварительно установленная в операционных системах Ubuntu.

И если вы готовы использовать сервер Sendmail в вашей системе, прежде всего, удалите существующую установку postfix в Ubuntu.

sudo systemctl stop postfix
sudo apt remove postfix && apt purge postfix

2. Установите Sendmail

Если вы не установили Sendmail, используя следующую команду, чтобы установить Sendmail с другими необходимыми пакетами, используя менеджер пакетов yum.

sudo apt install sendmail

Sendmail хранит все свои файлы конфигурации в каталоге /etc/mail.

Ниже вы найдете подробную информацию о файлах конфигурации Sendmail.

  • access — разрешить / запретить другим системам использовать Sendmail для исходящих писем.
  • domaintable — используется для сопоставления доменного имени для Sendmail.
  • local-host-names — используется для определения псевдонимов для хоста.
  • mailertable — Определяет инструкции, которые переопределяют маршрутизацию для определенных доменов.
  • virtusertable — определяет специфичную для домена форму псевдонимов, позволяющую разместить несколько виртуальных доменов на одном компьютере.

2.1 Закомментируйте строку ниже в /etc/mail/sendmail.mc, чтобы разрешить получение электронной почты из любой точки мира.

Чтобы закомментировать строку в sendmail.mc, просто поставьте dnl в начале строки.

dnl DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp, Addr=127.0.0.1')dnl
dnl DAEMON_OPTIONS(`Family=inet,  Name=MSP-v4, Port=submission, M=Ea, Addr=127.0.0.1')dnl

2.2 Добавьте эту строку также в sendmail.mc над опцией «MAILER»

FEATURE(`relay_hosts_only')dnl

2.3 Добавьте полное имя хоста вашего ПК в этот файл.

hostname >> /etc/mail/relay-domains

4. Перекомпилируйте конфигурацию Sendmail

m4 — макропроцессор для компиляции файлов конфигурации Sendmail. m4 основывается на потоке, то есть не разбирается в строках.

sudo m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

Перезапустите сервис Sendmail

sudo /etc/init.d/sendmail restart

4. Настройка доменной маршрутизации электронной почты

Как вы прочитали выше, этот виртуальный файл используется для создания псевдонимов, позволяя размещать несколько виртуальных доменов на одном компьютере.

1. Все электронные письма, адресованные домену @example.com, доставляются по адресу [email protected]

@example.com [email protected]

2. Все электронные письма, адресованные [email protected], будут перенаправлены на локального пользователя jack

[email protected]  jack

3. Все электронные письма, адресованные @mydomain.com, будут пересылаться на домен @otherdomain.com с соответствующими именами пользователей.

@mydomain.com    %[email protected]

4. Все письма, адресованные @otherdomain.com, будут отклонены моим почтовым сервером с подтверждением отправителя с сообщением

@otherdomain.com 	 error:nouser User unknown

После внесения всех изменений в virtusertable выполните следующую команду, чтобы создать обновленный файл virtusertable.db, содержащий новую конфигурацию.

sudo makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable

Теперь перезапустите сервис Sendmail

sudo /etc/init.d/sendmail restart

 

Поделитесь статьей:

Настройка sendmail на localhost под Ubuntu 13.04

Руководство по установке и настройке одного из старейших MTA (Mail Transfer Agent), программа для отправки электронной почты — sendmail, который доступен для установки на любой операционной системе. Во многих ОСях  sendmail  установлен по умолчанию и менять этот стандартный MTA на другой особой необходимости нет. При этом, тот же PHP по дефолту настроен на работу именно с этим MTA. Если настройка sendmail затягивается — ставьте postfix (Настройка postfix на localhost под Ubuntu 13.04), не стоит терять много времени.

Подготовка

Проверьте установлен ли у вас sendmail, а не exim4 или другой MTA:

ls -la `which sendmail`
# lrwxrwxrwx 1 root root 26 2011-01-17 19:58 /usr/sbin/sendmail -> /etc/alternatives/sendmail

Установка

sudo apt-get install sendmail sasl2-bin

Настройка /etc/hosts

127.0.0.1	localhost localhost.localdomain e5530
Примечание

Необходимо указать ваш основной хост (имя компьютера, у меня это e5530 ) и localhost.localdomain иначе вы получите ошибку: My unqualified host name (myhostname) unknown; sleeping for retry» и «unable to qualify my own domain name (e5530) – using short namesendmail долго стартует и медленно отправляет почту. Возможно хост localhost.localdomain можно пропустить, не уверен.

После этого нужно указать имена локальных хостов, от которых sendmail будет принимать запросы на отправку email сообщений, в  файле /etc/mail/local-host-names:

localhost
e5530

Авторизация на relay сервере gmail

Правим файл /etc/mail/auth/client-info:

AuthInfo:smtp.gmail.com "U:[email protected]" "I:[email protected]" "P:YourPass" "M:PLAIN"
AuthInfo:smtp.gmail.com:465 "U:[email protected]" "I:[email protected]" "P:YourPass" "M:PLAIN"
Примечание

Вместо порта 465 можете попытаться стучать на 587 (если есть проблемы с авторизацией):

AuthInfo:smtp.gmail.com:587 "U:[email protected]" "I:[email protected]" "P:YourPass" "M:PLAIN"

Проверьте права на доступ к файлам авторизации (600) и установите нужные, если отличаются:

chmod 600 /etc/mail/auth/*

Конфиг sendmail.mc

Файл конфига /etc/mail/sendmail.mc. Сравните ваш конфиг. Должно быть как-то так.. Порядок инструкций важен!

dnl #
include(`/etc/mail/m4/dialup.m4')dnl
include(`/etc/mail/m4/provider.m4')dnl
include(`/etc/mail/tls/starttls.m4')dnl
include(`/etc/mail/sasl/sasl.m4')dnl
FEATURE(`authinfo',`hash /etc/mail/auth/client-info')dnl
define(`SMART_HOST',`smtp.gmail.com')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
dnl #
dnl # Default Mailer setup
MAILER_DEFINITIONS
MAILER(`local')dnl
MAILER(`smtp')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
# dnl define(`confDOMAIN_NAME', `e5530')dnl

Применяем конфиг sendmail

cd /etc/mail
sudo su # просто sudo не сработает!
m4 sendmail.mc > sendmail.cf
makemap -r hash authinfo.db < auth/client-info
make
/etc/init.d/sendmail restart # Перезагрузка конфига

Проблемы и решения

Если все настроено правильно но сообщения попадают в «отложенную очередь» и не релеятся на другой SMTP:

  1. Проверьте ваш IP’шник в блек-листах. Проверить бан IP можно тут smart-ip.net, мой IP попал в базу spamhaus’а.
  2. Проверьте не блокирует ли провайдер исходящие пакеты на 25 порт. 
Проблемы с Интертелекомом!

У меня так и не получилось настроить релей сообщений на GMail через sendmail на Интертелекомовском подключении — sendmail упорно стучался на 25 порт, который закрыт провайдером. Пришлось настраивать postfix.

Настройка PHP (если необходимо)

Укажите параметры запуска sendmail в конфиге /etc/php5/apache2/php.ini (/etc/php5/cli/php.ini):

## Настройка sendmail для PHP :
sendmail_path = /usr/sbin/sendmail -t
;sendmail_path = "/usr/sbin/sendmail -t -f [email protected]  -i"

Проверим настройки

echo "Текст сообщения" | mail -s "Subjet" [email protected]
sendmail -t [email protected] -f [email protected] -v -i < ~/mail-body.txt

Для проверки postfix попробуйте отправить несколько сообщений из консоли. Как это делать я расписал в этой статье: «Отправка Email сообщений из консоли».

Управление sendmail

Посмотреть всю очередь сообщений:

sudo mailq

Посмотреть очередь сообщений по определенному адресу:

sudo mailq | grep '[email protected]' | wc -l

Очистить всю очередь сообщений sendmail:

sudo rm -r /var/spool/mqueue-client/*

Очистить очередь сообщений sendmail по адресату:

cd /var/spool/mqueue
ls | xargs -ti sh -c "grep '[email protected]' '{}' > /dev/null && rm -f '{}'"

#sendmail, #LAMP, #MTA

P.S. Если вы хотите изучить консоль Linux на достаточно хорошем уровне — рекомендую к прочтению свежую книгу Дениса Колисниченко «Командная строка Linux и автоматизация рутинных задач».



Установка и настройка sendmail

главная
— Статьи — Почта — Sendmail

Теги: sendmail Почтовый сервер

Настраиваем sendmail (8.12.6/7/8) для виртуального почтового хостинга.

Установка sendmail

Сначала устанавливаем итз портов sendmail c поддержкой cyrus sasl (система аутентификации).


cd /usr/ports/mail/sendmail-sasl
make install

После установки sendmail мы должны изменить файл /etc/make.conf. Добавляем в него строчку


SENDMAIL_CF_DIR=	/usr/local/share/sendmail/cf

Если до этого стоял более старый sendmail, устанавливаем файл submit.cf


make submit.cf

Для запуска sendmail будем использовать следующий сценарий (переименуем его в удобоваримый формат):


mv /usr/local/etc/rc.d/sendmail.sh.sample /usr/local/etc/rc.d/030.sendmail.sh

Для нормального запуска обновленной версии мы должны указать путь к ней (файл /etc/mail/mailer.conf). Это можно сделать либо при помощи команды


make mailer.conf

либо вручную, изменив файл mailer.conf:


sendmail	/usr/local/sbin/sendmail
send-mail	/usr/local/sbin/sendmail
mailq		/usr/local/sbin/sendmail
newaliases	/usr/local/sbin/sendmail
hoststat	/usr/local/sbin/sendmail
purgestat	/usr/local/sbin/sendmail

На этом установка sendmail окончена. Осталоь столько запустить его командой


/usr/local/etc/rc.d/030.sendmail.sh start

sendmail sm-msp-queue

Сообщения sendmail sm-msp-queue говорят о том, что все прошло нормально.

Настройка sendmail

Будем считать, что мы настраиваем два виртуальных почтовых домена: perldoc.ru и perlfaq.ru. Для настройки sendmail c поддержкой виртуального постового хостинга нам потребуется создать (или изменить) следующие файлы:

  • freebsd.mc
  • aliases
  • access
  • local-host-names
  • virtusertable

aliases

Этот файл описывает пользовательские псевдонимы, используемые sendmail. Файл расположен в каталоге /etc/mail и представляет собой список вида


имя addr_1, addr_2, addr_3...

Более подробно структура файла aliases описана в aliases (5). В этот файл мы добавляем строку


root:   [email protected]

Вся локальная почта, адресованная пользователю root, теперь будет приходить на адрес [email protected].

access

В этом файле мы указываем, для каких IP адресов sendmail должен принимать и пересылать почту. Поскольку для эих целей мы будем использовать аутентификацию cyrus sasl, мы разрешим только отсылку с локального хоста


localhost.localdomain   RELAY
localhost               RELAY

local-host-names

В этом файле мы храним названия доменов, для которых наш сервер должен обрабатывать почту. Поскольку мы хотим использовать наш сервер для двух виртуальных почтовых доменов perldoc.ru и perlfaq.ru, пропишем их в файл:


perldoc.ru
perlfaq.ru


virtusertable

В файле virtusertable мы указываем sendmail, куда направлять почту, пришедшую на адреса в доменах perldoc.ru и perlfaq.ru.


[email protected]	stellar-perldoc.ru
[email protected]	admin-perldoc.ru
@perldoc.ru		error:nouser No such user here

[email protected]	stellar-perlfaq.ru
@perlfaq.ru		error:nouser No such user here

Вся почта, пришедшая на адрес [email protected] будет направляться в почтовый ящик пользователя stellar-perldoc.ru, а почта, пришедшая на [email protected], соответственно будет отсылаться пользователю admin-perldoc.ru. Тоже самое будет и для домена perlfaq.ru. Если на наш домен будет прислана почта с несуществующем пользователем, сработает строчка


@perldoc.ru		error:nouser No such user here 

и sendmail откажется принимать такое сообщение.

freebsd.mc

Теперь нам осталось только изменить конфигурацию файла freebsd.mc, чтобы sendmail научился работать с виртуальными почтовыми доменами. Здесь надо понимать, что в том случае, когда существует файл, у которого имя совпадает с названием машины (например, для машины с именем genius файл будет genius.mc), он используется вместо файла freebsd.mc

Вот примерный вид конфигурационного файла:


1  divert(0)
2  VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.10.2.16 2002/05/22 16:39:14 gshapiro Exp $')
3  OSTYPE(freebsd4)
4  DOMAIN(generic)
5
6  FEATURE(access_db, `hash -o -T /etc/mail/access')
7  FEATURE(blacklist_recipients)
8  FEATURE(local_lmtp)
9  dnl FEATURE(mailertable, `hash -o /etc/mail/mailertable')
10 FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
11 
12 dnl Uncomment to allow relaying based on your MX records.
13 dnl NOTE: This can allow sites to use your server as a backup MX without
14 dnl       your permission.
15 dnl FEATURE(relay_based_on_MX)
16 
17 dnl DNS based black hole lists
18 dnl --------------------------------
19 dnl DNS based black hole lists come and go on a regular basis
20 dnl so this file will not serve as a database of the available servers.
21 dnl For that, visit http://dmoz.org/Computers/Internet/Abuse/Spam/Blacklists/
22 
23 dnl Uncomment to activate Realtime Blackhole List
24 dnl information available at http://www.mail-abuse.com/
25 dnl NOTE: This is a subscription service as of July 31, 2001
26 FEATURE(dnsbl)
27 dnl Alternatively, you can provide your own server and rejection message:
28 FEATURE(dnsbl, `blackholes.mail-abuse.org', `"550 Mail from " $&{client_addr} "
rejected, see http://mail-abuse.org/cgi-bin/lookup?" $&{client_addr}')
29 
30 dnl Dialup users should uncomment and define this appropriately
31 dnl define(`SMART_HOST', `your.isp.mail.server')
32 
33 dnl Uncomment the first line to change the location of the default
34 dnl /etc/mail/local-host-names and comment out the second line.
35 dnl define(`confCW_FILE', `-o /etc/mail/sendmail.cw')
36 define(`confCW_FILE', `-o /etc/mail/local-host-names')
37 
38 dnl Uncomment both of the following lines to listen on IPv6 as well as IPv4
39 dnl DAEMON_OPTIONS(`Name=IPv4, Family=inet')
40 dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6')
41 
42 TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl
43 define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl
44 define(`confDEF_AUTH_INFO', `/etc/mail/auth/auth-info')dnl
45 FEATURE(`no_default_msa')dnl turn off default entry for MSA
46 DAEMON_OPTIONS(`Port=25, Name=MSA, M=E')dnl
47 
48 define(`confMAX_RCPTS_PER_MESSAGE', `10')
49 define(`confMAX_MESSAGE_SIZE', `1048576')
50
51 define(`confBIND_OPTS', `WorkAroundBrokenAAAA')
52 define(`confMAX_MIME_HEADER_LENGTH', `256/128')
53 define(`confNO_RCPT_ACTION', `add-to-undisclosed')
54 define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')
55 MAILER(local)
56 MAILER(smtp)


В строке 6 мы задаем файл с пользовательскими псевдонимами; в десятой строке — имя файла трансляции виртуальных пользователей в настоящих, а в 36-й строке — названия доменов, для которых наш сервер должен обрабатывать почту.
Также ограничим максимальный размер письма одним мегабайтом (строка 49) и запретим рассылать письмо одновременно более, чем 10 получателям (строка 48). Если есть необходимость отправки всей почты на промежуточный SMTP сервер (например, на SMTP сервер провайдера), следует раскомментировать строку 31 и вместо «your.isp.mail.server» указать IP адрес или имя SMTP сервера провайдера.

Запуск и тестирование

Теперь, когда почти все сделано, нам надо пересобрать заново файл конфигурации sendmail и обновить базы данных. Делается это следующим набором команд:


cd /etc/mail
rm *.db
rm freebsd.cf
make all
make install

Результатом будет нечто вроде этого:

/usr/bin/m4 -D_CF_DIR_=/usr/local/share/sendmail/cf/ /usr/local/share/sendmail/cf/m4/cf.m4 genius.mc > genius.cf /usr/sbin/makemap hash virtusertable.db < virtusertable chmod 0640 virtusertable.db /usr/sbin/makemap hash access.db < access chmod 0640 access.db /usr/sbin/sendmail -bi /etc/mail/aliases: 26 aliases, longest 18 bytes, 276 bytes total chmod 0640 /etc/mail/aliases.db install -m 444 freebsd.cf /etc/mail/sendmail.cf install -m 444 freebsd.submit.cf /etc/mail/submit.cf

Теперь перезапускаем sendmail


/usr/local/etc/rc.d/030.sendmail.sh stop
/usr/local/etc/rc.d/030.sendmail.sh start

и тестируем:


telnet localhost 25

Trying ::1… Trying 127.0.0.1… Connected to localhost. Escape character is ‘^]’. 220 localhost.my.domain ESMTP Sendmail 8.12.6/8.12.6; Mon, 30 Dec 2002 13:31:56 +0300 (MSK) EHLO localhost 250-localhost.my.domain Hello localhost [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN 250-DELIVERBY 250 HELP QUIT 221 2.0.0 localhost.my.domain closing connection

Наличие строчки «250-AUTH DIGEST-MD5 CRAM-MD5 PLAIN LOGIN» говорит нам о том, что sendmail может аутентифицировать пользователя. Добавляем пользователя:


saslpasswd2 admin-perldoc.ru

Password:
Again (for verification):

Вводим пароль пользователя и проверяем:


sasldblistusers2

 admin-perldoc.ru@genius: userPassword 

Собственно говоря, на этом настройка sendmail закончена. Теперь настраиваем The Bat! для того, чтобы можно было отправлять почту с аутентификацией:

Заходим в Ящик -> Свойства почтового ящика -> Транспорт -> Аутентификация

Выделяем чекбокс «Аутентификация SMTP (RFC-2554)».
Переключаем кнопку «Использовать параметры, указанные ниже.»
Вводим имя пользователя и пароль, которые создали при помощи saslpasswd2.
Пользователь: admin-perldoc.ru@genius.
Пароль: *********

(!) Обратите внимание на то, что имя пользователя указано вместе с именем машины.
Выделяем чекбокс «Требовать безопасную (MD5) аутентификацию».
 

В том случае, если используется MS Outlook или другой почтовый клиент, в котором нет безопасной аутентификации (DIGEST-MD5, CRAM-MD5), необходимо использовать аутентификацию по методам PLAIN или LOGIN. При этом в качестве имени пользователя надо использовать имя пользователя БЕЗ добавленного имени машины. В нашем случае имя пользователя будет выглядеть так: admin-perldoc.ru.

После отправки письма в лог-файле /var/log/maillog должны быть примерно такие записи:


Dec 30 13:54:41 genius sm-mta[77570]: AUTH=server, relay=xxx.yyy.zzz.kkk [xxx.yyy.zzz.kkk],
	authid=admin-perldoc.ru@genius, mech=CRAM-MD5, bits=0

Поддерживается http://stellar.df.ru

Авторизуйтесь для добавления комментариев!

Настройка sendmail для отправки почты через gmail.com / Хабр

Долго искал внятное объяснение как заставить локальный sendmail, установленный на компьютере во внутренней сети, отправлять почту во внешний мир. В качестве relay был выбран smtp.gmail.com.

Перекопал и испробовал кучу описаний в сети как это должно делаться. Результат оказался пшиком.

Предлагаю скомпилированный из разных источников и собственных ошибок результат действий который увенчался успехом. Возможно кому-нибудь сэкономит время.


Система: CentOS 6.3 (2.6.32-279.el6.x86_64).

Установка нужных пакетов:

uym install sendmail sendmail-cf openssl cyrus-sasl cyrus-sasl-plain nano

Создание SSL сертификатов:

mkdir /etc/mail/certs
chmod 700 /etc/mail/certs 
cd /etc/mail/certs
openssl dsaparam 1024 -out dsa1024 -out dsa1024.pem
openssl req -x509 -nodes -days 3650 -newkey dsa:dsa1024.pem -out /etc/mail/certs/mycert.pem -keyout /etc/mail/certs/mykey.pem
openssl req -x509 -new -days 3650 -key /etc/mail/certs/mykey.pem -out /etc/mail/certs/mycert.pem
ln -s /etc/mail/certs/mycert.pem /etc/mail/certs/CAcert.pem
chmod 600 /etc/mail/certs/*

Создание файла с данными для аутентификации:

nano /etc/mail/auth/authinfo
AuthInfo:smtp.gmail.com "U:root" "I:[email protected]" "P:PASSWORD"
AuthInfo: "U:root" "I:[email protected]" "P:PASSWORD"

Конвертируем:

makemap hash -r /etc/mail/auth/authinfo < /etc/mail/auth/authinfo

Добавляем в sendmail.mc нужную конфигурацию (важно: сделать это до первого FEATURE):

dnl # Smrp relay
define(`CERT_DIR', `MAIL_SETTINGS_DIR`'certs')
define(`confCACERT_PATH', `CERT_DIR')
define(`confCACERT', `CERT_DIR/CAcert.pem')
define(`confSERVER_CERT', `CERT_DIR/mycert.pem')
define(`confSERVER_KEY', `CERT_DIR/mykey.pem')
define(`confCLIENT_CERT', `CERT_DIR/mycert.pem')
define(`confCLIENT_KEY', `CERT_DIR/mykey.pem')
dnl #
dnl # gmail auth
define(`SMART_HOST',`[smtp.gmail.com]')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`ESMTP_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash -o /etc/mail/auth/authinfo.db')dnl

Компилируем конфигурацию, перезапускаем sendmail и проверяем отправку почты:

make -C /etc/mail
service sendmail restart
sendmail -f [email protected] -v [email protected]
Test
.

Проверяем результат:

mailq
tail maillog

Почтовый сервер на собственном сайте через sendmail / Хабр

Не так давно передо мной встала задача предоставить зарегистрированным в моих каталогах, промышленной, автомобильной и риэлторской тематики, организация личный почтовый ящик с именем моего домена. Вместо того, чтобы выдавать пользователям каталога непосредственные контактные данные, было определено, что более продуктивно будет выдавать им контактные данные с названием моего домена. Что должно увеличить посещаемость, как среди пользователей, так и среди самих организаций.

Пользователи получают возможность писать сообщения фирмам со своего личного ящика, сохранив их в адресной книги, или любым другим удобным для них способом. А организации будут вынуждены им с него отвечать, что в результате должно увеличить посещаемость и соответственно монетизировать мой проект.

К сожалению, как только я начал обращаться с данным вопросом на крупнейших форумах рунета, то получил не совсем тот ответ, который я ожидал. При этом, лучшие из предложений сводились к тому, чтобы снести прекрасно работающий sendmail и установить на него Postfix и Dovecot, которые тянули и другие зависимости. А установочный пакет выглядел бы примерно так: exim4, exim4-base, exim4-config, exim4-daemon-heavy, dovecot-common, dovecot-imapd, dovecot-pop3d, php5-imap. В худшем оговаривали баснословные суммы, аж в 2000$, или советовали пройти мимо и не позориться.

К сожалению, позориться долго не пришлось. Так как однозначной инструкции, которая бы удовлетворяла мои нужды, и другие возможные подобные решения в сети не нашлись, я решил, что данное руководство будет как нельзя кстати.

Поставленная мною задача решалась с помощью старого доброго sendmail и небольших настройках в его конфигурациях.

В первую очередь необходимо прописать настройки в dns-зоне:

Для MX:

@ IN MX 10 mx.site.ru.

И для AAAA:

@ IN AAAA 2001:0db8:85a3:0000:0000:8a2e:0370:7334

И для A:

mx.site.ru.  IN A <IP>

Указанный в ДНС MX адрес также надо будет прописать в /etc/hosts, добавив:

<IP> mail.site.ru

Теперь перейдем непосредтственно к конфиругации sendmail.

Начнем с файла /etc/mail/sendmail.mc. Для начала откроем двери для всех желающих, так как по умолчанию smtp-порт открыт только на раздачу. Проблему вирусов, спама и дос-атак обсудим позже. Делается это так:

DAEMON_OPTIONS(`Port=smtp,Addr=<ip>, Name=MTA-ext')dnl

Затем сразу после записи:

FEATURE(`use_cw_file')dnl

Добавим таблицы виртуальных пользователей и доменов:

FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')dnl

Теперь создадим файл, куда будем класть почту:

touch "/home/site.ru/public_html/mail"

И назначим ему права владельца а группу sendmail агента:

chown user:mail /home/site.ru/public_html/mail

Путь и название файла условное и рекомендуется создавать файл вне зоны доступа для случайных пользователей.

В файле /etc/aliases пропишем имя виртуального пользователя, которому и будут приходить сообщения.

user:   /home/site.ru/public_html/mail

В этом случае вся почта будет скапливаться в файле /home/site.ru/public_html/mail

Большой файл разобрать сложно, да и неудобно обращаться к нему отдельно от самого sendmail. Поэтому наиболее удобный вариант направить сразу на php скрипт, который будет его обрабатывать на лету.

user:   "|php5-cgi -c /path/to/php.ini /site.ru/public_html/mail.php"

Чтобы письма всех возможных пользователей отправлялись в файл /site.ru/public_html/mail.php

Запишем в файл /etc/mail/virtusertable инструкцию:

@site.ru user

Данная инструкция сообщает, что всех возможных пользователей сайта site.ru мы определяем как пользователя user, для которого ранее мы уже определили место для хранение почты. В дальнейшем нам лишь останется разобрать, кому и чья почта принадлежит и отдать уже фактическому владельцу на нашем сайте.

Завершающим этапом останется лишь прописать список имен хостов, принимаемых программой sendmail в файле
/etc/mail/local-host-names.

Добавив к существующим:

mx.site.ru
site.ru
(В конце пробел обязателен)

Активируем изменения командой sendmailconfig.

Защита от DDoS-атак

Для защиты от дос-атак я приведу несколько настроек, которые будут полезны. Их необходимо прописать в файле /etc/mail/sendmail.mc:

# максимальное число соединений в секунду. Если частота превышена, дополнительные соединения будут поставлены в очередь (не отброшены).
Define(confCONNECTION_RATE_THROTTLE',43')dnl 
#максимальное число дочерних процессов sendmail. Если это число будет превышено, дополнительные соединения будут поставлены в очередь (не отброшены).
Define(confMAX_DAEMON_CHILDREN',40')dnl 
#если на диске осталось указанное количество блоков, сервер больше не будет принимать сообщения. По умолчанию - 100.
Define(4configSIN_FREE_BLOCKS',100')dnl
#максимальный размер заголовка входящего сообщения, в байтах.
Define(confMAX HEADERS LENGTH', 4024')dnl
#максимальный размер тела входящего сообщения. Значение по умолчанию равно 4 Мб (4 194 302 байта). Не нужно устанавливать слишком маленькое значение, так как оно может быть легко превышено вложениями (attachments).
Define(confMAX_MESSAGE_SIZE',4194304')dnl

После чего еще раз активируем изменения командой sendmailconfig.

Антиспам и антивирус

В качестве антивирусной программы будем использовать Dr.Web. Он же поможет нам справиться и со спамом. Я не стал использовать дополнительные спам-фильтры, так как сам после долгих страданий от того, что в сервисе gmail.com нужные мне письма постоянно попадали в спам. Принял решение перейти на yandex. Поэтому чистку спамом считаю делом индивидуальным, а использование каких-либо спам-листов и фильтров довольно сомнительным удовольствием.

Установим ключ:

wget -O - http://officeshield.drweb.com/drweb/drweb.key | apt-key add

Подключим репозиторий:

nano /etc/apt/sources.list
deb http://officeshield.drweb.com/drweb/debian stable non-free

Обновляем репозиторий:

aptitude update

Устанавливаем Dr.Web:

aptitude install drweb-sendmail-av-as

Основной файл настройки антиспама /etc/drweb/plugin_vaderetro.conf. В нем нас особо интересуют черные и белые списки:

WhiteList = /home/site.ru/public_html/mail/WhiteList 
BlackList = /home/site.ru/public_html/mail/BlackList 

Их также можно вынести в разделы нашего сайта, либо в любое другое доступное для редактирования место, не забывая о соответствующих ограничениях и безопасности.

На этом все. В следующей публикации мы разберем сохраненную форму и создадим для нее таблицу в базе данных, привязав ее к пользователю сайта или каталога.

Используемые материалы

www.pettingers.org/code/sendmail-local.html
www.sendmail.com/sm/open_source/docs/m4/features.html
it-e.ru/blogs/administrirovanie/nastrojka-mta-sendmail
www.freebsd.org/doc/ru/books/handbook/sendmail.html
progressive0.livejournal.com/15919.html
adatum.ru/ustanovka-sendmail-dovecot-drweb-na-ubuntu.html

Отправка почты через консоль с авторизацией в linux

Для того, чтобы быть в курсе всего, что происходит на сервере, помимо мониторинга, полезно следить за стандартными письмами, которые шлют различные сервисы. Я расскажу, как настроить на сервере отправку писем через стандартный postfix с авторизацией на стороннем smtp сервере. Так же эта настройка будет полезна для отправки почты через консоль linux с авторизацией по smtp.


Если у вас есть желание освоить Linux с нуля, не имея базовых знаний, рекомендую познакомиться с онлайн-курсом Administrator Linux.Basic в OTUS. Курс для новичков, для тех, кто хочет войти в профессию администратора Linux. Подробности по .

По-умолчанию, в минимальной установке дистрибутива CentOS 7 уже идет в комплекте почтовый сервер postfix. Его я и буду использовать. Стандартные настройки сервера не дают нормальных возможностей для отправки почты. Сделаем некоторые дополнительные действия.

Для начала, чтобы иметь возможность оперативно проверять отправку почты через консоль, установим программу mailx. Без нее при попытке отправить письмо в консоли, будете получать ошибку:

# mail
bash: mail: command not found

Для того, чтобы это исправить, устанавливаем mailx.

# yum install mailx

После этого можно отправлять со своего сервера сообщения во внешний мир, например вот так.

# df -h | mail -s "Disk usage" [email protected]

На почту улетит вывод команды df.

Но при стандартных настройках ваше письмо либо попадет в спам, либо вообще не будет принято сервером получателя, потому что на вашем сервере нет корректных настроек для отправки почты (dns записи, spf, dkim и т.д.). Чтобы почта нормально отправлялась, надо воспользоваться каким-то внешним почтовым сервером. Настроим postfix на отправку локальных писем через внешний сервер с авторизацией по smtp.

Я взял дефолтный конфиг postfix, очистил его от комментариев и пробелов, добавил в конец свои настройки.

# cat /etc/postfix/main.cf
## DEFAULT CONFIG BEGIN ######################
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
inet_interfaces = localhost
inet_protocols = all
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5

sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
## DEFAULT CONFIG END ######################

# Имя сервера, которое выводит команда hostname
myhostname = centos7-test.xs.local
# Здесь по логике нужно оставлять только домен, но в данном случае лучше оставить полное имя сервера, чтобы в поле отправитель 
# фигурировало полное имя сервера, так удобнее разбирать служебные сообщения
mydomain = centos7-test.xs.local
mydestination = $myhostname
myorigin = $mydomain
# Адрес сервера, через который будем отправлять почту
relayhost = mailsrv.mymail.ru:25
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = may

Создаем файл с информацией об имени пользователя и пароле для авторизации.

# mcedit /etc/postfix/sasl_passwd
mailsrv.mymail.ru:25 [email protected]:password

Создаем db файл.

# postmap /etc/postfix/sasl_passwd

Теперь можно перезапустить postfix и проверить работу.

# systemctl restart postfix

Отправляем тестовое письмо через консоль. Проверяем почтовый лог.

# tail -n 10 /var/log/maillog

Если у вас там будет похожая ошибка:

postfix/smtp[5420]: warning: SASL authentication failure: No worthy mechs found
postfix/smtp[5420]: 24762774C6: to=<[email protected]>, relay=mailsrv.mymail.ru[10.10.30.3]:25, delay=450, delays=450/0.03/0.02/0, dsn=4.7.0, status=deferred (SASL authentication failed; cannot authenticate to server mailsrv.mymail.ru[10.10.30.3]: no mechanism available)

То необходимо установить еще несколько пакетов:

# yum install cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain

После этого перезапускайте postfix и проверяйте отправку в консоли. Если все в порядке, то к стандартному алиасу для root в /etc/aliases, добавьте внешний адрес, куда будет дублироваться почта, адресованная root. Для этого редактируем указанный файл, изменяя последнюю строку.

Было:

#root: marc

Стало

root: root,[email protected]

Обновляем базу сертификатов:

# newaliases

На этом все. Теперь все письма, адресованные локальному root, например, отчеты от cron, будут дублироваться на внешний почтовый ящик, причем с отправкой через внешний нормальный почтовый сервер. Так что письма будут нормально доставляться, не попадая в спам (хотя не обязательно, есть еще эвристические фильтры). Теперь удобно использовать локальную отправку в скриптах, не задавая дополнительные параметры. Все уже настроено, можно использовать простую локальную доставку.

Онлайн курс по Linux

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «Administrator Linux. Professional» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Что даст вам этот курс:

  • Знание архитектуры Linux.
  • Освоение современных методов и инструментов анализа и обработки данных.
  • Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
  • Владение основными рабочими инструментами системного администратора.
  • Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
  • Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.

Проверьте себя на вступительном тесте и смотрите подробнее программу по .


Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

ssmtp настройка отправки почты с Ubuntu/Debian/Linux

Устанавливаем ssmtp
Отправляем почту из консоли
Отрпавка текстового сообщения из файла message.txt
Отправим почтовое сообщение через PHP
Отправка письма при отсутвии пинга
Проблемы

Устанавливваем ssmtp

apt-get install ssmtp

Полный список параметров

man -m 5 ssmtp.conf

Делаем бекап файла конфигуации

mv /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.default

Копируем болванку файла конфигурации ssmtp.conf, столкнулся еще с тем что после последней строки
AuthPass=password, необходим перевод строки, иначе аутентификация не пройдет.

wget -P /etc/ssmtp http://itautsors.ru/ssmtp.conf

Редактируем файл конфигурации

nano /etc/ssmtp/ssmtp.conf

Содержимое файла ssmtp.conf

# cat ssmtp.conf

# /etc/ssmtp.conf — конфигурационный файл для sSMTP sendmail.

#

# Пользователь, который получает всю почту для userids < 1000

# Сделайте пустым для отключения перезаписи. Или укажите пользователя.

# А также вы можете указать нужный е-майл на который будет

# приходить почта для root.

root=postmaster

 

# Место, где идет почта. Настоящее имя машины не требуются

# MX записи. Обычно mailhosts является именем mail.domain.com

# Например если вы находитесь в domain.com ваш mailhub с таким же именем.

# Пример для SMTP портом 2525

# mailhub=mail.your.domain:2525

# Пример для SMTP портом 25 (Standard/RFC)

# mailhub=mail.your.domain

# Пример для SSL шифрованного соединения

# mailhub=mail.your.domain:465

#Адрес и порт доверенного smtp сервера, с которого будет осуществляться отправка ваших почтовых сообщений

#Для гугла

mailhub=smtp.gmail.com:587

#Для яндекса

#mailhub = smtp.yandex.ru:465

 

#От кого якобы должна приходить почта?

#если используете pdd.yandex.ru можно указать свой домен mydomain.ru

rewriteDomain=

 

# Полное имя машины

#если закомментировано, ssmtp определяет параметр самостоятельно

hostname=_HOSTNAME_

 

# Установите это чтобы никогда не переписывать «From:» (если не указано) и

# использовать этот адрес в «from line» оболочки.

#  Если YES Поле From: будет выставляться самим smtp переписывая значение вводимое скриптами

# Если NO, скрипты смогут записывать свое значение в поле From:

#Должно присутсвовать обязательно, иначе не пройдет авторизация Gmail.

#FromLineOverride=YES

 

# Использовать SSL/TLS, чтобы отправить безопасные сообщения на сервер.

#Должно присутсвовать обязательно, иначе не пройдет авторизация Gmail:

#UseSTARTTLS=YES

# Использовать SSL/TLS сертификат для аутентификации на SMTP-хосте.

#UseTLSCert=YES

 

# Используйте этот сертификат RSA.

#TLSCert=/usr/local/etc/ssmtp/ssmtp.pem

 

# Получить расширенное (* действительно * расширенную) отладочную информацию в логах

# Если вы хотите иметь отладке в конфигурационных отпарсенных файлах, переместите этот

# параметр в начало файла конфигурации и раскомментируйте

#Debug=YES

 

#Параметры существующего аккаунта почты

# Указываем имя пользователя на smtp-сервере (от какого пользователя шлем почту).

# Указываем пароль от smtp-аккаунта:

AuthPass=password

#End Of File

 

 

Далее правим файл revaliases

nano /etc/ssmtp/revaliases

Содержимое файла revaliases

 

# sSMTP aliases

#

# Format: local_account:outgoing_address:mailhub

#

# where [:port] is an optional port number that defaults to 25.

# В данном конфиге явно указывается, почта от какого пользователя и с какого ящика может уходить.

# Данная настройка позволяет защитить сервер от возможности слать через него спам с пользовательских учеток.

# для яндекса

# для гугла

 

В *NIX-мире для передачи почты первым был написан сервер sendmail. Этот сервер долгое время был стандартом де-факто. Постепенно была сформирована концепция MTA — то есть, концепция Mail Transfer Agent. MTA — это элемент системы передачи почты, который занимается только процессом передачи почтовых сообщений.

Однако исторически в системе Linux принято, что программа для передачи почтовых сообщений должна быть именно sendmail. Поэтому, когда устанавливается любая из MTA-программ, она создает файлы линков /usr/sbin/sendmail и /usr/lib/sendmail, которые указывают на нужную программу.

Посмотрим куда у нас ведет mail

whereis mail

Проверяем файл симилинк,

$ cd /usr/sbin && ls -l | grep sendmail

Должны увидеть

lrwxrwxrwx 1 root root 5 2011-04-07 03:09 sendmail -> ssmtp

Если же нет то виртуальный пакет mail-transfer-agent не ссылается на пакет ssmtp, и это необходимо исправить. Удалив пакеты на которые ссылается mail-transfer-agent, к примеру posfix. 

Примеры работы ssmtp

Конфигурация

— sendmail: как настроить sendmail на ubuntu?

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

.

16 примеров команд для отправки электронной почты из командной строки Linux

Независимо от того, являетесь ли вы разработчиком, непрерывно работающим с командной строкой Linux, или администратором сервера, которому нужны журналы или другие данные, извлеченные из администрируемых систем, и знающие, как отправлять электронную почту с помощью команды линия очень полезна.

В этом посте вы найдете примеры того, как отправлять электронную почту с терминала. Мы рассмотрим пользовательские конфигурации и коснемся того, как настроить SMTP-подключения к учетным записям электронной почты или поставщикам услуг электронной почты.Я покажу вам, как установить необходимые пакеты почтовой программы консоли, и предоставлю базовую информацию для параметров командной строки на основе руководств по пакету.

Настройка пакетов почтовой программы командной строки

Все пакеты почтовой программы в этом руководстве доступны через расширенный диспетчер пакетов Debian, поэтому шаги установки в приведенном ниже примере можно использовать для всех представленных пакетов.

Обратите внимание, что эти части программного обеспечения могут быть установлены другими менеджерами пакетов по умолчанию, такими как yum или dnf , в зависимости от вашего дистрибутива Linux.

В большинстве случаев либо sendmail , либо postfix доступны в каждом дистрибутиве Linux из коробки, или, по крайней мере, об этом говорится в аналогичных сообщениях в блогах. Либо мне не повезло, либо другие ошибались, но мне пришлось установить один вручную. Однако один из них вам определенно понадобится для доставки электронной почты.

Настройка Sendmail с пакетом SSMTP

Я продолжу с sendmail и пакета SSMTP. SSMTP содержит пакет sendmail под капотом, как вы увидите, и он облегчает настройку, что в противном случае довольно сложно для sendmail .

Шаг 1. Проверьте, установлен ли пакет почтовой программы командной строки

Введите имя пакета почтовой программы точно так же, как вы бы запустили команду, чтобы проверить, доступна ли она:

  • Если пакет установлен, команда запускается, и приглашение меняется — при попытке выполнить команду — и вы увидите мигающий курсор, за которым следует сообщение Имена получателей должны быть указаны в случае sendmail . Вывод: пакет установлен.

  • Если пакет НЕ установлен, вы получите предупреждающее сообщение и предложение, как его установить:

  $ sendmail

Программу sendmail можно найти в следующих пакетах:
 * exim4-демон-тяжелый
 * exim4-демон-свет
 * постфикс
 * цитадель-мта
 * курьер-мта
 * дма
 * esmtp-run
 * masqmail
 * мсмтп-мта
 * nullmailer
 * opensmtpd
 * qmail-run
 * sendmail-bin
 * ssmtp
Попробуйте: sudo apt install 
  

В этом примере я попробовал, работает ли команда sendmail .После добавления пакета SSMTP эта команда и команда ssmtp будут работать и изменять командную строку в терминале. Посмотрим на это!

Шаг 2. Установка пакета почтовой программы командной строки Sendmail

Как следует из вывода терминала, нам нужно запустить команду установки Advanced Package Manager — обычно с правами root — для установки необходимого пакета. Как упоминалось ранее, конфигурации для sendmail намного проще, если абстрагироваться от сложности конфигурации.Это можно сделать с помощью SSMTP:

  sudo apt установить ssmtp

  

Шаг 3. Проверьте установку

После завершения установки вы можете проверить, может ли sendmail пересылать сообщения. Введите в терминал приведенный ниже код:

  echo "Тема: привет" | sendmail [email protected]
  

Он должен отправить электронное письмо, если все работает правильно. Здесь строка «hello», , переданная по конвейеру команде sendmail , будет темой отправленного сообщения, в то время как определенный адрес электронной почты, естественно, является получателем электронной почты.

Вы запускаете команду … и, ой: sendmail: Не удается открыть mailhub: 25 . Причина в том, что мы вообще не предоставляли настройки mailhub. Для пересылки сообщений вам потребуется настроенный SMTP-сервер. Вот где SSMTP работает действительно хорошо: вам просто нужно один раз отредактировать его файл конфигурации, и все готово.

Шаг 4. Настройка SSMTP

Давайте разместим файл конфигурации по адресу /etc/ssmtp/ssmtp.conf . Здесь вы должны ввести код ниже, чтобы настроить SMTP-реле:

  UseSTARTTLS = YES
root = <ваш-адрес-электронной почты>
mailhub = smtp.gmail.com:587
AuthUser = <имя-пользователя-вашей-учетной записи>
AuthPass = <пароль вашей учетной записи>
  

Это означает, что вы настроили внешнюю службу, которая будет пересылать
ваших электронных писем. Например, когда вы вводите учетные данные для Gmail, вы увидите сообщения, отправленные с терминала, в каталоге «Отправленные» вашего почтового ящика. Конфигурации схожи и с другими сервисами.

Это была базовая конфигурация для sendmail и шаги установки для любого часто используемого пакета почтовой программы командной строки.Далее мы перейдем к установке и опробуем различные другие пакеты.

Отправка электронной почты с помощью команды SSMTP

Это симпатичный маленький инструмент, который мы только что настроили для доставки почты. Как следует из страницы man , это минималистичный эмулятор sendmail . Таким образом, SSMTP позволяет пользователям передавать электронные письма через SMTP-сервер из командной строки Linux. Он предоставляет средства для подключения к mailhub с соответствующим файлом конфигурации. Если ваш файл конфигурации был настроен правильно, все ваши заботы об отправке электронной почты из командной строки могут исчезнуть.

Базовая реализация команды SSTMP:

Если вы просто используете SSMTP, команда должна выглядеть следующим образом:

  ssmtp [email protected]  

После команды ssmtp вы должны указать адрес получателя, а затем вы можете включить файл, который будет отображаться в теле письма. Здесь вы можете определить заголовки для сообщения, перечислить других получателей и установить тип содержимого. Таким образом вы можете отправлять электронные письма в формате HTML.SSMTP интерпретирует ваше сообщение и правильно использует предоставленные значения. Вот пример HTML-кода, который вы можете отправить:

  Копия: [email protected]
Тема: Это электронное письмо в формате HTML
От: [email protected]
Content-Type: текст / html; charset = "utf8"


html>

Вы можете добавить сюда любой действующий HTML-код электронной почты.

Вы не можете предоставить дополнительные возможности SSMTP, поскольку они не соблюдаются из-за его минималистичного дизайна.

Устранение неисправностей:

В случае, если вы столкнетесь со следующей ошибкой в ​​командной строке:

  ssmtp: Ошибка авторизации (534 5.7.9
      http://support.google.com/accounts/bin/answer.py?answer=185833
      bk8sm8525341pad.28 - gsmtp)
  

, вероятно, потому что Gmail не рассматривает SSMTP как безопасное приложение. Чтобы избавиться от этой ошибки, вам необходимо изменить настройки в своей учетной записи Gmail - вы также можете найти дополнительную информацию о потенциальных рисках там.

Отправка электронной почты с помощью команды Sendmail

С некоторых пор sendmail является классическим агентом передачи почты из мира UNIX. Впервые он был представлен в 1979 году, и его легко настраиваемый характер и масштабируемость сделали его стандартным для администраторов серверов.

Мы уже видели, как отправлять базовые электронные письма с помощью команды ssmtp , поэтому давайте посмотрим на разницу, используя sendmail :

  echo "Тема: привет" | sendmail -v test @ example.com  

Я добавил аргумент -v , который сделает видимым связь между почтовым сервером и вашим агентом передачи почты.

Существует множество конфигураций, которые вы можете использовать, если вы настроите свой собственный почтовый сервер и реализуете на нем sendmail. Однако это выходит за рамки данной статьи. Мы вернемся к этой теме в одной из следующих. Будьте на связи.

Отправка электронной почты с помощью команды CURL

Этот инструмент также широко используется для передачи данных с сервера.Он поддерживает множество протоколов, таких как HTTP, FTP, POP3 или SMTP. Пакет CURL широко используется по всему миру, одна из основных причин заключается в том, что он имеет встроенную реализацию PHP, а PHP долгое время был языком сценариев на стороне сервера по умолчанию.

Установка:

Проверьте, установлен ли уже пакет. Если не запустите ниже:

  sudo apt установить curl
  

Когда вы закончите, вы можете получить доступ к шпаргалке с доступными опциями для CURL, запустив curl -h .Более подробная версия доступна либо man curl , либо curl - manual . Если вы хотите получить более глубокие знания об использовании cURL, есть эта удобная электронная книга, которая содержит все, что вы когда-либо хотели бы знать.

Базовая реализация для отправки электронной почты с CURL:

  curl --url 'smtps: //smtp.gmail.com: 465' --ssl-reqd \
  --mail-from '[email protected]' --mail-rcpt '[email protected]' \
  --upload-file mail.txt --user 'developer @ gmail.com: ваш-аккаунт-пароль '
  

Чтобы отправить электронное письмо с помощью CURL, вам необходимо настроить SMTP-соединение. Чаще всего серверы исходящей почты Google или Yahoo используются для тестирования отправки электронной почты с помощью SMTP. Обратите внимание, что вы должны включить доступ для менее безопасных приложений в настройках Gmail, и аналогичные дополнительные настройки безопасности могут применяться и для Yahoo.

В приведенном выше фрагменте команды терминала параметры --url и --user определяют параметры подключения SMTP.Раздел пароля для параметра --user - это пароль вашей учетной записи для данного адреса электронной почты. Естественно, вы также можете использовать поставщиков облачных услуг электронной почты. Я покажу это с помощью Mailgun в следующем разделе.

Расширенная реализация для отправки электронной почты с CURL:

При работе с платформами доставки электронной почты вам сначала необходимо получить ключ API. В этом руководстве я покажу пример отправки электронной почты CURL с использованием Mailgun, поэтому, если вы застряли во время процесса регистрации, следуйте этому руководству по настройке, чтобы попасть на правильный путь.

  curl -sv --user 'api: key-7e55d003b ... f79accd31a' \
    https://api.mailgun.net/v3/sandbox21a78f824...3eb160ebc79.mailgun.org/messages \
    -F from = 'Возбужденный пользователь ' \
    -F to = sandbox21a78f824 ... 3eb160ebc79.mailgun.org \
    -F [email protected] \
    -F subject = 'Привет' \
    -F text = 'Тестируем удивительность Mailgun!' \
   --form-string html = '

Блог EDMdesigner


Это руководство помогает мне понять отправку электронной почты из консоли Linux ' \ -F attachment = @ logo2yellow.jpg

Синтаксис довольно прост. Возможно, вы заметили раньше, но вам нужно заканчивать каждую строку команды \ символами. Это символ продолжения строки, команду можно запускать и без них в одной строке. Также следует помнить об опции -F . Выдержка из справочной страницы:

  -F, --form 
        (HTTP) Это позволяет curl имитировать заполненную форму
        в котором пользователь нажал кнопку отправки.Это вызывает завиток в данные POST с использованием Content-Type
        multipart / form-data согласно RFC 2388.
        Это позволяет загружать двоичные файлы и т. Д.
        Чтобы заставить часть 'содержимого' быть файлом, префикс
        имя файла со знаком @.
  

Как я рекомендовал ранее, при использовании этих команд почтовой программы командной строки рекомендуется погрузиться в руководства. Как сказано в руководстве CURL, в основном вы создаете форму для отправки. Каждая строка представляет собой запись в виде пары name = content .Когда вы прикрепляете файлы с локального компьютера, вам нужно указать @ перед именем файла.

Вот как будет выглядеть доставленное письмо:

Вы можете сделать то же самое, используя большинство других платформ доставки электронной почты, например Sendgrid.

Отправка электронной почты в формате HTML из командной строки с помощью CURL:

Вы можете применить ту же логику построения формы в текстовом файле, что позволяет легко отправлять HTML-сообщения:

  Кому: customer @ gmail.com
Тема: Это сообщение в формате HTML.
От: [email protected]
Content-Type: текст / html; charset = "utf8"



Вы можете добавить сюда любой действующий HTML-код электронной почты.

Если вы запустите простую команду из первого примера ...

  curl --url 'smtps: //smtp.gmail.com: 465' --ssl-reqd \
  --mail-from '[email protected]' --mail-rcpt '[email protected]' \
  --upload-file mail.txt --user 'developer @ gmail.com: ваш-аккаунт-пароль '
  

... и укажите параметр --upload-file в обновленный текстовый файл (в нашем случае mail.txt), полученное сообщение покажет содержимое HTML.

Устранение неисправностей:

Вам может понадобиться переключатель --insecure , который позволяет CURL выполнять «незащищенные» SSL-соединения и передачи. CURL вернет сообщение об ошибке, если удаленный сервер использует самозаверяющий сертификат или если сертификат удаленного сервера не подписан ЦС, указанным в файле сертификата ЦС.

Отправка электронной почты с помощью команды Swaks

Как указано в их документации, Swaks представляет собой гибкий инструмент тестирования SMTP с поддержкой сценариев и транзакций. Он может обрабатывать функции и расширения SMTP, такие как TLS, аутентификацию и конвейерную обработку, а также несколько версий протоколов SMTP. Он также поддерживает несколько транспортных методов, включая сокеты UNIX-домена, сокеты интернет-домена и каналы для порожденных процессов.

Установка:

  sudo apt установить swaks
  

Базовая реализация для отправки электронной почты с помощью Swaks:

Для подключения к учетной записи SMTP вам необходимо предоставить флаги сервера -s , пользователя -au , пароля -ap и адреса -t (на который вы хотите отправлять почту). .Флаг -tls также важен, если вы подключаетесь к порту 587 .

  swaks --to [email protected] -s smtp.gmail.com:587
      -tls -au  -ap 
  

Учетные данные также могут быть предоставлены через запросы командной строки, если вы укажете только для аутентификации -a , а не вводя пользователя и пароль с помощью параметров командной строки.

Расширенная реализация отправки электронной почты с помощью Swaks:

  swaks - в почтовый ящик @ пример.com -s smtp.gmail.com:587 -tls -au  -ap  --attach -d ./mail.txt
  

Есть и другие варианты, которые мы сейчас не касаемся. Перейдем к следующему пакету почтовой программы!

Отправка электронной почты с помощью команды Mutt

Mutt отличается от предыдущих почтовых клиентов, поскольку это многофункциональный почтовый клиент с командной строкой. Вы можете использовать его для чтения электронных писем с терминала Linux, подключения к локальным почтовым ящикам пользователей или к серверам POP / IMAP.Mutt поддерживает несколько форматов почтовых ящиков, таких как mbox, MH, maildir, MMDF, полный контроль над заголовками сообщений во время составления электронной почты, а также множественные теги и цвета сообщений для обработки сообщений.

Установка:

  sudo apt install mutt
  

Базовая реализация для отправки электронной почты с помощью mutt:

К этому моменту структура команды вас уже не удивит. Вы можете предоставить пустое тело сообщения с :

  # mutt -s "Test Email" user @ example.com  

Расширенная реализация для отправки электронной почты с помощью mutt:

Для отправки электронной почты, включая вложения, вам необходим флаг -a . Таким образом вы можете отправлять полезные файлы, такие как системные журналы, по указанному адресу.

  # mutt -s "Системные журналы" -a /opt/backup.sql [email protected]  

Вы также можете отправить электронное письмо в формате HTML, если расширение файла, которое вы добавляете в тело сообщения, имеет формат HTML. Mutt распознает тип файла и разрешит его, поэтому он не будет отправлять ваш HTML в виде обычного текста:

  mutt -s "Тема письма" @ пример.com  

Это для отправки электронной почты с помощью mutt. Если он у вас есть на вашем компьютере, я бы посоветовал попробовать, как вы можете работать с входящими сообщениями, настраивая свой почтовый ящик и обрабатывая входящие сообщения. Если вы это сделаете, поделитесь своими мыслями в разделе комментариев ниже. Я приветствую любое мнение о пакетах, показанных в руководстве.

Отправка электронной почты с помощью команды Mailx

Mailutils - это составной пакет для нескольких вариантов использования. Он предназначен для обслуживания обычных пользователей, системных администраторов и разработчиков.Мы коснемся только его основных функций, касающихся пересылки электронной почты. Если вас интересуют дополнительные возможности, ознакомьтесь с его страницей man .

Установка:

  sudo apt установить mailutils
  

Базовая реализация для отправки электронной почты с mailx:

Пакет mailx имеет 2 одинаковых синтаксиса команд ( mail и mailx работают одинаково). Самая упрощенная команда состоит из команды mail / mailx и адреса для отправки почты, но вы, вероятно, включите тему и хотя бы какое-то текстовое тело сообщения.Такая команда должна выглядеть так:

  echo "тело сообщения" | mail -s "тема" [email protected]
  

Используя команду echo и передавая вывод в команду mail , вы можете избежать дополнительных запросов mailx для адресов Cc и тела сообщения.

Расширенная реализация для отправки электронной почты с mailx:

Для расширенного примера мы снова отправим полноценное электронное письмо в формате HTML. Нам нужно предоставить выбранный нами HTML-файл электронной почты с символом < и добавить «флаг добавления» к типу содержимого.Полный код выглядит следующим образом:

  mailx -a 'Content-Type: text / html'
      -s "Это действительно продвинутый mailx!"  

Вы также можете установить адрес возврата с помощью --return-address = , что может быть полезно. Другой полезный вариант, который я не мог решить для параллельной работы с электронной почтой HTML, - это прикрепление вложений в одно сообщение: -A "mail.txt" . Хотя вы можете указать нескольких получателей, можно прикрепить только одно вложение.Вы можете настроить внешний SMTP-сервер, если вам это нравится.

Использование альтернативной команды Openssl Telnet

Telnet - это интерактивный протокол связи для связи с другим хостом. Его можно использовать для открытия SMTP-соединения с другим сервером и передачи сообщений электронной почты. Однако, поскольку протокол не защищен, большинство серверов отклонят этот тип связи. Именно здесь на сцену выходит Openssl, поскольку он построен с включенной безопасностью SSL / TLS. Он вызывается аналогично telnet с аргументом хоста и неявно выполняет команду открытия:

  smiska➜ Рабочий стол / электронная почта »openssl s_client -connect smtp.gmail.com:465
                               -crlf -ign_eof
        ---
               вывод согласования сертификата из openssl
        ---

        220 smtp.gmail.com ESMTP j92sm925556edd.81 - gsmtp
            EHLO localhost
        250-smtp.gmail.com к вашим услугам, [78.139.22.28]
        250-РАЗМЕР 35882577
        250-8BITMIME
        250-АУТ. ЛОГИН ОБЫЧНЫЙ XOAUTh3 ОБЫЧНЫЙ-КЛИЕНТТОКЕН OAUTHBEARER XOAUTH
        250-РАСШИРЕННЫЕ СТАТУСКОДЫ
        250-ТРУБОПРОВОД
        250 РАЗЪЕМОВ
        250 SMTPUTF8
            AUTH PLAIN * пароль хеш *
        235 2.7.0 Принято
            ПОЧТА ОТ: 
        250 2.1.0 ОК j92sm925556edd.81 - gsmtp
            rcpt на: 
        250 2.1.5 ОК j92sm925556edd.81 - gsmtp
            ДАННЫЕ
        354 Вперед j92sm925556edd.81 - gsmtp
            Тема: Это рассылка openssl

            Привет хороший пользователь
            .
        250 2.0.0 ОК 1339757532 m46sm11546481eeh.9
            уволиться
        221 2.0.0 замыкающее соединение m46sm11546481eeh.9
        читать: errno = 0
  

Я выделил вводы, которые необходимо предоставить, пока канал связи открыт.Эти входные данные говорят сами за себя, но одна вещь, которую мне нужно уточнить, - это хэш пароля. Это может быть хэш в кодировке base64, который можно получить с помощью следующей команды: echo -en '\ [email protected] \ 000gmailpassword' | base64 . Управляющие символы из строки не могут быть пропущены. Если у вас не установлен пакет base64, он доступен через менеджеры пакетов.

Как вы можете видеть выше, этот способ отправки электронной почты предоставляет интерфейс только для текстовых сообщений, поэтому имеет свои ограничения в случаях использования.С другой стороны, он показывает всю информацию, которой обменивается почтовый сервер, что значительно упрощает отладку.

Устранение неполадок с почтой

Проверить журналы почты

Вам необходимо найти файл журнала, перейдя в соответствующую папку. Я предпочитаю использовать для этого свой редактор кода (например, Sublime Text), чтобы иметь журналы с подсветкой синтаксиса:

  $ sudo subl / var / журнал
  

В зависимости от вашего текущего дистрибутива Linux вам может потребоваться другой источник.
Журнал может содержать полезную информацию о проблемах с доставкой. На этом этапе, когда вы прокрутите вниз до конца:

, вы можете проверить успешность доставки или понять, почему процесс не удался.
Может случиться так, что ваша консоль не показывает ошибок, но в почтовом журнале вы можете увидеть, что сообщение было поставлено в очередь для доставки, поэтому процесс не остановился на вашем компьютере, но, вероятно, был отклонен почтовым сервером, с которым вы пытались связаться .

Выполнение всех команд в последовательности

Итак, все готово к финальному тесту.Все команды почтового терминала собраны здесь в файле сценария. После того, как вы загрузили рабочую папку с файлом сценария в ней, перейдите в содержащую папку и сделайте сценарий исполняемым: chmod u + x mail.sh . Если у вас есть все файлы, которые я предоставил, вы можете начать тестирование команд почтовой программы, показанных в руководстве. Вам просто нужно заменить «<АДРЕС ПОЛУЧАТЕЛЯ>» на свой тестовый адрес электронной почты в коде и запустить ./mail.sh в командной строке.

После завершения работы скрипта ваш почтовый ящик будет заполнен тестовыми сообщениями электронной почты.

Молодец!

Сводка

В этой статье я показал вам множество способов отправки электронной почты из командной строки Linux. Надеюсь, что, основываясь на том, что вы видели, вы также сможете самостоятельно установить и настроить эти службы на своем компьютере.

В сообщении были показаны наиболее часто используемые почтовые пакеты командной строки и способы отправки с ними электронных писем, и в конце я создал сценарий оболочки, который собирает все команды, используемые в статье.Вы можете загрузить рабочие файлы проектов здесь, и если вы установите пакеты, представленные в руководстве, а также заполните свои учетные данные и данные получателя, вы можете запустить сценарий на досуге.

Не могли бы вы следить за каждым шагом учебника? Что ж, я рад. Если у вас есть вопросы или вы видите возможность улучшить контент своими идеями, перейдите в раздел комментариев ниже.

Спасибо за внимание. Удачной отправки!

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *