Решение php-проблемы 550 Message was not accepted
Мои поползновения в сторону смены хостера, привели меня к пока замечательному 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
Теги: Apache2
klass
spasibo
Очень полезная статья, спасибо автору
Мне помогло исправить проблему с Майл.ру, указание в ISP панели – E-Mail администратора – адреса с доменом сайта (если сайт – site.com, то и мыло админа домена указываем с @site.com), в настройках WWW домена. И в конфиги лезть не пришлось.
Спасибо, помогло, про ISP панель.
Логично, в майле.ру фильтр ставят на перенаправление с другого сервера.
Чел. добавь в конце статьи, что ещё нужно apache перезапустить. Я не сразу вспомнил. Спасибо за решение)
ОК, добавил
Очень полезная статья , пол дня потратил решая проблему отправки на сервера mail.ru, а тут такое решение! Спасибо автору!
Спасибо, просто спас!
Темя все еще актуальна?
Спасибо за статью!