jQuery Ajax提交表单发邮件时内容变为附件而非正文该如何解决
你的邮件正文被当成附件发送的核心原因是PHP代码中Content-Type头的语法书写错误,导致邮件客户端无法正确识别正文格式,按下面的步骤修改即可解决:
1. 修复Content-Type头的语法错误
原代码里text/html和charset之间的分隔符错误使用了冒号,应该改为分号,同时遵循邮件MIME协议标准,头部换行符统一使用\r\n:
// 错误写法 $headers .= "Content-type: text/html: charset=UTF-8\n"; // 替换为正确写法 $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
2. 修正所有邮件头部的换行符
邮件协议要求头部行之间的分隔符为\r\n,仅用\n会导致部分邮箱客户端解析异常,将所有头部的\n替换为\r\n:
$headers = "MIME-Version: 1.1\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; $headers .= "From: mexample@example.com\r\n"; $headers .= "Return-Path: example@example.com\r\n"; $headers .= "Reply-To: ".$email."\r\n";
3. 移除冗余代码
你在给$nome、$email、$telefone赋值时已经调用过strip_tags过滤特殊标签,拼接$body时不需要重复调用,直接使用变量即可:
$body = "<html> <head> <title> Formulario </title> </head> <body>". "<p> Nome: ".$nome."</p>". "<p> Email: ".$email."</p>". "<p> Telefone: ".$telefone."</p>". "</body> </html>";
4. (可选优化)修正jQuery传参格式
AJAX请求的data参数不需要额外包裹括号,直接传对象即可,避免低版本jQuery解析异常:
$("#enviar").click(function(){ $.ajax({ dataType:'html', url:"./scripts/email.php", type:"POST", data: { nome:$("input[name='name']").val(), email:$("input[name='email']").val(), telefone:$("input[name='phone']").val() }, beforeSend: function(data){ }, success:function(data){ alert("Dados Enviados"); }, complete: function(data){} }); });
修改完成后重新测试,表单内容就会正常显示在邮件正文中,不会再被识别为附件。
内容的提问来源于stack exchange,提问作者Pedro Mota
相关产品推荐
相关产品推荐

