Решение 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 http://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

P.S. Скоро лето и, наверное, все планируют свой отдых. За жизненной суетой и катастрофической нехваткой времени мы все больше и больше уделяем внимание каким-то онлайн сервисам, которые позволяют планировать, не отрываясь от производства, туристические поездки, заказывать билеты на чартерные рейсы на Кипр и вообще делать много других полезных вещей, которые позволяет существенно экономить время.

Комментарии:

  1. Suntura опубликовал комментарий 23 Май 2012, 19:48 #

    klass
    spasibo

    | Ответить
  2. Кадир опубликовал комментарий 13 Декабрь 2012, 22:59 #

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

    | Ответить
  3. Сайтер опубликовал комментарий 10 Май 2013, 15:10 #

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

    | Ответить
    • Soliter опубликовал комментарий 14 Ноябрь 2013, 13:50 #

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

      | Ответить
  4. MIKL опубликовал комментарий 27 Февраль 2014, 14:12 #

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

    | Ответить
    • itshaman опубликовал комментарий 28 Февраль 2014, 21:10 #

      ОК, добавил

      | Ответить
  5. Дмитрий опубликовал комментарий 13 Май 2014, 19:02 #

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

    | Ответить
  6. Макс опубликовал комментарий 3 Ноябрь 2015, 02:57 #

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

    | Ответить
Имя
e-mail
Сайт
Текст комментария: