Рассматриваемая ОС Ubuntu 11.04. Но и в любой другой ОС настройка будет скорее всего примерно такой.
Итак, устанавливаем сендмейл и дополнительные утилиты:
$ sudo apt-get install sendmail sasl2-bin
Обратите внимание, что в Ubuntu сендмейл уже поставляются с фейковыми сертификатами для соединений TLS, поэтому мы их генерировать не будем, а воспользуемся существующими, в других дистрибутивах сертификаты возможно вам придется генерировать вручную.
Проверим, что у нас получилось:
$ sudo /usr/sbin/sendmail -d0.1 -bv root
Version 8.14.4
Compiled with: DNSMAP LDAPMAP LDAP_REFERRALS LOG MAP_REGEX MATCHGECOS
MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6 NETUNIX
NEWDB NIS NISPLUS PIPELINING SASLv2 SCANF SOCKETMAP STARTTLS
TCPWRAPPERS USERDB USE_LDAP_INIT XDEBUG
============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = chelny
(canonical domain name) $j = chelny.buteo.ru
(subdomain name) $m = buteo.ru
(node name) $k = chelny
========================================================
root... deliverable: mailer local, user root
Version 8.14.4
Compiled with: DNSMAP LDAPMAP LDAP_REFERRALS LOG MAP_REGEX MATCHGECOS
MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6 NETUNIX
NEWDB NIS NISPLUS PIPELINING SASLv2 SCANF SOCKETMAP STARTTLS
TCPWRAPPERS USERDB USE_LDAP_INIT XDEBUG
============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = chelny
(canonical domain name) $j = chelny.buteo.ru
(subdomain name) $m = buteo.ru
(node name) $k = chelny
========================================================
root... deliverable: mailer local, user root
Обратите внимание, на наличие опций SASLv2 и STARTTLS.
Переместитесь в каталог /etc/mail
Создайте файл authinfo со следующим содержимым:
AuthInfo:smtp.gmail.com "U:username" "I:username@gmail.com" "P:password" "M:PLAIN"
AuthInfo:smtp.gmail.com:587 "U:username" "I:username@gmail.com" "P:password" "M:PLAIN"
Выполните команду:
# makemap -r hash authinfo.db < authinfo
Для создания файла /etc/mail/sasl/sasl.m4 выполните:
# make
Отредактируйте 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/authinfo.db')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
И еще раз:
# make && /etc/init.d/sendmail reload
Если все получилось без ошибок, то релей через gmail настроен. Проверяем!
Отправляем сообщение с локального хоста на mail.ru:
$ mail -v asa***@mail.ru
Subject: Тестовое сообщение
Это тестовое сообщение
.
Cc:
Subject: Тестовое сообщение
Это тестовое сообщение
.
Cc:
...
050 235 2.7.0 Accepted
...
250 2.0.0 pBDA7MDj024641 Message accepted for deliveryasa***@mail.ru... Sent (pBDA7MDj024641 Message accepted for delivery)
Closing connection to [127.0.0.1]
>>> QUIT
Вуаля! Наше письмо было успешно доставлено!
Спасибо добрый человек =) Возможно стоит добавить, что есть такой баг, что php.mail() выполняется слишком долго, подвисая на минуту где-то. Решается добавлением в /etc/hosts строчки:
ОтветитьУдалить127.0.0.1 localhost localhost.localdomain YourServer
Вообще заметка не совсем про php ) но в любом случае рад, что заметка принесла пользу )
УдалитьА для других серверов, не gmail.com это подходит? Я пытаюсь сделать так как написано, но мне все равно удаленный сервер пишет "User unknown". Посоветуйте что-нибудь, пожалуйста.
ОтветитьУдалитьЕсли сервер, который вы хотите использовать в качестве смартхоста использует smtp, то вероятно нет никаких причин не настроить его таковым.
УдалитьДля себя ответьте на вопросы: нужна ли авторизация для отправки сообщения? нужен ли tls? разрешен ли relay для вас этим сервером?
Когда узнаете ответы на эти вопросы, то сможете настроить релеем тот хост, который захотите.
нужна ли авторизация для отправки сообщения? - да
Удалитьнужен ли tls? - да
разрешен ли relay для вас этим сервером? - без авторизации нет.
То есть единственный способ отправить письмо - притвориться, что мы клиент, у которого на этом хосте есть почтовый ящик. Но не получается. Вот логи:
Jul 11 00:32:02 main sendmail[12059]: q6AKW2n1012059: from=root, size=59, class=0, nrcpts=1, msgid=<201207102032.q6AKW2n1012059@xxx.xxx.ru>, relay=root@localhost
Jul 11 00:32:02 main sm-mta[12060]: STARTTLS=server, relay=localhost [127.0.0.1], version=TLSv1/SSLv3, verify=NOT, cipher=DHE-RSA-AES256-SHA, bits=256/256
Jul 11 00:32:02 main sendmail[12059]: STARTTLS=client, relay=[127.0.0.1], version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-SHA, bits=256/256
Jul 11 00:32:03 main sm-mta[12060]: q6AKW2V2012060: from=, size=316, class=0, nrcpts=1, msgid=<201207102032.q6AKW2n1012059@xxx.xxx.ru>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Jul 11 00:32:03 main sendmail[12059]: q6AKW2n1012059: to=, ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30059, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (q6AKW2V2012060 Message accepted for delivery)
Jul 11 00:32:03 main sm-mta[12062]: STARTTLS=client, relay=mx.cm.hc.ru., version=TLSv1/SSLv3, verify=OK, cipher=AES256-SHA, bits=256/256
Jul 11 00:32:03 main sm-mta[12062]: q6AKW2V2012060: to=, ctladdr= (0/0), delay=00:00:01, xdelay=00:00:00, mailer=relay, pri=120316, relay=mx.cm.hc.ru. [89.111.177.200], dsn=5.1.1, stat=User unknown
Jul 11 00:32:03 main sm-mta[12062]: q6AKW2V2012060: q6AKW3V1012062: DSN: User unknown
Jul 11 00:32:03 main sm-mta[12062]: q6AKW3V1012062: to=, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30000, dsn=2.0.0, stat=Sent
Спасибо за ответ!
Что значит "притвориться"?... Если пользователя нет и вводятся левые учетные данные, то сервер и дает отлуп в виде "User unknown".
УдалитьА чего здесь можно ожидать еще? Получайте корректные учетные данные и настраивайте authinfo в соответствии с ними.
Супер! Огромное спасиба за статью!
ОтветитьУдалитьОчень помогла статья! Спасибо! Три дня мучался, чтобы настроить отправку почты. И как говорит petanqistics в первом сообщении, прописать свой домен в hosts нужно. Иначе минута ожидания php.mail гарантирована.
ОтветитьУдалитьспасибо! работает с http://www.mxgate.ru/!!!
ОтветитьУдалитьПрошу прощения, но я не понял кого(что) вводить в "U:username". I:username@gmail.com - тут аккаунт gmail.com. тут "P:password" пасворд от мыла. а вот "U:username" - я хз. пишет User unknown.
ОтветитьУдалитьПопробуйте ввести имя пользователя без домена "@gmail.com"
Удалить