2013-03-07 2 views
15

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


Я сделал почтовую систему, что первый произвел PDF-файл (с помощью FPDF), после чего он послал PDF-файл в качестве вложения с РНР 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); 
} 

Я также попытался отправки сообщения электронной почты с родной mail() -функции PHP, а затем просто ссылку на счета-фактуры (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 <[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.

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

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

  1. Это потому, что мой заголовок выключен, или что-то «глубже»?

  2. ли в-спам Gmail фильтра запрет счет одного адреса электронной почты (например, [email protected]) или это запретить целые домены (например, @example.com)?

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

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

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

  • Я попытался добавить RETURNPATH 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]) [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 
+3

У вас есть запись DNS PTR для домена, из которого вы отправляете? Протестируйте свой домен с помощью такого инструмента, как http://emailtalk.org/MailServerConfig.aspx – DaveHogan

+0

Когда я ввожу имя домена на странице, к которой вы привязались, тогда говорится: «Нет записей». Если я нахожу «PTR Check» в навигации (на том же сайте) и вставляю имя домена, тогда он говорит мне об этом: 193.202.110.18 PTR указывает на srv18.one.com. - Хорошо это или плохо? И как мне его изменить? – Zeth

+1

Позволяет ли домен, который вы отправляете (отправитель электронной почты), соответствовать one.com? У вас нет записей MX? – DaveHogan

ответ

0

Решение: Использование 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 град-Мэри и всевозможные из странных вещей).

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

13

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

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

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

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

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

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

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

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


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

также:

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

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

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


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

+0

Хмм ... Мой вопрос был, если бы я мог отправлять письма из домена One.com, где его невозможно изменить SPF-запись или DKIM-запись. Так что вы говорите, что это невозможно, так как я не могу изменить SPF-запись или DKIM-запись? Если нет, то что вы предлагаете? Из-за этой крошечной проблемы (которая стала огромной) переместиться на совершенно новое веб-пространство?
Я добавил, как выглядит мой заголовок сейчас. Он говорит что-то с SPF-нейтральным или что-то в этом роде, но у меня нет подсказки, если это означает, что он установлен или нет (или одобрен или нет). – Zeth

+0

Да, это означает, что вам нужно будет изменить службу домена и/или веб-хостинг. Спам-рассылка по электронной почте не является небольшой проблемой, если вы сталкиваетесь со многими пользователями, которые не из известной сети. Нейтральная SPF-запись означает, что сервер обнаруживает, что у вас установлен SPF-запись, но она не соответствует или не имеет всей необходимой информации, поэтому подумайте, что она не установлена ​​правильно. И да, это отстой, что в наши дни вам нужны такие сложные настройки для таких основных вещей, как электронные письма, все из-за спамеров ... – aleation

+0

Черт ... Но спасибо. Я рассмотрю, какие у меня есть другие варианты, прежде чем я это сделаю. Это довольно много работы, для чего-то такого простого ... – Zeth

3

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

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

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

Edit:

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

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

Обратите внимание, что вы должны использовать этот '-f ...' **, даже если ** вы устанавливаете заголовок 'Return-Path' вручную, потому что' sendmail' (вызываемый функцией 'mail()'), может лишить заголовок и/или заменить его другим. Просто убедитесь, что оба места, где вы указали «Return-Path», совпадают. –

+0

Хм ... Пробовал, и это не сработало. Я немного обновил вопрос, где я включил весь заголовок. Спасибо за предложение. – Zeth

+0

Извините, человек. Я не уверен, почему вы будете получать спам, если у вас нет высокого соотношения изображения/текста, или вы были в черном списке в какой-то момент. Возможно, стоит получить инструмент, который проверяет ваши автоматические электронные письма на различные фильтры спама. – LoneWolfPR

0

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

в из заголовка вы бы затем использовать ([email protected])

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

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

<?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>"; 

} 

?> 
+0

Я оставил напоминания папки спама в своем коде на случай, если он когда-либо был помечен. Но пока это не помечено как спам. Надеюсь, это может вам помочь. –

+0

Hi Eric. Спасибо за предложение. Электронная почта, которую я отправляю, создается в controlepanel One.com, так что это не так.
Я попытался скопировать/вставить скрипт в свой файл и вручную вставить правильные значения. Я поместил все это в JSfiddle, так что вы могли видеть скрипт и то, что он выводил (спойлер-предупреждение), но он все еще попадает в спам - извините (http://jsfiddle.net/F4Lwr/). Спасибо за предложение, хотя (и все-шапки не должны быть грубыми, но это просто, чтобы дать понять, что находится в файле, а что нет). – Zeth

0

Есть по крайней мере два «спам» ищут вещи, которые выскакивают из ваших почтовых заголовков:

Message-Id: <51450f37.6a0b700a.6239.5dbcSMTPIN_ADDED_MISSING[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).