2013-03-07 119 views
15

TL; DR:從共享主機(例如來自Unoeuro或One.com的廉價域)發送的郵件以垃圾郵件結尾。怎麼修?繞過Gmail的垃圾郵件過濾器(使用PHP從共享主機發送的郵件)


我發了郵件系統,首先生成一個PDF文件(使用FPDF),隨後其發出的PDF文件與PHP的Swiftmailer的附件。這封電子郵件已發送給130人(作爲「一張」發票)。但它幾乎每個人都登陸垃圾郵件過濾器。我嘗試調整SwiftMailer標題設置,但沒有任何運氣。即使是我以前沒有寄過的郵件(經過全面測試)。這是我的初始設置:

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的本地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 <[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的服務器上完成)。我無法用One.com定義SPF。

我想要的就是能夠發送沒有發送垃圾郵件的電子郵件。

這裏是我的問題:

  1. 是不是因爲我的頭是關閉的,或者是它的東西「更深層次的下跌」?

  2. 請問Gmail的垃圾郵件過濾器的禁令單個電子郵件帳戶(如 [email protected])或它禁止整個域(如 @example.com)?

  3. 是否可以將列入黑名單的電子郵件列入白名單 莫名其妙?

*加1 *

好吧......我現在已經嘗試了一些東西:

  • 我嘗試添加LoneWolfPR的ReturnPath這樣,如建議,它沒沒有幫助。
  • 我聯繫了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]) smt[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

您是否爲您發送域名的PTR DNS記錄?使用http://emailtalk.org/MailServerConfig.aspx – DaveHogan 2013-03-07 14:48:29

+0

等工具測試您的域名當我在鏈接到的頁面上輸入域名時,它會顯示'找不到記錄'。如果我在導航中(在同一網站上)選擇「PTR Check」並插入域名,那麼它會告訴我:193.202.110.18 PTR指向srv18.one.com。 - 是好還是壞?我該如何改變它? – Zeth 2013-03-07 21:21:02

+1

您發送的域名(電子郵件的發件人)是否與one.com匹配?你沒有任何MX記錄? – DaveHogan 2013-03-08 13:25:09

回答

0

解決方案:使用Mailgun(未測試)或Sendgrid(測試和工程奇蹟!)。兩者之間存在價格差異 - 但簡而言之:如果你很小,Mailgun會很好; Sendgrid很棒,如果你很大。

要麼,或者發送郵件使用MailChimps API什麼的。它無法在共享主機上修復(很可能)。原因如下。


說明:我後來才知道更多關於共享主機是如何工作的。想象一下,幾個不同的站點位於同一臺服務器上(如domain-1.org,domain-2.orgdomain-3.org)。這意味着如果domain-3.org發送了一堆垃圾郵件,那麼Gmail(以及其他垃圾郵件過濾器)會將該IP地址標記爲垃圾郵件。所以,如果domain-2.org然後發送的東西,那麼(可能)會來自某個IP地址,因此最終會發送垃圾郵件。共享主機無法做任何事情(並且不關心,因爲很少有人有這個問題)。這就是爲什麼它很便宜。

所有垃圾郵件過濾器都將Sendgrid和Mailguns IP地址標記爲「正常」,這就是您爲之付費的服務。他們通過監控發送的郵件數量被標記爲「垃圾郵件」來保持這種狀態。如果它大概是5%-10%或者某種程度上瘋狂的低,那麼Sendgrid/Mailgun會阻止你的帳戶,直到你修復它(經歷一個漫長的過程,你需要聯繫他們的客戶服務並且做1000次冰雹 - 瑪麗和各種各樣的奇怪的東西)。

我聽說如果你有自己的服務器(這樣比較昂貴),並且建立了自己的郵件服務器,那麼你必須非常小心,不要被標記爲垃圾郵件。原因的垃圾郵件過濾器是非常艱難的時下...

13

1)正常情況下,電子郵件地址不會輕易進入黑名單,它需要時間和/或許多人將您標記爲垃圾郵件發送者,以便將該地址實際上列入黑名單。

2)是的。整個域名可能被列入黑名單,因爲垃圾郵件通常會生成隨機電子郵件地址,如[email protected]

3)無論垃圾箱多少次都沒有關係,基本上,垃圾郵件過濾器現在很強大,因爲垃圾郵件發送者試圖改善他們的日常生活方式,所以過濾器變得更加嚴格天。如果它第一次進入垃圾郵件文件夾,並且用戶實際上沒有將其放入垃圾郵件框中,它將繼續運行,除非用戶取消標記或解決問題。

如何避免spambox?

基本上你需要一些簽名和大量的DNS記錄訪問權限,因爲我們要去做大部分設置。

  • 反向DNS查找:在專用服務器上,甚至在某些VPS你可以設置反向DNS記錄,有時你只是開出罰單和IT的它爲你設置。如果您不能擁有它,請更換您的主機或保持被標記爲垃圾郵件發送者xD。這是爲了防止標題僞造,正如你可以在你的標題上設置你的電子郵件來自gmail.com,但這不是電子郵件服務器檢查它的方式。

  • SPF是一個必須的以及,如果你不能設置SPF然後甚至沒有嘗試任何進一步的,考慮改變你的主機,你幾乎可以停下來這裏的xD閱讀。

  • DKIM /域密鑰:最好DKIM,是一個加密的簽名,你設置的DNS的公共密鑰,並存儲在您的電子郵件服務器私鑰,當服務器收到一封電子郵件,它具有專用(你需要一個管理DKIM的郵件服務器軟件,例如它爲我工作的窗口hmailserver)和郵件服務(例如gmail)將檢查你的dns記錄以查看公鑰是否匹配。 這幾乎是一個必須具備以及


那三是基礎,如果你設置了DMARC和ADSP它可以把你的SpamAssassins更好的成績。爲了更好地搜索谷歌上的一些垃圾郵件關鍵詞列表,並儘量避免它們,一些諸如用「親愛的xxx」開始電子郵件等對您的分數有害,建立了unscribe系統(即使它很糟糕,只要因爲你提供了一個明確的鏈接)也會對你有所幫助。

另外:

  • 避免草率html和白色文本(任何)的背景,有些垃圾用它來適應隱藏文本,這些過濾器是比你想象的更聰明。

  • 閱讀具體建議。大多數電子郵件服務都會在其網站上提供常見問題或其他內容,並提供一些幫助您發送電子郵件而不會進入垃圾郵件的提示。他們中的一些人甚至可以申請加入白名單(至少在幾年前,在一些像gmail這樣的服務上他們不再這樣做)

  • 如果你是批量發送,請看時間!如果每秒發送X封電子郵件到某個地方,您很可能會進入黑名單,設置腳本或其他內容以獲得1秒左右的延遲,這種延遲可能取決於進入黑名單的目的地。


希望這些技巧幫助你,我不得不最近處理一些垃圾郵件過濾器,它是在一個痛苦的屁股,這就是爲什麼我知道所有的信息,這是我的所有研究的xD即使在所有的簽名和我已經設置的東西,一些電子郵件仍然進入垃圾郵件箱(較小的百分比,但它仍然傷害我)唯一可靠的方法是讓用戶將您添加到聯繫人列表中(同時正確簽名和標題),所以請儘可能提醒他們這樣做。

+0

嗯...我的問題是,如果我可以從One.com的域名發送郵件,無法更改SPF記錄或DKIM記錄。所以你說的是,這是不可能的,因爲我不能改變SPF記錄或DKIM記錄?如果不是,那麼你有什麼建議?由於這個小問題(已經變成了巨大的問題),轉移到一個全新的網絡空間?
我添加了我的標題現在的樣子。它說什麼SPF中性或類似的東西,但我沒有線索,如果它意味着它是否設置(或批准或不)。 – Zeth 2013-03-17 01:06:33

+0

是的,這意味着你將不得不改變域名的服務和/或虛擬主機。如果你面對很多不是來自已知網絡的用戶,那麼垃圾郵件並不是一個小問題。中立的SPF記錄意味着服務器檢測到你有spf記錄集,但它不匹配或不具備所有需要的信息,所以想想它的設置不正確。是的,它現在很糟糕,你需要如此複雜的設置來處理電子郵件等基本的東西,全都是因爲垃圾郵件發送者... – aleation 2013-03-18 08:58:33

+0

Damnit ...但是,謝謝。在我這樣做之前,我會考慮其他的選擇。這是相當多的工作,因爲這麼簡單...... – Zeth 2013-03-19 21:26:35

3

有一點需要記住,我遇到了Gmail和Yahoo!封鎖郵件的麻煩。來自php的郵件,因爲Return-Path標題與from不匹配。在許多服務器上,如果您明確設置標題中的Return-Path,PHP Mail將會忽略它並將返回路徑設置爲機器名稱。你必須使用'-f'標誌強制它在郵件功能的'附加參數'部分。現在我從來沒有使用過Swift Mailer,所以我不知道它與PHP的本地mail()函數等價,但這是使用mail()的樣子。

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

如果你能找出迅速的郵件可能解決您的問題等同於這一點。

編輯:

看起來你根本沒有真正設置返回路徑。我知道GMail真的不喜歡被忽略。嘗試明確設置到您的Swift_Mailer消息(並確保它符合您從):

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

請注意,即使您手動設置了「返回路徑」標頭,您也應該使用這個'-f ...'**,因爲'sendmail' (由'mail()'函數調用)可能會剝離標題和/或用另一個替換它。只要確保你指定'Return-Path'的兩個地方都一樣。 – 2013-03-15 04:25:07

+0

嗯...試過了,它沒有工作。我更新了一些問題,包括我的整個標題。還是)感謝你的建議。 – Zeth 2013-03-17 00:54:11

+0

對不起。我不確定爲什麼你會得到垃圾郵件,除非你有很高的圖像/文字比率,或者你在某個時候被列入黑名單。這可能是值得一個工具,檢查您的自動電子郵件對各種垃圾郵件過濾器。 – LoneWolfPR 2013-03-18 14:16:02

0

確保電子郵件地址,您使用的FROM實際上是一個電子郵件地址。我已經通過從主機(one.com爲您)進入我的帳戶管理並添加了我想要電子郵件的帳戶來解決同一問題。我添加了一個名爲「郵件程序」的帳戶,通過面板我可以設置一個自動回覆程序,說「對不起,這個電子郵件地址是爲服務器功能保留的」。

From頭那麼您需要使用具有實際的電子郵件地址,並自動reponder的伎倆([email protected]

。我認爲gmail足夠聰明,知道以前從未使用過的電子郵件地址就是垃圾郵件。此外,電子郵件地址必須來自腳本所在的域,以便當它說它來自它時,它不會說謊。

這裏是我使用的代碼,當我想從我的共享主機發送電子郵件(justhost。COM),它不會去垃圾郵件(這是使用從Web表單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>"; 

} 

?> 
+0

我在我的代碼中留下了垃圾郵件文件夾提醒,以防它被標記。但到目前爲止,它不會被標記爲垃圾郵件。希望這可以幫到你。 – 2013-03-16 02:57:00

+0

嗨,Eric。感謝您的建議。我發送的電子郵件是在One.com的控制面板中創建的,所以不是這樣。
我嘗試將您的腳本複製/粘貼到我的文件中,並手動插入正確的值。我把它全部放在JSfiddle中,所以你可以看到腳本和它輸出的內容(擾流警報),但它仍然在垃圾郵件中 - 抱歉(http://jsfiddle.net/F4Lwr/)。感謝您的建議,(全部大寫不能粗魯,但只是要說清楚,文件中包含什麼,不包含什麼內容)。 – Zeth 2013-03-17 01:27:04

0

至少有兩個「垃圾」看的東西,跳出你的電子郵件標題:

Message-Id: <[email protected]> 

通知的SMTPIN_ADDED_MISSING部分?您的行爲不像一個適當的郵件程序並生成一個唯一的消息ID。您可能會發現閱讀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)。

相關問題