繁体   English   中英

如何知道无法使用php发送电子邮件

[英]how to know failed to send the E-mail using php

 $subjt    = $subject;
 $message  = $message;
 $toinfo  .= $snteadd[$i];
 $headers  = "MIME-Version: 1.0 \r\n";
 $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
 $headers .= "From: <$fromemailid>\r\n";
 $headers .= "Cc: <$sendCC>\r\n";
 $headers .= "Bcc: <$sendBCC>\r\n"; 
 $headers .= "Return-Path: <$fromemailid>\r\n"; 
 $headers .= "Errors-To: <$fromemailid>\r\n";
 $headers .= "X-Mailer: PHP 4.x". phpversion()
 @mail($snteadd[$i], $subjt, $message, $headers);

返回值

如果邮件已成功接受传递,则返回TRUE,否则返回FALSE。

重要的是要注意,仅仅因为邮件已被接受送达,并不意味着邮件实际上将到达预期的目的地。

然后,您可以执行以下操作:

if (@mail($snteadd[$i], $subjt, $message, $headers))
{
    echo 'delivered to smtp';
}
else
{
    echo 'not delivered to smtp';
}

如果要检查邮件到达发件人,则可能更好的解决方案是获取具有唯一参数的脚本链接以确定邮件ID,并获取邮件文本中的信息以单击链接。

mail函数成功返回true或失败返回false

if (!@mail($snteadd[$i], $subjt, $message, $headers))
{
    // It failed...

参见http://php.net/manual/en/function.mail.php

检查mail函数的返回值,该函数在失败时返回false

if(@mail($snteadd[$i], $subjt, $message, $headers) === false) {
  // mail failed.
}

只是为了扩展先前的答案, @用于显式禁止显示以下功能所显示的错误消息-因此,您的代码要做的是发送电子邮件,如果失败则不要告诉我...通常这只是好的如果您是a)不在乎或b)正在检查它是否可以自己工作-例如使用if块,如其他地方所示

如果其他人想知道为什么不遵守他们设置的“ Return-Path”标头,则许多php设置会用其他内容代替该标头,通常是服务器的默认电子邮件地址(例如,something @ webserver.domain)。 com)。 通过以下方式使用(经常被忽略)第五个参数$ additional_parameters:

mail($toMail, $subject, $message, $other_headers, "-fyour_return_path_email_address@whatever.com")

your_return_path_email_address@whatever.com是您希望返回路径为的电子邮件。 在此之前的-f部分使“信封发件人”成为该电子邮件地址。

尽管mail()函数成功返回true,失败返回false,但是它报告的状态仅表示“已接受本地服务器传递”,而绝对不是 “传递”。

大多数电子邮件使用的SMTP协议不能保证任何效果 应该尝试在某个时间传递电子邮件; 同样,无法保证会在十分钟,明天或本月(发生)发生。 更糟糕的是,没有可靠的方法来判断您发送的邮件是否确实已经发送给了预期的收件人。

即使将电子邮件传递给收件人,电子邮件也可能会被拖入垃圾邮件箱,用户也看不到它。

换句话说,使用电子邮件可以确定的唯一事情就是您是否已发送电子邮件。 除此之外的任何事情都是不确定的。 有关其他可能的陷阱,另请参见

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM