Решение php-проблемы 550 Message was not accepted

Функция mail в PHP

Мои поползновения в сторону смены хостера, привели меня к пока замечательному Mojordomo, который в кратчайшие сроки поднял для меня VPS-сервер на FreeBSD и теперь я могу упражняться в его настройке. После первого запуска этого сервера уже прошел месяц и я стал наголову умнее в настройке операционной системы FreeBSD для нужд размещения сайтов.

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


В PHP есть специальная функция – mail();, которая отправляет электронное письмо. Ее работа более подробнее описана в статье – Отправка email посредством PHP.

В моем случае, отправляя электронные письма через встроенную в PHP функцию mail(), на указанные почтовые ящики шли письма с ошибкой. Текст ошибки примерно такой:

This message was created automatically by mail delivery software.
A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:
  name@inbox.ru
   SMTP error from remote mail server after end of data:
   host mxs.mail.ru [94.100.176.20]: 550 Message was not accepted — it contains invalid headers. More specially, „From:“ header must match user you are sending mail from. See https://help.mail.ru/mail-help/mailer/popsmtp for details.

Эта ошибка была получена при отправке письма на почтовый сервер inbox.ru, но поговаривают, что это происходит только на mail-овсих серверах. Это своеобразная защита от спама, которая применяется только у них.

Для того, чтобы решить эту проблему нам необходимо отредактировать главный конфигурационный файл httpd.conf. Если у Вас операционная система такая же как и у меня – FreeBSD, то он лежить тут: /usr/local/etc/apache22/httpd.conf, а если Linux, то находится он здесь: /etc/apache/httpd.conf.

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

<VirtualHost 78.111.11.111:80>
 ServerName name_site.ru
 DocumentRoot /home/adminway/data/name_site
 AssignUserID adminway adminway 
 CustomLog /home/httpd-logs/name_site.ru.access.log combined
 ErrorLog /home/httpd-logs/name_site.ru.error.log
 ServerAlias www.name_site.ru
 ServerAdmin admin@name_site.ru
 php_admin_value open_basedir "/home/adminway/data:."
 php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f neotve4at@name_site.ru"
 php_admin_value upload_tmp_dir "/home/adminway/data/mod-tmp"
 php_admin_value session.save_path "/home/adminway/data/mod-tmp"
 AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
 AddType application/x-httpd-php-source .phps
</VirtualHost>

Здесь всего-лишь 2 строчки, в которых указаны mail-адреса:
ServerAdmin admin@name_site.ru
php_admin_value sendmail_path «/usr/sbin/sendmail -t -i -f neotve4at@name_site.ru»

В первой строчке ServerAdmin admin@name_site.ru указывается электронный адрес, на который будут пересылаться всевозможные ошибки. В отправке писем с вашего сервера, посредство команды mail(), этот электронный адрес не играет никакой роли.

Вторая строка php_admin_value sendmail_path «/usr/sbin/sendmail -t -i -f neotve4at@name_site.ru» как раз таки показывает какой e-mail будет указан в поле отправителя. Посему-то ISPManager самостоятельно не изменила его и пришлось редактировать его вручную. Это e-mail должен совпадать с полем в заголовке From: отправляемого письма.

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

После всех изменений не забываем перезагрузить Apache командой:

sudo /etc/init.d/apache2 restart

Теги:

Комментарии

Граватар пользователя «Suntura»
Suntura, 23 мая 2012 г. 19:48 #

klass
spasibo

Граватар пользователя «Кадир»
Кадир, 13 декабря 2012 г. 22:59 #

Очень полезная статья, спасибо автору

Граватар пользователя «Сайтер»
Сайтер, 10 мая 2013 г. 15:10 #

Мне помогло исправить проблему с Майл.ру, указание в ISP панели – E-Mail администратора – адреса с доменом сайта (если сайт – site.com, то и мыло админа домена указываем с @site.com), в настройках WWW домена. И в конфиги лезть не пришлось.

Граватар пользователя «Soliter»
Soliter, 14 ноября 2013 г. 13:50 #

Спасибо, помогло, про ISP панель.
Логично, в майле.ру фильтр ставят на перенаправление с другого сервера.

Граватар пользователя «MIKL»
MIKL, 27 февраля 2014 г. 14:12 #

Чел. добавь в конце статьи, что ещё нужно apache перезапустить. Я не сразу вспомнил. Спасибо за решение)

Граватар пользователя «Зюзгин Иван»
Зюзгин Иван, 28 февраля 2014 г. 21:10 #

ОК, добавил

Граватар пользователя «Дмитрий»
Дмитрий, 13 мая 2014 г. 19:02 #

Очень полезная статья , пол дня потратил решая проблему отправки на сервера mail.ru, а тут такое решение! Спасибо автору!

Граватар пользователя «Макс»
Макс, 3 ноября 2015 г. 01:57 #

Спасибо, просто спас!

Граватар пользователя «Arsmen»
Arsmen, 7 декабря 2016 г. 07:11 #

Темя все еще актуальна?

Граватар пользователя «Николай»
Николай, 9 июня 2018 г. 11:09 #

Спасибо за статью!




В качестве аватарки используется сервис - gravatar.com



IT-событие
Всемирный день без Wi-Fi
Всемирный день без Wi-Fi
Оглавление
  1. Комментарии