Simple Mail

Настройка Sendmail для отправки почты без попадания в Спам

Столкнулся с проблемой: на правильно настроенном сервере Apache с установленными модулями и настроенными доменными записями у провайдера — письма отправленные через функцию mail из скриптов php попадали в спам или не доставлялись вовсе.

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

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

Система: Ubuntu 20.06
Почтовый сервис: Яндекс

1. Установка Sendmail

Если по какой-то причине не был установлен. Произведите базовую установку и настройку

sudo apt-get install php-mail sudo apt-get install sendmail sudo sendmailconfig 

Вместо noreply@site.ru пишем почту на которую будут приходить отчеты (заголовок Return-Path:).

sendmail_path = "/usr/sbin/sendmail -t -f noreply@site.ru -i" 

Заголовок «Return-Path:» является важным заголовком в глазах почтовых сервисов.
Если его не установить, заголовок будет равен примерно такому значению «Return-Path: ».

Очень желательно чтобы значение заголовка всегда совпадало с именем домена с которого отправляется письмо, независимо от значения заголовка «From:», иначе оно может быть отправлено в «Спам» или же отклонено вовсе.

2. Настройка DNS записей

Нам необходимо настроить SPF, DMARC, DKIM записи.

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

На что следует обратить внимание — чтобы в SPF был прописан IP-адрес сервера.

v=spf1 ip4:ip_server include:_spf.yandex.net ~all

Затем следует запросить у провайдера DNS-хостинга обратную запись rDNS (PTR-запись).
Привязать свой домен к ip-адресу сервера.

Как правило провайдер самостоятельно ее устанавливает по запросу.

Установить hostname равный названию нашего домена:

sudo hostnamectl set-hostname site.ru

5. Редактировать файл sendmail.mc

Переходим к файлу /etc/mail/sendmail.mc

Нам необходимо настроить заголовки «Received: from» и «Received: by». Они являются важными при определении уровня доверия к серверу отправляющему электронную почту.

Добавляем следующие строки в конце файла перед MAILER_DEFINITIONS

FEATURE(allmasquerade) FEATURE(masquerade_envelope) FEATURE(local_no_masquerade) MASQUERADE_AS(`site.ru') 
define(`MAIL_HUB', `site.ru.')dnl define(`LOCAL_RELAY', `site.ru.')dnl 

6. Проверяем настройки apache и файервола

sudo ufw allow 25 sudo nano /etc/apache2/envvars 

Ищем строчки и заменяем www-data на текущего пользователя под которым запущен apache

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

7. Обновляем конфигурацию и перезагружаем sendmail

sudo sendmailconfig sudo service sendmail restart sudo systemctl restart apache2 

Источник

PHP mail под Windows

PHP mail картинка с конвертом

В этой статье я хочу рассказать об отправке почты из php скриптов под Windows.

Америку я, конечно, не открою, но надеюсь, что кому-то эта статья будет полезна или просто сэкономит время.

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

Обычно эти ошибки имеют примерно такое описание:
Warning: mail() [function.mail]: Failed to connect to mailserver at «localhost» port 25, verify your «SMTP» and «smtp_port» setting in php.ini or use ini_set() in E:\www\simplemail\mailer.php on line .

Дело в том, что функция mail сама по себе почту не отправляет, она просто вызывает программу sendmail, которая в дистрибутив web сервера и php интерпретатора не входит (и не должна).

Sendmail, в свою очередь, для отправки почты использует SMTP сервер.

Таким образом, чтобы php скрипт мог отправлять почту нужно установить и настроить sendmail и SMTP сервер.

Версию sendmail для Windows можно скачать здесь.

Установка и настройка выполняется в три этапа.

1) Распаковываем архив на тот же диск, где установлен php. Например, я создал папку C:\wamp\sendmail.

2) Вносим изменения в файл php.ini:

[mail function]
SMTP =
sendmail_from =
sendmail_path = «C:\wamp\sendmail\sendmail.exe -t»

Как видите, нужно только указать путь к sendmail чтобы php мог ее найти.

3) Настраиваем sendmail. Все настройки находятся в файле sendmail.ini (расположен в папке с sendmail).

Но перед тем как приступать к настройке пару слов об SMTP сервере. Вам совсем не обязательно устанавливать сервер на вашем компьютере. Многие почтовые сервисы предоставляют бесплатный доступ к своим серверам.

Ниже я покажу пример настройки sendmail для работы с SMTP сервером mail.ru, но, естественно, вы выбрать любой другой.

Итак, открываем sendmail.ini и устанавливаем следующие параметры:

smtp_server=smtp.mail.ru ; адрес SMTP сервера
smtp_port=25 ; порт SMTP сервера

default_domain=mail.ru ; домен по-умолчанию

error_logfile=error.log ; файл в который будет записываться лог ошибок

debug_logfile=debug.log ; очень полезная на этапе отладки опция. Протоколируются все операции, которые выполняет sendmail

auth_username=account_name@mail.ru ; имя вашего аккаунта
auth_password=account_password ; ваш пароль

; следующие три опции используются если перед авторизацией на SMTP сервере требуется авторизация на POP3 сервере
pop3_server=pop.mail.ru
pop3_username=account_name@mail.ru
pop3_password=account_password

; параметр для команды MAIL FROM
force_sender=account_name@mail.ru

Теперь не забудьте перезапустить web сервер, чтобы изменения вступили в силу.

Чтобы протестировать работу почты напишем простенький скрипт:

01 02 03 04  05 06 07 Сообщение отправлено"; 15 > 16 else < 17 echo "

При отправке сообщения возникла ошибка

"; 18 > 19 > 20 ?> 21
22

23 24 25

26

27 28 29

30

31 32 33

34

35 36

37
38 39

Он создает форму с тремя полями для ввода адреса, темы и содержания письма. Нажатие на кнопку «Отправить» отправит запрос этому же скрипту (строка 21).

Если данные введены, то будет вызвана функция mail (строка 13), которая и отправит письмо. В случае успешной отправки функция возвращает true, в противном случае — false.

Как видите, ничего сложного в настойке почты нет.

Источник

Читайте также:  Современный визуальный html редактор
Оцените статью