Обход фильтра спама Gmail (письма, отправленные с PHP с общего хоста)

TL; DR: Письма, отправленные с общего хостинга (например, дешевый домен из Unoeuro или One.com), попадают в спам. Как исправить?


Я создал почтовую систему, которая сначала сгенерировала PDF файл (используя FPDF), после чего он отправил PDF- файл как приложение с PHP Swiftmailer. Это электронное письмо было отправлено 130 людям (в качестве "одного" счета). Но он попал в спам-фильтр почти для всех. Я попытался настроить параметры заголовка SwiftMailers, но без везения. Даже письма, которые я еще не отправил (тщательно протестированы). Это была моя первоначальная настройка:

function sendMailEt($toEmail, $toName, $invoiceNumber){

require_once('includes/lib/swift_required.php');

$transport = Swift_SmtpTransport::newInstance('mailout.one.com', 25)
  ->setUsername('[email protected]')
  ->setPassword('THE-PASSWORD')
  ;    

$mailer = Swift_Mailer::newInstance($transport);

$message = Swift_Message::newInstance('FROM COMPANY')
      ->setSubject('Thanks for signing up - COMPANY')
  ->setFrom(array('[email protected]' => 'Company name'))
  ->setTo(array($toEmail => $toName))
      ->setBody('A brief body, that explains that this is an invoice and that it has to be paid within 5 days. (written in danish)')
      ->addPart('A brief body, that explains that this is an invoice and that it has to be paid within 5 days. (written in danish)', 'text/html')

   ->attach(Swift_Attachment::fromPath('/URL-TO-THE-PDF-FILE.pdf'))
  ;

$result = $mailer->send($message);
}

Я также попытался отправить электронные письма с помощью PHP native mail() -функции, а затем просто ссылку на счет-фактуру (http://www.company-domain-name.dk/invoice/base64_encoded-name.pdf)... Тот же результат (спам).

Я попытался написать весь заголовок сам. Я читал множество форумов о том, какие заголовки должны включать, но все они писали разные вещи. Поэтому я попробовал несколько разных вещей (оба письма, которые я отправил ранее, и электронные письма, которых у меня не было)... Тот же результат (спам).

Затем я попытался написать заголовок точно так же, как MailChimps, в своем заголовке. Это привело меня к следующему:

 $headers = "Reply-To: Company name <[email protected]>\r\n"; 
 $headers .= "Return-Path: Company name <[email protected]>\r\n"; 
 $headers .= "From: Message from Company name <U[email protected]>\r\n"; 
 $headers .= "MIME-Version: 1.0\r\n";
 $headers .= "Sender: Message from Company name <[email protected]>\r\n";
 $headers .= "Content-type: text/plain; charset=\"utf-8\"; \r\n";
 $headers .= "X-Mailer: PHP". phpversion() ."\r\n";

И затем я отправляю почту следующим образом:

mail($toName . '<'.$toEmail.'>', utf8_decode('Faktura på depositumet'), utf8_decode($someMessage), $headers);

... Тот же результат (спам).

Веб-пространство с One.com, поэтому я не могу использовать PHPmailer (так как это должно быть установлено, и это не может быть выполнено на серверах one.com). И я не могу определить SPF с One.com.

Все, что я хочу, это возможность отправлять письма, которые не попадают на спам.

Вот мои вопросы:

  • Это потому, что мой заголовок выключен, или это что-то "глубже"?

  • Включает ли фильтр спама Gmail отдельные учетные записи электронной почты (например, [email protected]) или запрещает целые домены (например, @example.com)?

  • Можно ли получить черный список в черный список каким-то образом?

* Добавление 1 *

Хорошо... Я сейчас попробовал несколько вещей:

  • Я попробовал добавить LoneWolfPR путь возврата, как рекомендовано, и это не помогло.
  • Я связался с One.com(хостинговой компанией) и подтвердил с ними, что невозможно установить SPF-запись или DKIM-запись. Это еще не так.
  • Я решил настроить ссылку "отказаться от подписки" со ссылкой на веб-сайт с формой, но я не верил этому подходу. Я имею в виду - счета-фактуры отправляются все время, с электронными письмами. И почему вы должны отказаться от подписки на счет? Так как это сделало так далеко от смысла в моей голове, то я только пробовал его около 20 минут (очевидно, без результатов).

Вот мой текущий заголовок электронной почты (получен из Gmail, нажав "Просмотр оригинала" ):

Delivered-To: [email protected]
Received: by 10.76.75.104 with SMTP id b8csp48728oaw;
        Sat, 16 Mar 2013 17:32:56 -0700 (PDT)
X-Received: by 10.152.116.45 with SMTP id jt13mr7897860lab.0.1363480376067;
        Sat, 16 Mar 2013 17:32:56 -0700 (PDT)
Return-Path: <[email protected]>
Received: from mail-out2.b-one.net (mail-out2.one.com. [91.198.169.19])
        by mx.google.com with ESMTP id p10si4637427lbb.120.2013.03.16.17.32.55;
        Sat, 16 Mar 2013 17:32:55 -0700 (PDT)
Received-SPF: neutral (google.com: 91.198.169.19 is neither permitted nor denied by best guess record for domain of [email protected]) client-ip=91.198.169.19;
Authentication-Results: mx.google.com;
       spf=neutral (google.com: 91.198.169.19 is neither permitted nor denied by best guess record for domain of [email protected]AIN-NAME.dk) [email protected]
Date: Sat, 16 Mar 2013 17:32:55 -0700 (PDT)
Message-Id: <[email protected]>
Received: from localhost.localdomain (srv18.one.com [193.202.110.18])
    by mail-out2.b-one.net (Postfix) with ESMTP id F3D0B10365
    for <[email protected]>; Sun, 17 Mar 2013 01:32:53 +0100 (CET)
Received: from 85.218.159.219 by www.DOMAIN-NAME.dk via URL_TO_THE_SCRIPT.php with HTTP; Sun, 17 Mar 2013 00:32:53 +0000
To: RECIEVERS_NAME <[email protected]>
Subject: EMAIL-SUBJECT
X-PHP-Originating-Script: 87486:NAME-OF-THE-SCRIPT-THE-E-MAIL-WAS-SENT-FROM.php
Reply-To: COMPANY NAME <[email protected]>
From: Besked fra COMPANY NAME <[email protected]>
MIME-Version: 1.0
Sender: Besked fra COMPANY NAME <[email protected]>
Content-type: text/plain; charset="utf-8"; 
X-Mailer: PHP5.3.21

Ответ 1

Решение: Используйте Mailgun (не тестировалось) или Sendgrid (проверено и творит чудеса!). Существует разница в цене между этими двумя, но вкратце: Mailgun хорош, если вы маленькие; Сэндрид хорош, если ты большой.

Либо это, либо отправить почту с помощью MailChimps API или что-то в этом роде. Он не может быть установлен на общих хостах (скорее всего). Причина ниже.


Объяснение: Позднее я узнал больше о том, как работают общие хосты. Представьте себе, что несколько разных сайтов расположены на одном сервере (например, domain-1.org, domain-2.org и domain-3.org). Это означает, что если domain-3.org отправляет кучу crap-email, Gmail (и другие спам-фильтры) отмечают этот IP-адрес как спам. Поэтому, если domain-2.org затем отправит материал, то это (вероятно) произойдет с некоторого IP-адреса и, следовательно, попадет в спам. Общие хосты не могут ничего с этим поделать (и все равно, так как у немногих людей есть эта проблема). И вот почему это так дешево.

IP-адреса Sendgrid и Mailguns отмечены как "штраф" всеми спам-фильтрами, а также тот сервис, за который вы платите. Они сохраняют это таким образом, отслеживая, сколько писем, отправленных вами, помечены как "спам". Если это что-то вроде 5% -10% или что-то сумасшедшее, то Sendgrid/Mailgun заблокирует вашу учетную запись до тех пор, пока вы ее не исправите (пройдя долгий процесс, когда вам нужно обратиться в службу поддержки клиентов и сделать 1.000 град-Мэри и всевозможные из странных вещей).

Я слышал, что если вы получите свой собственный сервер (который дороже) и настройте свой собственный почтовый сервер, тогда вы должны быть очень осторожны, чтобы не быть помечены как спам. Потому что спам-фильтр в наши дни очень жесткий...

Ответ 2

1) Обычно адрес электронной почты не попадает в черный список, требуется время и/или много людей, чтобы пометить вас как спамера, чтобы фактически получить этот адрес в черный список.

2) Да. Полное доменное имя может быть занесено в черный список, поскольку спамеры обычно генерируют случайные адреса электронной почты, такие как [email protected]

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

Как избежать спамбокса?

В основном вам нужны некоторые подписи и большой доступ к вашим записям DNS, потому что там мы собираемся выполнить большинство настроек.

  • Обратный поиск DNS. На выделенных серверах или даже на некоторых VPS вы можете настроить обратную запись dns, иногда вы просто открываете билет, и ИТ-система настроена для вас, Если вы не можете этого сделать, измените свой хостинг или продолжайте отмечать как спамер xD. Это касается предварительных фальсификаций заголовков, поскольку вы можете установить в своих заголовках, что ваша электронная почта поступает с gmail.com, но это не так, как это проверяет сервер электронной почты.

  • SPF также должен иметь, если вы не можете установить SPF, а затем даже не пытаетесь продолжить, подумайте об изменении своего хостинга, и вы можете почти перестать читать здесь xD.

  • DKIM/Domain Key: желательно DKIM, является зашифрованной сигнатурой, вы устанавливаете открытый ключ в DNS и сохраняете закрытый ключ на своем почтовом сервере, когда сервер получает электронной почты, у него есть закрытый ключ, прикрепленный в заголовках (вам нужно программное обеспечение почтового сервера, которое управляет DKIM, для окон, например, для меня работало hmailserver), а почтовая служба (например, gmail) проверит вашу запись DNS, чтобы узнать, ключевых совпадений. Это, скорее всего, тоже должно быть


Эти три были основами, если вы настроите DMARC и ADSP, вы получите лучший результат для SpamAssassins. Чтобы получить более качественный поиск некоторых списков ключевых слов спама в google и попытаться их избежать, некоторые вещи, такие как запуск электронной почты с "Дорогой xxx", вредны для вашей оценки. Настройте систему имен (даже если она дерьмовая, как долго поскольку вы предоставляете четкую ссылку) также поможет вам.

также:

  • Избегайте неаккуратного html и белого текста поверх любых (любых) фонов, некоторые спамеры используют его, чтобы поместиться в скрытый текст, эти фильтры более умны, чем вы думаете.

  • Прочитайте конкретные рекомендации. В большинстве почтовых служб есть FAQ или что-то на своем веб-сайте с некоторыми советами, которые помогут вам отправлять электронные письма и не входить в мусор. на некоторых из них вы даже можете подать заявку на получение белого списка (по крайней мере несколько лет назад, на некоторых сервисах, таких как gmail, они больше этого не делают)

  • Если вы отправляете навалом, смотрите время! Если у вас есть X-адреса электронной почты в секунду, отправленные куда-то, вы, вероятно, попадете в черный список, настройте script или что-то, чтобы получить задержку в 1 сек или так, задержка может зависеть от того, чтобы судьбы ушли в черный список или нет.


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

Ответ 3

Одна вещь, о которой нужно помнить, у меня были проблемы с блокировкой писем от Gmail и Yahoo! mail из php, потому что заголовок Return-Path не соответствует указанному. На многих серверах, если вы явно задаете Return-Path в заголовках, PHP Mail игнорирует это и устанавливает путь возврата к имени машины. Вы должны вынудить его в разделе "дополнительные параметры" функции почты, используя флаг "-f". Теперь я никогда не использовал Swift Mailer, поэтому я не знаю эквивалента функции PHP native mail(), но вот как это будет выглядеть с помощью mail();

mail($to,$subject,$message,$headers,'-f [email protected]')

Если вы можете найти эквивалент этого в быстрой почтовой программе, это может решить вашу проблему.

Изменить:

Похоже, вы вообще не устанавливаете Return-Path. Я знаю, что GMail действительно не нравится, что его нельзя забыть. Попробуйте явно установить его сообщение Swift_Mailer (и убедитесь, что оно соответствует вашему From):

$message->setReturnPath('[email protected]');

Ответ 4

Убедитесь, что адрес электронной почты, который вы используете как FROM, фактически является адресом электронной почты. У меня была проблема с тем же вопросом, когда я перешел к управлению своими учетными записями с хоста (one.com для вас) и добавил учетную запись, из которой я хочу, чтобы письмо было отправлено. Я добавил учетную запись под названием "почтовая программа", и через панель я смог настроить автоответчик, который сказал: "Извините. Этот адрес электронной почты зарезервирован для функций сервера".

в заголовке from, который вы затем используете ([email protected])

имея этот фактический адрес электронной почты и автоотчет, сделал трюк. Я думаю, что gmail достаточно умен, чтобы знать, что адрес электронной почты, который никогда не использовался раньше, является спамом. Кроме того, адрес электронной почты должен поступать из домена, в котором живет script, так что, когда он говорит, что он там, он не лежит.

вот код, который я использую, когда я хочу отправить электронное письмо с моего общего хоста (justhost.com), он не переходит к спаму (это использует данные post из веб-формы):

<?php



// Contact subject

$subject = $_POST["subject"];



// Details

$message=$_POST["detail"];



// Email of sender

$mail_from=$_POST["customer_mail"]; 

//Name of sender

$name=$_POST["name"];
putenv("TZ=America/Phoenix");
$now = date("F j, Y, g:i a T");

$header="Reply-To: $name <$mail_from>";

$header .= "From: MyDomainName.com <[email protected]>";
$header .= "\r\n";
$header .= "Reply-To: $name <$mail_from>"; 
$introMSG= "Message From:".$name." <".$mail_from.">"."\r\n"
."Sent On:".$now."\r\n"."From a web form on MyDomaiNname.com"."\r\n"."-----------
-----------------------"."\r\n"."\r\n";


$to ='[email protected]'; // Domain Owners Email Address

$send_contact=mail($to,$subject,$introMSG.$message,$header);

$send_copy=mail($mail_from,"Copy Of:".$subject,$introMSG.$message,$header);

// Check if message sent


if($send_contact){

echo "<strong>Thanks! Your message has been sent to me.</strong>";

}

else {

echo "<strong>There was an error sending your message </strong>"; 

}



if($send_copy){
echo "<strong><br>A copy of this message was sent to your email.<br>If you do not
receive a copy please check your spam folder</strong>";

}

else{
echo "<strong> There was an error sending a copy of this message to your email
</strong>"; 

}



$send_reminder=mail("[email protected]","","You Have a new contact message from
".$name.", remember to check your spam folder.",$header);

if($send_reminder){

echo ".";

}

else {

echo "<br><strong>TXT Error</strong>";

}

?>

Ответ 5

Есть по крайней мере два "спамных" вида, которые выходят из ваших заголовков электронной почты:

Message-Id: <[email protected]>

Обратите внимание на раздел SMTPIN_ADDED_MISSING. Вы не ведете себя как надлежащая почтовая программа и генерируете уникальный идентификатор сообщения. Возможно, вы читаете RFC 5322 для обучения.

Received: from localhost.localdomain (srv18.one.com [193.202.110.18])
by mail-out2.b-one.net (Postfix) with ESMTP id F3D0B10365
for <[email protected]>; Sun, 17 Mar 2013 01:32:53 +0100 (CET)

Этот начальный полученный заголовок имеет незаконное имя хоста HELO (localhost.localdomain). Ваше почтовое приложение должно предоставить вам способ установить его на допустимое значение. Это может быть даже проще, чем настройка имени хоста на компьютере с PHP. См. RFC 1035 (допустимость имени хоста), RFC 2821 (SMTP) и RFC 5321 (SMTP).