公告
  
欢迎回来!目前网站流量日益增多服务器负载太大,迫不得已开启邀请码注册,此为赞助,所得费用来续费服务器,感谢支持

朕已阅

PHP发送邮件给Gmail邮箱出现邮件格式不符合RFC标准导致退信

admin 绿软之家站长 关注 网站管理员 76级
发表于技术杂文版块

我滴个天,终于解决了。

应该有很多网友在本站注册会员时,填写的Gmail邮箱。然后无法正确验证及激活邮箱。在此小编也注意到了这个问题,于是用我的Gmail邮箱亲自测试了一下,确实无法接受到邮件验证码。于是我打开了我的发信邮件后台去查看了一下,出现了一大堆的退信邮件...

Image

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

Image

根据退信内容的的反馈,它说我的邮件格式不符合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标准相关的问题。

其实站长也是个代码新手,许多代码站长也看不懂。好在有ChatGPT助我一臂之力。emotion

原代码:

$messageid = md5(date('YmdHis') . CreateRandomString(7) . $from);
修改后的代码:

$messageId = '<' . md5(uniqid(mt_rand(), true)) . '@' . $_SERVER['SERVER_NAME'] . '>';
Image
最后测试了一下,也是成功发送邮件到Gmail。

Image

Image

评论列表 评论
tina tina 普通会员 6级 3#
现在的人工智能是越来越厉害了,都会自己写代码了。
共0条回复,点击查看回复
panda Panda 普通会员 3级 2#
emotion
共0条回复,点击查看回复
发布评论

评论: PHP发送邮件给Gmail邮箱出现邮件格式不符合RFC标准导致退信

(3) 收藏文章
已有0次打赏