PHP邮件发送问题:邮件正文中的邮箱地址格式异常
PHP邮件发送问题:邮件正文中的邮箱地址格式异常
嘿,我之前也碰到过类似的问题!看起来你遇到的是邮件客户端自动解析邮箱地址时的误判问题——像Outlook、Gmail这类客户端会自动识别文本里的邮箱并转成可点击链接,但有时候它们的解析逻辑会抽风,把邮箱里的字符误当成分隔符,导致地址被拆得乱七八糟。
先看你代码里输出邮箱的这一行:
$message .= '<p style="text-align:left; font-family:Arial, Helvetica, sans-serif; font-size:17px; font-weight:normal;">'. $_SESSION["sp_email"] .'</p>';
你直接把Session里的邮箱纯文本输出到HTML邮件里,没有做任何处理,这就给了邮件客户端乱解析的机会。给你几个靠谱的解决办法:
方法1:明确用mailto链接包裹邮箱
把邮箱放到<a>标签里,明确告诉客户端这是个邮件链接,它就不会乱拆了,同时记得用htmlspecialchars转义,防止邮箱里的特殊字符破坏HTML结构:
$email = htmlspecialchars($_SESSION["sp_email"]); $message .= '<p style="text-align:left; font-family:Arial, Helvetica, sans-serif; font-size:17px; font-weight:normal;"><a href="mailto:'. $email .'">'. $email .'</a></p>';
方法2:强制不让邮箱换行/拆分
如果你不想把邮箱做成链接,就用CSS的white-space: nowrap或者<nobr>标签强制让邮箱保持一行,避免被拆分:
$email = htmlspecialchars($_SESSION["sp_email"]); // 用CSS样式的写法 $message .= '<p style="text-align:left; font-family:Arial, Helvetica, sans-serif; font-size:17px; font-weight:normal;"><span style="white-space: nowrap;">'. $email .'</span></p>'; // 或者用<nobr>标签(兼容性也不错) $message .= '<p style="text-align:left; font-family:Arial, Helvetica, sans-serif; font-size:17px; font-weight:normal;"><nobr>'. $email .'</nobr></p>';
额外检查点
别忘了先确认$_SESSION["sp_email"]里的内容本身是正确的!可以在发送邮件前加一行调试代码:
var_dump($_SESSION["sp_email"]); exit;
看看输出的邮箱有没有多余的空格或者奇怪字符——万一问题出在Session存入的时候呢?
另外,HTML邮件里所有动态输出的内容都建议用htmlspecialchars转义,这不仅能避免这类格式问题,还能防止XSS安全风险,算是PHP开发的最佳实践啦。
内容来源于stack exchange
相关产品推荐
相关产品推荐

