使用PHP的mail()函数发送邮件无法获取已读回执该如何解决?
问题原因与修复方案
一、未收到回执的核心原因
- 规则层面的天然限制:已读回执本身是弱保障机制,主流邮箱服务商(如Gmail、Outlook)和邮件客户端默认不会自动发送已读回执,必须收件人手动确认同意发送,才会返回对应通知,这个限制无法通过代码强制突破。
- 代码层面的头字段缺失:你当前的代码只添加了回执相关头,缺少
mail()函数要求的必填基础头(比如合法的From头),多数邮件服务商会判定头字段不合规,直接忽略你设置的回执相关字段。
二、修复后的可运行代码
$from = "sender@gmail.com"; // 先补全必填基础头,避免回执头被服务商拦截 $email_header = "From: $from\r\n"; $email_header .= "Reply-To: $from\r\n"; // 回执相关头放在基础头之后 $email_header .= "X-Confirm-Reading-To: $from\r\n"; $email_header .= "Return-Receipt-To: $from\r\n"; $email_header .= "Disposition-Notification-To: $from\r\n"; // 可选添加MIME头提升跨服务商兼容性 $email_header .= "MIME-Version: 1.0\r\n"; $email_header .= "Content-type: text/plain; charset=utf-8\r\n"; $sending_mail = mail("receiver@gmail.com","test subject","test message",$email_header);
三、额外注意事项
- 如果发往Gmail邮箱,需要发件邮箱提前配置好SPF、DKIM校验,否则会被Gmail判定为垃圾邮件,不会给收件人弹出回执确认提示,自然收不到返回的通知。
- 即使代码完全符合规范,也无法保证100%拿到回执,最终是否返回完全由收件人和对方服务商决定。
内容的提问来源于stack exchange,提问作者lwd
相关产品推荐
相关产品推荐

