phpmailer - 如何验证已发送的电子邮件到达目的地

时间:2015-05-06 02:54:30

标签: php phpmailer

phpmailer工作正常并且能够以各种方式使用它,但是....我正试图找到一种方法来确定一个有效的外观电子邮件地址是否实际上到达某个目的地。我谈论验证地址,例如...
if (!$mail->validateAddress($email)) {echo 'Not a valid squiloople email pattern';}

这是我的设置是通过Gmail使用SMTP ...

$mail->isSMTP();                        
$mail->SMTPAuth = true; 
$mail->SMTPDebug = 0;                   
$mail->isHTML(true);
$mail->Host = 'smtp.gmail.com';         
$mail->Username = "XXXl@gmail.com";  
$mail->Password = "XXX";    
$mail->SMTPSecure = 'ssl';              
$mail->Port = 465;                  

如果电子邮件地址看起来像鸭子那么嘎嘎叫像鸭子那么......
$result = $mail->send(); 始终会返回true!
var_dump($mail->send()); // Also returns Boolean

有没有办法测试电子邮件是否实际收到?或者这是通过谷歌的SMTP gmail服务器严格单向喊出???

任何提示,技巧或指针将不胜感激。

6 个答案:

答案 0 :(得分:5)

$mail->send() 始终返回true。如果与有关的发送过程的部分有效,则返回true 。因此,如果您发送到一个未知地址,但通过gmail发送,gmail的服务器当时不知道该地址是否存在,因此它将被接受并在以后退回。如果您在通过Gmail发送时发送到gmail地址,则会立即失败。

如果一个帐户根本不存在,大多数服务器(包括gmail)仍会提供5.1.1“未知用户”响应,如果您通过SMTP直接发送给收件人的所谓邮件,PHPMailer将正确报告该响应服务器(但不是通过中间服务器(如gmail)或使用mail()发送)。 PHPMailer没有这样做的内置支持,但是自己动手只需要调用getmxrr并手动设置Host。如果您以这种方式发送,也不需要使用身份验证。

您可以执行各种操作,例如检查域是否存在 - 如果不存在,则邮件传递将无效。有些服务器会接受所有地址并稍后发送退回(例如,如果他们有一个带有长处理队列的垃圾邮件过滤器),但如果你被预先拒绝,那么这是一个非常确定的地址不存在的迹象。

您还需要查看退回处理,这将允许您删除看起来不错但后来证明不是的地址,这与PHPMailer所做的完全不同。我现在会警告你 - 弹跳处理非常不愉快!

您还应该在端口587上使用tls发送,而不是在465上使用ssl发送;请参阅PHPMailer提供的gmail示例。

答案 1 :(得分:1)

您可以要求收据,但用户可以选择,而像我这样的大多数人都不会让它确认收据。您所能做的就是确保所有标题都正确并监控退回的电子邮件。

答案 2 :(得分:1)

确认投递的唯一可靠方法是让收件人回答。跟踪像素不能很好地工作,或根本不工作,并且通常不允许交货收据。退回的电子邮件仅识别生成未送达报告的死邮箱 - 并非全部执行 - 并且不会识别活动但被忽略的邮箱。如果您发送电子邮件的人想要您发送的内容,请在通过回复电子邮件确认其地址之前不要将其提供给他们。

答案 3 :(得分:1)

是的,这可以通过以下方式完成 - 使用imap读取gmail邮件程序守护程序发回的未发送邮件的退回邮件通知,然后解析出伪造的地址。使用它,您可以返回到数据库并进行清理。我的登录/注册系统不需要有效的电子邮件进行基本访问,但是对于提升的权限,它会。我只是创建一个管理类功能来处理权限请求,并为基本帐户进行数据库清理,因此新用户注册没有延迟时间。

感谢所有有所了解和贡献!现在我已经完成了,我将查看getmxrr并查看是否更好,但仍计划扩展imap以自动化电子邮件代理帐户维护(删除,移动等等)。 )。

答案 4 :(得分:0)

我找到的解决方案是:
1)要将电子邮件的副本保存在具有ID的mysql数据库中。
2)确保电子邮件已使用1024中的域签名
3)在电子邮件中添加img,以使用电子邮件ID代替电子邮件ID从https://www.example.com/img.php?id=emailid之类的PHP文件中请求图像
4)在img.php中获取电子邮件ID,并使用时间和日期更新数据库的相应条目,并呈现base64图像。

现在,您可以知道电子邮件何时打开以及时间和日期。

答案 5 :(得分:-1)

试试这个:

if ( !PHPMailer::ValidateAddress($email) )

if ( !$mail->validateAddress($email) )