PHP mail() классифицируется как спам из Ubuntu 12.04

Я настроил сервер Ubuntu для размещения Magento CE, который отлично работает, кроме отправки электронных писем.

Электронные письма отправляются, но подхватываются нашим внутренним спам-фильтром (на почтовом сервере Win2k Exchange с запущенным Exclaimer), прежде чем попасть во внешний мир.

Я создал тестовую веб-страницу и вижу, что это не только Magento, это любая почта, которая отправляется с помощью php mail().

Я использую постфикс для ретрансляции на наш почтовый сервер.

Если я отправлю тестовое электронное письмо с помощью telnet localhost 25, то мои электронные письма будут отправлены нормально с правильными заголовками, только если они будут отправлены с помощью PHP mail(), электронные письма не будут иметь правильных заголовков, как было получено восклицательным знаком:

Received-SPF: pass (Exclaimer Mail Utilities: "this" network is always allowed.) client-ip=0.0.0.0; [email protected]; helo=;
X-ExAntiSpamFlags: LOCAL_IP IP_NO_PTR HELO_NOT_FQDN IP_PTR_NOT_FQDN SMTP_FROM_NOT_EQUAL_822_FROM SPF_PASS RECIPIENT_NOT_IN_AD 
X-SPF-Result: 3

Я просмотрел этот вопрос и ответ (php mail() отправляется в спам, но при отправке через SMTP-сервер работает нормально?) однако в этом сценарии используется VPS, которым я не являюсь.

Я вижу, что в «спамовом» сообщении для helo ничего не установлено, но я не знаю, где я должен установить helo для PHP mail().

Я попытался добавить заголовки в свой php следующим образом:

<?php

 $headers .="Reply-To: OUR Sales <[email protected]>\r\n";
 $headers .="Return-Path: OUR Sales <[email protected]>\r\n";
 $headers .="From: OUR Sales <[email protected]>\r\n";
 $headers .="client-ip: 192.XXX.XXX.XXX\r\n";
 $headers .="helo: UBUNTUSVR.MYCOMPANY.co.uk\r\n";
 $headers .="hostname: UBUNTUSVR.MYCOMPANY.co.uk\r\n";
 $headers .="Organization: Boxes from OURDirect\r\n";
 $headers .="MIME-Version: 1.0\r\n";
 $headers .="Content-type: text/plain; charset=iso-8859-1\r\n";
 $headers .="X-priority: 3\r\n";
 $headers .="X-Mailer: PHP". phpversion() ."\r\n";
echo mail("[email protected]","my subject","my message",$headers)
?>

Это не помогло!

Я думаю, я мог бы настроить Exclaimer так, чтобы он разрешал электронные письма из ящика Ubuntu, однако я подозреваю, что в конечном итоге они просто попадут в чей-то фильтр спама, и я бы предпочел правильно отправлять электронные письма.

Где мне внести изменения, чтобы PHP mail() отправлял электронное письмо с правильными настройками helo и client-ip, учитывая, что моя машина имеет правильное полное доменное имя и не имеет проблем с почтой telnet SMTP?


person user3733854    schedule 12.06.2014    source источник
comment
Это не решение, но я бы вообще перестал использовать функцию mail(). Избавьтесь от всех проблем и используйте PHPMailer или SwiftMailer — они намного лучше.   -  person Amal Murali    schedule 12.06.2014
comment
что-то вроде Madrill значительно облегчило бы вам жизнь — отправка почты с приличной скоростью доставки — нетривиальная задача   -  person Steve    schedule 12.06.2014
comment
Имеет бесплатный плагин magentocommerce.com/ magento-connect/ и услуга бесплатна до 12 тысяч электронных писем в месяц.   -  person Steve    schedule 12.06.2014
comment
Это не имеет ничего общего с библиотекой или функцией, которую вы используете для отправки писем. Просто прочитайте причины, по которым оно помечено как спам, и улучшите конфигурацию своего почтового сервера. Попробуйте ehlo вместо helo и дайте вашему серверу Ubuntu полное доменное имя вместо localhost   -  person Daniel W.    schedule 12.06.2014
comment
Использование другой библиотеки по-прежнему приведет к тем же проблемам. Некоторые указатели: Создайте запись обратного просмотра в DNS для вашего сервера. Убедитесь, что ваш почтовый сервер не является OpenRelay.   -  person ToBe    schedule 12.06.2014
comment
Если у вас есть хороший почтовый сервер, на который вы хотите ретранслировать, либо настройте локальный sendmail для использования этого, либо настройте PHP для использования SMTP на этом сервере, либо используйте библиотеку, которая упрощает отправку через SMTP (например, PHPMailer или SwiftMailer)   -  person ToBe    schedule 12.06.2014
comment
Обязательно укажите записи DNS для IPv4 и IPv6. Я наткнулся на это, где у меня был набор v4 one, но не v6.   -  person NinjaCat    schedule 12.06.2014
comment
Спасибо всем за предложения. Я попытался установить ehlo, а не helo в заголовках для mail(), это не имело значения (и у машины уже было полное доменное имя). На самом деле у меня не было записи DNS в /etc/network/interfaces для IPv4 (IPv6 отключен), но ее добавление не имело никакого значения. Моя первоначальная мысль заключалась в том, что у меня все еще будут проблемы с использованием другой библиотеки для отправки, но я все равно попробовал, и PHPMailer отправляет мои электронные письма правильно! Просто нужно решить, как использовать его с Magento прямо сейчас. Я могу взглянуть на Madrill, так как у него есть плагин.   -  person user3733854    schedule 17.06.2014
comment
@Amal Murali Ваш комментарий, возможно, не был решением конкретного вопроса, который я задал, но кажется решением моей проблемы!   -  person user3733854    schedule 17.06.2014
comment
@ user3733854: Круто. Я тоже узнал это на собственном горьком опыте!   -  person Amal Murali    schedule 17.06.2014
comment
На всякий случай, если у кого-то еще есть проблемы с правильной отправкой электронных писем с помощью Magento, и он читает это - решение этой проблемы для меня заключалось в установке бесплатного расширения Magento SMTP Pro - magentocommerce.com/magento-connect/ Его было легко установить и настроить.   -  person user3733854    schedule 24.06.2014