2011-02-28 149 views
6

我一直在使用PHP郵件功能發送包含帳戶詳細信息的電子郵件給客戶,當他們註冊但我只是發現有些人沒有收到電子郵件。例如。當我測試的只有我和另外一個collegue正在接受PHP郵件功能不發送郵件到某些地址

- me who received email 
- [email protected] 
- collegue who received email 
- [email protected] 
- collegue who did not receive emails: 
- email 1 - [email protected], 
- email 2 - [email protected] 
- collegue who did not receive emails: 
- [email protected] 
- collegue who did not receive emails: 
- [email protected] 

這些電子郵件不是在垃圾郵件文件夾或者..

$from = "companyy <[email protected]>";   
$subject = "$username Account Details for companyy.co.uk";  
$message = "You have been registered as an administrator of companyy Online. 
You can manage your clients, bills and other account functions online.  

Your Username: $username 
Your Password: $password2 
Your Four-Digit PIN: $PIN   

Once logged in you can change your password to something you will find easier to remember. Please delete this email once you have changed your settings or memorised them.   

Thank you   

This is an automated response, please do not reply!"; 

mail($email, $subject, $message, $from); 
Header('Location: results.php?msg=Added Successfully'); 
+0

即使他們沒有在垃圾郵件文件夾最後,在回答了許多點,「爲什麼我的郵件中的垃圾郵件文件夾結束」的問題(HTTP ://stackoverflow.com/search?q = php + spam + mail)也適用於此。這個腳本是否在'companyy.co.uk'的服務器上運行? – 2011-02-28 11:28:55

+1

查閱Jeff Atwoods關於發送電子郵件的文章 - 一些非顯而易見的陷阱:http://www.codinghorror.com/blog/2010/04/so-youd-like-to-send-some-email-through-code .html – 2011-02-28 11:30:30

+0

你使用的是sendmail還是什麼類型的郵件服務器? – 2011-02-28 11:32:09

回答

0

看來收到的電子郵件時,發送電子郵件給我的每一個的同事的發送電子郵件。問題在於接收方。檢查垃圾郵件或篩選器。您可以記錄發送的郵件以確定發送的內容。

+0

如何記錄發送的電子郵件?謝謝@Elzo Valugi – pam 2011-02-28 11:30:28

+1

他們會在您的服務器的郵件服務器中(如果您使用的是unix-ish系統,則類似於/ var/log/mail)。 PHP的'mail()'實際上並不發送郵件 - 它只是把它交給服務器的郵件服務器來完成交付。它會*成功地交付給你,因爲它只是進行本地切換。 – 2011-02-28 12:45:09

+0

只記錄發送的內容仍不會告訴你交付是否完成的真實情況。它只是告訴門外發生了什麼。你可以自己來確保它能夠通過某人,但是這仍然不能解釋爲什麼一個人而不是另一個人得到這封電子郵件。 – bpeterson76 2011-02-28 16:48:59

0

你要調試$email,也許是空的或僞造的:

var_dump($email); 

但這個問題可能不是與php。首先檢查一些電子郵件黑名單網站,如http://www.mxtoolbox.com/blacklists.aspx

如果在黑名單上找不到您的郵箱,您必須聯繫服務器管理員,他們必須檢查日誌。

+0

他們不是空的或虛假的電子郵件,因爲我使用我的同事測試地址 – pam 2011-02-28 11:59:05

+0

您試圖在'mail()'之前轉儲該變量嗎?如果確實是正確的電子郵件地址,則此問題不在您身邊,您必須聯繫系統管理員。 – Eduard7 2011-02-28 12:04:40

0

您可能有一個已被列入黑名單的IP地址,在共享主機中很常見。無論是移動的服務器或外包電子郵件sendgrid或postmarkapp

0

查詢您的信息,並確保它被分隔瓦特/ PHP_EOL

要發送的消息。

每行應該用 LF(\ n)分隔。線不應該比70個字符大 。

如:

$message = 'This message was sent via PHP!' . PHP_EOL . 
      'It should work ... and it does.' . PHP_EOL . PHP_EOL . 
      'From Display Name' . PHP_EOL; 
// In case any of our lines are larger than 70 characters, we should use wordwrap() 
$message = wordwrap($message, 70); 

當使用PHP mail

7

下面是關於發送電子郵件一個骯髒的小祕密:你失去了控制。一旦他們離開了你的服務器,你的電子郵件到達目的地,這是互聯網神的恩典。一路上,它從一個網絡「握手」到另一個網絡。它到達最終目的地,然後受到許多技術人員處於黑暗中的垃圾郵件過濾器和規則的影響。例如,您是否知道MSN Hotmail,AOL等不會一次接受超過一定數量的來自服務器(ip範圍)的電子郵件?一旦你達到了服務器的預定(和未發佈)限制,該電子郵件將被保留,而不管其垃圾郵件的評級。最終它會被通過,但這意味着您的用戶所做的密碼請求不會是即時的。這裏還有一些小技巧 - 服務器基於域的壽命和未發佈的其他因素獲得「信任」。您的域名是否長期居住?您是否在blacklist上列出?電子郵件是「垃圾郵件」(使用工具like this查詢)

然後有像美國在線這樣的網站,即使質量好的服務器的高質量電子郵件只是沒有定期交付。 (谷歌「AOL送貨能力」一些有趣的閱讀)

那麼,該怎麼辦?從黑名單檢查開始。如果這很好,請檢查標題。 「發件人」地址是否與發送電子郵件的域相匹配,並且該帳戶是否有效?這可能是一個很大的垃圾郵件紅旗。爲了避免這個問題,我的公司(每天發送超過5萬封電子郵件)通常會設置「虛擬」回覆帳戶。您是否在您正在測試的用戶的白名單中?用戶是否使用像Outlook這樣的程序隨機進行自己的黑名單?改變你的信息,看看產能是否提高。測試多個不同的主機,看它是否只是一個特定的系統。

漂洗,重複,並繼續...

相關問題