Что мне нужно для совместимого заголовка электронной почты - PullRequest
10 голосов
/ 02 октября 2008

Я пытаюсь отправить электронное письмо с сайта, который я создаю, но оно попадает в папку со спамом Yahoo. Это электронное письмо, которое отправляет учетные данные. Что я могу сделать, чтобы узаконить это?

$header = "From: site <sales@site.com>\r\n";
$header .= "To: $name <$email>\r\n";
$header .= "Subject: $subject\r\n";
$header .= "Reply-To: site <sales@site.com>" . "\r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
mail($email,$subject,$body,$header);

Ответы [ 9 ]

10 голосов
/ 02 октября 2008
  • Не используйте HTML в своей электронной почте.
  • Отправьте его через законный почтовый сервер со статическим IP-адресом и обратным DNS (PTR), который указывает на реальное имя хоста машины (и соответствует прямому поиску).
  • Включите ID сообщения (или убедитесь, что местный почтовый клиент добавляет его для вас).
  • Проведите свою электронную почту через SpamAssassin и посмотрите, каким правилам плохой оценки она соответствует. Избегайте сопоставления их.
  • Используйте DomainKeys Identified Mail для цифровой подписи ваших сообщений.
4 голосов
/ 02 октября 2008

Я только что успешно попробовал следующее из моего Yahoo! Учетная запись веб-хостинга:

$email = "me@site.com";
$subject = "Simple test";
$body = "Simple test";
$header = "From: site \r\n";
$header .= "To: $name \r\n";
$header .= "Subject: $subject\r\n";
$header .= "Reply-To: site " . "\r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
mail($email,$subject,$body,$header);

Тем не менее, у вас есть некоторое дублирование в заголовке, вам нужно только сделать следующее:

$email = "me@site.com";
$subject = "Simple test";
$body = "Simple test";
$header = "From: site \r\n";
$header .= "MIME-VERSION: 1.0\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$phpversion = phpversion();
$header .= "X-Mailer: PHP v$phpversion\r\n";
mail($email,$subject,$body,$header);
2 голосов
/ 03 февраля 2010

Существует также возможность того, что для sendmail (которая находится под функцией PHP mail ()) требуются дополнительные параметры. Если у вас есть проблема с тем, что заголовки возврата (такие как Return-Path) не установлены с тем значением, которое вы им задали, вам может потребоваться использовать параметр пятый mail (). Пример:

mail('recipient@domain.com', 'Subject', $mail_body, $headers, " -f sender@domain.com");

Есть еще одно свидетельство того, что настоящий ванильный sendmail может иметь проблемы с этим! Надеюсь, у вас есть «postfix» в качестве основной поддержки PHP () на вашем целевом сервере.

2 голосов
/ 02 октября 2008

В дополнение к предложениям Теда Персиваля, вы можете попробовать PHPMailer для создания электронных писем вместо создания заголовков вручную. Я широко использовал этот класс, и у меня не было проблем с тем, чтобы электронная почта была отклонена как спам Yahoo или кем-либо еще.

1 голос
/ 03 октября 2008

Тед и Тим имеют отличные предложения. Как и Шаббироб. Мы используем PHPMailer и не имеем проблем с фильтрами спама.

Следует отметить, что многие спам-фильтры НЕ учитывают наличие текстовой версии против вас, если вы используете формат MIME. Вы можете добавить все заголовки и текстовую версию самостоятельно или просто позволить PHPMailer или почтовой библиотеке PEAR позаботиться об этом за вас. Наличие текстовой версии может или не может помочь, но это хорошая практика и удобный для пользователя.

Я понимаю, что ваш пример кода - это всего лишь пример, но стоит сказать: никогда не помещайте данные, предоставленные пользователем, в заголовки вашей почты. Убедитесь, что вы подтверждаете, что это данные, которые вы ожидаете. Тривиально перевести почтовый скрипт php в открытый ретранслятор, и никто не хочет этого.

1 голос
/ 02 октября 2008

Предложения Теда, как и Тима, хороши, но единственный способ, которым я когда-либо смог надежно передать электронную почту в Yahoo / Hotmail / etc, - это использовать классы электронной почты PEAR. Попробуйте это & ​​(при условии, что ваш сервер в порядке), я могу в значительной степени гарантировать, что он будет работать.

1 голос
/ 02 октября 2008

В дополнение к предложениям Теда Персиваля убедитесь, что IP-адрес, с которого поступает электронная почта, является законным источником электронной почты в соответствии с SPF-записью сайта site.com. Если на site.com нет записи SPF, ее добавление (что, разумеется, разрешает IP-адрес) может помочь в получении электронных писем, прошедших через фильтры спама.

И если вам абсолютно необходимо использовать HTML в вашей электронной почте, убедитесь, что вы также включили и текстовую версию; вы бы использовали тип контента «multipart / alternative» вместо «text / html».

0 голосов
/ 02 июля 2009

Добавить запись SPF очень просто. Ты должен попробовать.

Это для Dreamhost Plus и Googlemail Вы также должны объявить свой IP-адрес веб-сервера (в моем случае, строка перед Googlemail) Последняя строка говорит серверу сделать мягкое отклонение (пометить как спам, но не удалять). Я использую его вместо "-" (удалить), потому что в документации Google написано так: -)

Это запись TXT v = spf1 ip4: 64.111.100.0/24 ip4: 66.33.201.0/24 ip4: 66.33.216.0/24 ip4: 208.97.132.0/24 ip4: 208.97.187.0/24 ip4: 208.113.200.0/24 ip4: 208.113.244.0/24 IP4: 208,97,132,74 IP4: 67,205,36,71 включают в себя: aspmx.googlemail.com mx ~ all

Надеюсь, это поможет

0 голосов
/ 02 октября 2008

Проверьте rfc 822 и rfc 2045 для формата электронной почты. Я считаю, что с классом электронной почты Python действительно легко работать. Я предполагаю, что PEAR php делает то же самое (в соответствии с предыдущими письмами). Кроме того, заголовок и тело разделены символом "\ r \ n \ r \ n", не уверен, что ваш код автоматически вставляет это, но вы можете попробовать добавить это к заголовку.

Я не думаю, что DK / SPF может быть необходим (поскольку существует множество веб-серверов без поддержки DK / SPF). Может быть множество факторов, которые могут вызывать его блокировку (по крайней мере, 10 000 различных критериев и методов. Убедитесь, что ваша электронная почта правильно отформатирована (это имеет большое значение). Посмотрите на библиотеки, которые генерируют полный заголовок для вас ... таким образом, у вас меньше шансов на ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...