今天突然发现有很多网友在我其他网站注册会员时,填写的Gmail邮箱。然后无法正确验证及激活邮箱。在此小编是也注意到了这个问题,于是用我的Gmail邮箱亲自测试了一下,确实无法接受到邮件验证码。

于是我打开了我的发信邮件后台去查看了一下,果真出现了一大堆的退信邮件...

PHP发送邮件给Gmail邮箱出现邮件格式不符合RFC标准导致退信的解决办法 第1张

我滴个乖乖,全是退信邮件,但是我仔细的发现,基本上都是Gmail邮箱的退信。

PHP发送邮件给Gmail邮箱出现邮件格式不符合RFC标准导致退信的解决办法 第2张

根据退信内容的的反馈,它说我的邮件格式不符合RFC标准。

那么RFC是什么意思呢?

当提到邮件格式不符合RFC标准时,RFC指的是"请求评论"(Request for Comments)。

在电子邮件领域,RFC是一系列文件,由互联网工程任务组(IETF)编写和维护。这些文件定义了电子邮件协议的规范和标准,包括邮件格式、邮件头部、邮件传输协议(如SMTP)、邮件安全(如DKIM、SPF)等。RFC文件确保不同电子邮件系统之间的互操作性和一致性。

因此,当说邮件格式不符合RFC标准时,意味着该邮件的结构、字段或内容不符合RFC文档中定义的规范。这可能是由于邮件头部缺少必要的字段、字段使用不正确的语法、邮件内容编码问题或其他与RFC标准相关的问题。

遵循RFC标准对于确保邮件在不同的邮件系统之间正确传输和解析是至关重要的。因此,当发送邮件时,应该确保邮件的格式符合RFC标准,以减少可能出现的传输或解析问题。

现在我们返回正文,看到退信原因中的英文,我简单的翻译了一下,它的意思是说“messageId”这个值不是有效的。

于是我打开发送邮件的主要代码,找到了生成messageId值的变量,通过ChatGPT修改了一下,不知道是什么原因,反正是解决了。

ChatGPT操作

为了解决这个问题,我建议你尝试以下方法:

1.验证邮件头部:确保你的邮件头部包含了其他必要的标准头部字段,并且符合RFC标准。确保头部字段的书写正确,没有多余的空格或换行符。你可以参考RFC 5322(https://tools.ietf.org/html/rfc5322)来确保你的邮件头部符合标准。

2.重新生成messageId:尝试生成一个新的messageId值,并将其添加到邮件头部中。确保生成的messageId是唯一的,并且符合RFC标准的格式。你可以使用类似下面的代码来生成messageId:

$messageId = '<' . md5(uniqid(mt_rand(), true)) . '@' . $_SERVER['SERVER_NAME'] . '>';

3.检查SMTP服务器设置:确保你的SMTP服务器设置正确,包括主机名、端口号、身份验证信息等。如果你正在使用Gmail作为SMTP服务器,请确保使用了正确的SMTP主机名(如smtp.gmail.com)和端口号(如465或587),并提供正确的Gmail用户名和密码进行身份验证。

4.使用第三方库:考虑使用PHP的第三方库(如PHPMailer或Swift Mailer)来发送邮件。这些库提供了更高级的邮件发送功能,并且会自动处理RFC标准相关的问题。


然后我按照它的指引修改了一下,没想到这就解决了?

源代码

$messageid = md5(date('YmdHis') . CreateRandomString(7) . $from);

修改后的代码

$messageId = '<' . md5(uniqid(mt_rand(), true)) . '@' . $_SERVER['SERVER_NAME'] . '>';

PHP发送邮件给Gmail邮箱出现邮件格式不符合RFC标准导致退信的解决办法 第3张

最后测试了一下,也是成功发送邮件到Gmail。