PHP mail函数发送HTML邮件时客户端定期插入空格问题求助
PHP mail函数发送HTML邮件时客户端定期插入空格的原因解析
这个现象的核心原因是SMTP协议的历史行长度限制:
- 早期SMTP规范(RFC 821)强制要求邮件内容的每行长度不能超过1000字符(包含行尾的CRLF换行符)。虽然后续的RFC标准放宽了这一限制,但大量邮件传输代理(MTA)和客户端为了兼容旧系统,依然保留了自动拆分超长行的逻辑。
- PHP的
mail()函数本身不会对传入的HTML内容做行长度处理,当你发送未分割的长HTML文本时,MTA会在接近1000字符的位置插入空格+换行来拆分长行。部分客户端(比如Outlook、Apple Mail)在渲染时会忽略换行但保留空格,就造成了你看到的每约998字符出现一个空格的情况——预留的2个字符就是行尾的CRLF。 - 这种拆分如果落在URL这类连续字符中间,自然会破坏链接的有效性,这也是你遇到不便的直接原因。
你用HTML格式填充避开URL区域的临时方法是合理的,本质是通过在HTML标签的自然断点处拆分内容,让MTA的自动拆分不会命中URL的连续字符段。
内容的提问来源于stack exchange,提问作者Charles Looker
相关产品推荐
相关产品推荐

