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

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共享网络托管计划是碰运气的。)

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

  1. java pop3 接收邮件_JavaMail使用POP3协议接收并解析电子邮件

    JavaMail使用POP3协议接收并解析电子邮件 代码片段:public static void main(String[] args) throws Exception { receive(); ...

  2. Java mail接收邮件 回复邮件 转发邮件

    下面的代码在很多别的博客上都有,我只是copy过来学习了下,并且做了少许的修改,但大多数用的都是POP3协议去接收邮件,如果你实际验证过就应该会发现至少从昨天开始是不能获取邮件的内容的,所以需要用IM ...

  3. 英国Paced Email免费自定义别名电子邮箱按时间转发邮件

    文章目录 前言 一.pandas是什么? 二.使用步骤 1.引入库 2.读入数据 总结 前言 Paced Email由Rikki Pitt创建于2014年,总部位于英国伦敦,是一项可编程的电子邮件转发 ...

  4. outlook转发邮件步骤_如何通过快速步骤和规则更好地在Outlook中管理电子邮件

    outlook转发邮件步骤 If you tell us email has fallen out of fashion, we'd ask you to have a look at our inb ...

  5. 引用 如何开通雅虎免费邮箱的POP功能,自动转发邮件

    雅虎免费邮箱是大家非常常用的邮箱,稳定性也非常的不错,美中不足就是不支持客户端收取和自动转发.要想开通这些功能就得付费了.以下简单介绍一下如何设置,免费开通POP功能,实现邮件的自动转发: 不同Yah ...

  6. Linux利用Esmtp 选择邮件服务器发送邮件(解决手机接收乱码)

    因公司业务需求,需要定时发送一些业务邮件.使用Linux 自带的mail 命令 发送邮件 ,能正常发送但是领导们都用手机收取邮件,很崩溃 他们接收到的邮件乱码.不得不想办法解决此问题. 就在googl ...

  7. 基于BC95的数据转发,利用Python实现UDP接收数据,TCP转发数据

    基于BC95的数据转发,利用Python实现UDP接收数据,TCP转发数据 文章信息 环境信息 系统概览 基于Python的UDP(服务端)数据接收 1. UDP接受的数据如何读取 文章信息 撰写日期 ...

  8. Java使用hotmail的SMTP服务器转发邮件出错

    最近使用hotmail的SMTP在服务器上转发邮件,后台获得如下错误: javax.mail.AuthenticationFailedException: 535 5.0.0 Authenticati ...

  9. 不能上美国邮箱服务器地址,我的邮箱不能接收国外的邮件,国内的可以接收,请解决!...

    我的邮箱不能接收国外的邮件,国内的可以接收,请解决! 您好: 如果能收国内的,不能收国外的邮件,有可能是该封邮件被判定为垃圾邮件,所以拒收了.这种情况下对方会收到我司服务器发出的拒收原 因,如:用其它 ...

最新文章

  1. 超暖心!美国消防员钻冰窟窿救狗狗
  2. php找不到指定的模块,php中的dll“无法找到指定的模块”
  3. 怀旧版大脚插件未能从服务器,魔兽世界怀旧服大脚插件
  4. Linux自启进程管理工具,进程管理工具Supervisor的安装及使用
  5. 【Linux】一步一步学Linux——service命令(146)
  6. ptrace和wait的理解 (ptrace监控进程)
  7. 中英文标点符号切换的组合键_易混标点符号:一字线(—)、短横线(-)、浪纹线(~)...
  8. java input函数怎么用_Java函数习惯用法详解
  9. centos 安装nodejs与vue手脚架安装
  10. Page_Load基类,重写OnLoad
  11. 设计模式:(生成器模式)
  12. 大学计算机专业绩点3.7什么水平,大学绩点3.0什么水平 绩点达到多少算优秀
  13. 属牛的女孩取名:优美文雅、声声入耳的女孩名字
  14. 数据挖掘——时间序列算法之ARCH模型
  15. 西门子KTP二代精简触摸屏点击无反应,触摸失效的处理对策
  16. JS 四舍五入保留两位小数
  17. JAVA中创建线程的三种方法及比较
  18. UI设计和web前端哪个好学?
  19. c语言中int下小数求余大数,Sicily1020-大数求余算法及优化
  20. 网页版羊了个羊 Vue3 实现

热门文章

  1. Gradle+IDEA使用说明
  2. html 换行_李亚涛:清除HTML所有格式并且删除换行与回车,只显示文本
  3. 【Flink】FLink Barrier 在流经算子 做 checkpoint 的时候,数据是停止的吗?
  4. 95-846-820-源码-网络-Flink 网络传输优化技术
  5. 【算法】LSM-tree 基本原理及应
  6. 84-java版spark2.x读取es6.x
  7. Spring源码:ApplicationContextInitializer
  8. 【zookeeper】zookeeper的命令行操作zkCli.sh
  9. 一女程序员被判 9 个月:因薪酬等问题离职,rm -f * 删库,瘫痪 6 个小时
  10. P(A)P(B|A)=P(B)P(A|B)