php 转发邮件,PHP Email();我不接收转发的电子邮件

尽管这个答案有一部分只适用于

mail()

函数本身,其中许多故障排除步骤可以应用于任何PHP邮件系统。

确保已启用错误报告并设置为报告所有错误

错误报告对于消除代码中的错误和PHP遇到的一般错误是必不可少的。需要启用错误报告才能接收这些错误。将以下代码放在PHP文件的顶部(或主配置文件中)将启用错误报告。

error_reporting(-1);

ini_set('display_errors', 'On');

set_error_handler("var_dump");

确保

这可能看起来很愚蠢,但一个常见的错误是忘记实际放置

邮件()

在代码中的函数。确保它在那里并且没有被注释掉。

确保

函数调用正确

bool mail(字符串$to,字符串$subject,字符串$message[,字符串$additional\u headers[,字符串$additional\u parameters]])

mail函数接受三个必需的参数,还可以选择第四个和第五个参数。如果你打电话给

邮件()

如果你打电话给

如果没有正确顺序的正确参数,它也将失败。

检查服务器的邮件日志

logs

. 里面将是服务器报告的错误消息,如果有的话,与您试图发送电子邮件有关。

检查端口连接故障

大多数主机提供商都会屏蔽这些电子邮件端口,以保护其网络不发送任何垃圾邮件。

端口25或587用于普通/TLS连接,端口465用于SSL连接。对于大多数用户,建议使用端口587以避免某些主机提供商设置的速率限制。

如果您的代码包含

@mail(...)

然后,您可能会隐藏重要的错误消息,这将有助于您调试。拆下

@

看看有没有报错。

检查

邮件()

返回值

退换商品

TRUE

FALSE

否则。重要的是要注意,仅仅因为邮件被接受交付,并不意味着邮件将实际到达预定的目的地。

如果你收到

返回值您知道错误在于服务器接受您的邮件。这可能不是编码问题,而是服务器配置问题。你需要和你的系统管理员谈谈,找出发生这种情况的原因。

如果你收到

返回值它并不意味着你的电子邮件一定会被发送。它是通过相应的PHP处理程序成功地发送到服务器上的。在PHP的控制之外还有更多的故障点会导致电子邮件无法发送。

错误的

真的

一定意味着你的邮件发送成功了。这一点值得注意!

许多共享网络主机,特别是免费网络主机提供商,要么不允许从他们的服务器发送电子邮件,要么限制在任何给定的时间段内可以发送的数量。这是由于他们努力限制垃圾邮件发送者利用他们更便宜的服务。

如果您认为您的主机有电子邮件限制或阻止发送电子邮件,请查看他们的常见问题,看看他们是否列出了任何此类限制。否则,您可能需要联系他们的支持,以验证是否有任何限制周围的电子邮件发送。

检查垃圾邮件文件夹;防止电子邮件被标记为垃圾邮件

通常情况下,由于各种原因,通过PHP(和其他服务器端编程语言)发送的电子邮件最终会出现在收件人的垃圾邮件文件夹中。在对代码进行故障排除之前,请始终检查那里。

为了避免通过PHP发送的邮件被发送到收件人的垃圾邮件文件夹中,您可以通过PHP代码和其他方式执行各种操作,以最大限度地减少电子邮件被标记为垃圾邮件的可能性。好提示来自

Michiel de Mare

使用电子邮件身份验证方法,例如

SPF

,和

DKIM

Check

reverse DNS

确保邮件服务器的IP地址指向用于发送邮件的域名。

确保回复地址是有效的现有地址。

在“收件人”字段中使用收件人的真实全名,而不仅仅是电子邮件地址(例如。

"John Smith"

监控你的虐待账户,比如滥用@yourdomain.com以及postmaster@yourdomain.com。这意味着-确保这些帐户存在,阅读发送给他们的内容,并对投诉采取行动。

最后,让它

很容易退订。否则,您的用户将按取消订阅

垃圾邮件

一些垃圾邮件软件会拒绝邮件,如果它缺少常见的标题,如“发件人”和“回复收件人”:

$headers = array("From: from@example.com",

"Reply-To: replyto@example.com",

"X-Mailer: PHP/" . PHP_VERSION

);

$headers = implode("\r\n", $headers);

mail($to, $subject, $message, $headers);

确保邮件头没有语法错误

无效的头和没有头一样糟糕。一个不正确的字符可能是所有需要脱轨您的电子邮件。仔细检查以确保语法正确无误

为您捕捉这些错误。

$headers = array("From from@example.com", // missing colon

"Reply To: replyto@example.com", // missing hyphen

"X-Mailer: "PHP"/" . PHP_VERSION // bad quotes

);

别用假货

From:

虽然邮件必须有发件人,但不能仅使用

价值观。特别是用户提供的发件人地址是阻止邮件的可靠方法:

$headers = array("From: $_POST[contactform_sender_email]"); // No!

原因:你的网站或发送邮件的服务器没有被列入SPF/DKIM白名单,假装对@hotmail或@gmail地址负责。它甚至可以悄悄地将邮件与

发件人:

确保收件人值正确

$to = 'user@example.com';

// other variables ....

mail($recipient, $subject, $message, $headers); // $recipient should be $to

另一种测试方法是将收件人值硬编码到

函数调用:

mail('user@example.com', $subject, $message, $headers);

这适用于所有

邮件()

参数。

发送到多个帐户

在不同的电子邮件提供商

. 如果您的电子邮件没有到达用户的Gmail帐户,请将相同的电子邮件发送到Yahoo帐户、Hotmail帐户和常规POP3帐户(如ISP提供的电子邮件帐户)。

如果电子邮件到达所有或部分其他电子邮件帐户,您知道您的代码正在发送电子邮件,但很可能是电子邮件帐户提供商出于某种原因阻止了它们。如果电子邮件没有到达任何电子邮件帐户,则问题更有可能与您的代码有关。

POST

$_POST

查找窗体值。如果你把它设置为

GET

或者根本没有设置,一定要使用

$_GET

查找窗体值。

确认你的状态

action

值指向正确的位置

确认你的状态

行动

确保Web主机支持发送电子邮件

一些网络托管提供商不允许或不允许通过其服务器发送电子邮件。原因可能会有所不同,但如果他们已禁用邮件发送,您将需要使用另一种方法,使用第三方为您发送这些电子邮件。

发送给他们的技术支持的电子邮件(在访问了他们的在线支持或常见问题解答之后)应说明您的服务器上是否提供了电子邮件功能。

确保

localhost

已配置邮件服务器

如果您正在本地工作站上使用WAMP、MAMP或XAMPP进行开发,则您的工作站上可能没有安装电子邮件服务器。如果没有,PHP默认情况下无法发送邮件。

您可以通过安装一个基本邮件服务器来克服这个问题。对于Windows,您可以使用免费的

Mercury Mail

启用PHP的自定义

mail.log

ini_set("mail.log", "/tmp/mail.log");

ini_set("mail.add_x_header", TRUE);

通过邮件测试服务进行检查

您可以使用各种传递和垃圾邮件检查服务来测试MTA/webserver设置。通常,您会将邮件探测发送到:他们的地址,然后获取传递报告和更具体的故障或分析:

邮件()

功能是方便的,往往能完成工作,但它

has its shortcomings

. 幸运的是,有一些替代方案提供了更多的功能和灵活性,包括处理上述许多问题:

所有这些都可以与专业的SMTP服务器/服务提供商结合使用。(因为在电子邮件设置/可配置性方面,典型的08/15共享网络托管计划是碰运气的。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值