GoDaddy共享主机中PHPMailer发送HTML邮件显示源码求助
解决GoDaddy共享主机PHPMailer发送HTML邮件显示源码的问题
问题概述
在GoDaddy共享主机环境中使用PHPMailer发送HTML格式邮件,邮件可正常送达,但收件端显示的是HTML源码而非渲染后的页面。
核心问题及修复方案
1. 调整isHTML()的调用顺序
PHPMailer的isHTML(true)方法负责将邮件的Content-Type标记为text/html,必须在设置$mail->Body之前调用。原代码中该方法在赋值Body之后执行,导致邮件头未被正确标记为HTML类型,收件端会将内容当作纯文本解析。
2. 移除WordWrap设置
$mail->WordWrap = 50会强制长文本每50个字符换行,这会破坏HTML标签的完整性(比如标签被截断拆分),直接导致HTML无法正常渲染,建议移除该配置。
3. 修正GoDaddy SMTP配置
GoDaddy共享主机对本地localhost邮件服务的支持有限,无法保证HTML邮件头的正确处理,建议改用官方指定的SMTP服务器:
- Host:
smtpout.secureserver.net - Port: 587(搭配TLS加密)或465(搭配SSL加密)
- 开启SMTPAuth:
$mail->SMTPAuth = true,并填入你的GoDaddy邮箱账号和密码 - SMTPSecure对应设置为
'tls'(587端口)或'ssl'(465端口)
4. 检查HTML模板完整性
确认otpmailcontent.txt中的HTML代码格式正确:
- 所有标签闭合完整
- 无语法错误
- 文件编码为UTF-8,避免乱码或解析异常
修改后的示例代码
$template = file_get_contents('otpmailcontent.txt', FILE_USE_INCLUDE_PATH); $template = str_replace("###fullname###", $fullname, $template); $template = str_replace("###otpcode###", $otp, $template); $email = $toemail; $mail = new PHPMailer(); $mail->SMTPDebug = 0; // 改用GoDaddy官方SMTP配置 $mail->SMTPAuth = true; $mail->SMTPSecure = 'tls'; $mail->Host = 'smtpout.secureserver.net'; $mail->Port = 587; $mail->Username = 'your-godaddy-email@domainname.com'; // 替换为你的GoDaddy邮箱账号 $mail->Password = 'your-email-password'; // 替换为你的邮箱密码 $mail->setFrom('Sales@domainname.com', 'Signup OTP'); $mail->addReplyTo('donotreply@domainname.com', 'Signup OTP'); $mail->addAddress($email); // 先设置HTML格式,再赋值邮件内容 $mail->isHTML(true); $mail->Subject = 'Signup-OTP'; $mail->Body = $template; // 设置纯文本备用内容,适配不支持HTML的邮件客户端 $mail->AltBody = "您好{$fullname},您的注册验证码是:{$otp}"; if(!$mail->send()) { echo 'Mailer Error: ' . $mail->ErrorInfo; echo 'Email Has not Sent'; exit; } else { echo "email sent"; }
内容的提问来源于stack exchange,提问作者MARTIN ROBERT
相关产品推荐
相关产品推荐

