Ранее уже многократно пытался настроить sendmail на локалке (не путать с сервером, домен localhost) и на новой системе вновь решил это сделать и ничего не вышло. Сначала он у меня зависал надолго, но на этот раз удалось сделать, чтобы отрабатывал быстро, но отправлять он в итоге письма так и не стал, хотя статус вызова mail был true.
Конспектирую, так как описанные настройки postfix пришлось совмещать и все наконец-то заработало!
Вот код php скрипта:
<?php
try {
echo ( int ) mail( 'mymail@yandex.ru', 'hello', 'message' );
} catch ( RuntimeException $e ) {
print_r( $e );
}
?>
А вот результат (заголовки письма на почте):
Return-Path: <mailfrom@gmail.com>
Received: from yasamposebe.localdomain (ppp85-141-143-38.pppoe.mtu-net.ru. [85.141.143.38])
by mx.google.com with ESMTPSA id f9sm13453063lbd.46.2014.08.10.05.29.58
for <mailto@gmail.com>
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Sun, 10 Aug 2014 05:29:58 -0700 (PDT)
Received: by yasamposebe.localdomain (Postfix, from userid 33)
id 3F7022A41F4; Sun, 10 Aug 2014 16:29:58 +0400 (MSK)
To: mailto@gmail.com
Subject: hello
X-PHP-Originating-Script: 1000:index.php
Message-Id: <20140810122958.3F7022A41F4@yasamposebe.localdomain>
Date: Sun, 10 Aug 2014 16:29:58 +0400 (MSK)
From: mailfrom@gmail.com (www-data)
message
Воспользовался в сумме двумя инструкциями:
- http://onedev.net/post/277
- https://rtcamp.com/tutorials/linux/ubuntu-postfix-gmail-smtp/
Во 2-й не было того, что должно быть в 1-й и это очень важно. Если возникнет проблема и у меня о ней ни слова, открываем 2-ю ссылку, там нереальное количество комментариев.
Основной прикол в том, что как только сделал все по 1-й инструкции у меня отправка работать не стала.
Приступим.
Шаг 1
Выполняем в терминале:
sudo apt-get install postfix ca-certificates
Шаг 2
Правим или создаем следующий файл: /etc/postfix/mail.cf
Содержимое заменяем на:
relayhost = [smtp.gmail.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_use_tls = yes
Шаг 3
Создавать файлы transport и generic и генерить по ним db не нужно.
Шаг 4
Создаем файл: /etc/postfix/sasl_passwd
Вставляем в него:
[smtp.gmail.com]:587 USERNAME@gmail.com:PASSWORD
Шаг 5
Выставляем верные права:
sudo chmod 400 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
Шаг 6 (микс)
Этот шаг по-моему ни на что не влияет и состоит из комбинаций к обоих ресурсов.
1) Выполняем:
ln -s /etc/ssl/certs/Equifax_Secure_CA.pem /etc/postfix/cacert.pem
2) Выполняем:
cat /etc/ssl/certs/Thawte_Premium_Server_CA.pem | sudo tee -a /etc/postfix/cacert.pem
Кажется, что это должно защищать вашу почту от взломщиков, но не уверен и очень сильно.
Шаг 7
Все, перегружаем postfix:
sudo /etc/init.d/postfix reload
Шаг 8
Для настройки PHP открываем /etc/php5/apache2/php.ini и добавляем строчку (или редактируем):
sendmail_path = /usr/sbin/sendmail -t -i -f mailfrom@gmail.com
Итог
Выполняем мой скрипт и ничего не доходит. Смотрим логи:
tail /var/log/mail.log
и видим:
Aug 10 17:06:26 localhost postfix/qmgr[10887]: 1E8EE2A60F0: from=<mailfrom@gmail.com>, size=363, nrcpt=1 (queue active)
Aug 10 17:06:27 localhost postfix/smtp[10893]: 1E8EE2A60F0: to=<mailto@gmail.com>, relay=smtp.gmail.com[74.125.143.109]:587, delay=1.8, delays=0.08/0.01/0.79/0.94, dsn=2.0.0, status=sent (250 2.0.0 OK 1407675987 ok1sm13606396lbc.18 - gsmtp)
Aug 10 17:06:27 localhost postfix/qmgr[10887]: 1E8EE2A60F0: removed
Aug 10 17:08:33 localhost postfix/pickup[10886]: EA5C02A60F0: uid=33 from=<mailfrom@gmail.com>
Aug 10 17:08:33 localhost postfix/cleanup[10909]: EA5C02A60F0: message-id=<20140810130833.EA5C02A60F0@yasamposebe.localdomain>
Aug 10 17:08:34 localhost postfix/qmgr[10887]: EA5C02A60F0: from=<mailfrom@gmail.com>, size=363, nrcpt=1 (queue active)
Aug 10 17:08:34 localhost postfix/smtp[10911]: EA5C02A60F0: SASL authentication failed; server smtp.gmail.com[74.125.143.109] said: 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbsqB?534-5.7.14 KhsSR6I87oK_C4TxS1NdQVQS0PzikND9qj70eQUKk8MeycvYLSVk3BUS0n1iw4_mpyZqQ4?534-5.7.14 3yMySUSy7AyIQTC_-H5OFkRu4_h9s-S-8lQfWUpmmMPQC5auCDcLZJoiShf7RbwUYPA3WN?534-5.7.14 kY8Q2WVTwMAFBLLK3I1w0DJYeWKL1NLJunjI0_j7fgGhZY1R37qD6c-kHtKUiv8WSWS0rB?534-5.7.14 s2GcHKw> Please log in via your web browser and then try again.?534-5.7.14 Learn more at?534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 xu8sm4583002lab.41 - gsmtp
Aug 10 17:08:35 localhost postfix/smtp[10911]: EA5C02A60F0: SASL authentication failed; server smtp.gmail.com[74.125.143.108] said: 534-5.7.14 <https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbtLc?534-5.7.14 31FFOiu5FqZ0Bfjx2r1ySB4Sk0YcmdfsVWH5-Gh9JYixVrhSegWVvaLeiv70vybEEbXYTa?534-5.7.14 LN9iG7Zj6lLE0CQyfj5ahIn_aBsjT--qNNkzx9XoJQwVNGkfL59w880vDElZemD3oxSaja?534-5.7.14 LqO_5fggvWCw2ol4D9_yOzlq1vtp69C5pD2n8tWOPkexG3hWHZMDaVVF8jn-loCGR1EbzY?534-5.7.14 v5j77eg> Please log in via your web browser and then try again.?534-5.7.14 Learn more at?534 5.7.14 https://support.google.com/mail/bin/answer.py?answer=78754 kz1sm4588917lab.11 - gsmtp
Aug 10 17:08:35 localhost postfix/smtp[10911]: connect to smtp.gmail.com[2a00:1450:4010:c04::6d]:587: Network is unreachable
Aug 10 17:08:35 localhost postfix/smtp[10911]: EA5C02A60F0: to=<mailto@gmail.com>, relay=none, delay=1.3, delays=0.11/0.01/1.2/0, dsn=4.4.1, status=deferred (connect to smtp.gmail.com[2a00:1450:4010:c04::6d]:587: Network is unreachable)
Вот мы и подошли к главному. Несмотря на все, пройти аутентификацию не получается. В добавок мы получаем на почту письмо от Google с темой "Ненадежным приложениям разрешен доступ к аккаунту Google". Переходим по ссылке и возможно подтверждаем наши действия, но это не помогает.
Решение - необходимо выполнить все шаги:
- переходим по ссылке и жмем "Продолжить": https://accounts.google.com/DisplayUnlockCaptcha
- переходим по ссылке и подтверждаем действия при необходимости: https://security.google.com/settings/security/activity
- главное, открываем вкладку "Безопасность" в профиле Google: https://www.google.com/settings/security - на панели "Доступ к аккаунту" жмем "Настройки" и выбираем "Включить".
После 3-го пункта повторяем отправку и все работает. Не уверен, что п. 3 безопасен, поэтому лучше его выключать в периоды, когда разработка не ведется и проверять отправку писем на localhost не требуется.
В завершение
Спасибо обоим авторам. Время идет и что-то может меняться. Уверен, что кому-то пригодится моя инструкция. В особенности мне самому, когда настанет время все переустанавливать.