2011-02-28 150 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这样的程序随机进行自己的黑名单?改变你的信息,看看产能是否提高。测试多个不同的主机,看它是否只是一个特定的系统。

漂洗,重复,并继续...