如何用PHPMailer通过Webmail SMTP发邮件?原功能失效求助
使用PHPMailer通过SMTP发送邮件及故障排查指南
一、完善PHPMailer发送代码
你当前的代码缺少收件人配置、邮件主题与内容等核心部分,补充后完整可运行代码如下:
require 'mail/PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer; // 开启调试模式(生产环境建议改回0),便于获取详细交互日志 $mail->SMTPDebug = 2; $mail->isSMTP(); $mail->Host = $smtp_host; $mail->SMTPAuth = true; $mail->Username = $smtp_username; $mail->Password = $smtp_password; $mail->SMTPSecure = 'ssl'; $mail->Port = $smtp_port; $mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) ); $mail->setFrom($smtp_username, $sender_name); // 添加收件人,多次调用可添加多个 $mail->addAddress('recipient@example.com', '收件人姓名'); // 可选:添加抄送、密送 // $mail->addCC('cc@example.com'); // $mail->addBCC('bcc@example.com'); $mail->WordWrap = 50; $mail->isHTML(true); // 邮件主题 $mail->Subject = '测试邮件主题'; // HTML格式内容 $mail->Body = '<h1>测试邮件HTML内容</h1><p>支持各类HTML标签</p>'; // 纯文本备用内容(适配不支持HTML的邮箱) $mail->AltBody = '测试邮件纯文本内容'; // 执行发送并反馈结果 if(!$mail->send()) { echo '发送失败: ' . $mail->ErrorInfo; } else { echo '发送成功'; }
二、故障排查步骤
- 开启调试日志:将
$mail->SMTPDebug设为2,查看SMTP交互的完整日志,日志会直接提示错误原因(如认证失败、连接超时、端口不匹配等)。 - 验证SMTP配置:确认
$smtp_host、$smtp_username、$smtp_password、$smtp_port的准确性,常见问题包括密码过期、服务器地址变更、SSL/TLS端口混淆(SSL对应465,TLS对应587)。 - 检查网络连通性:在服务器上执行
telnet $smtp_host $smtp_port测试端口连通性,若无法连接,需确认主机商是否封禁了邮件端口(25/465/587),或目标SMTP服务器是否有IP白名单限制。 - 排查SSL证书问题:当前代码禁用了证书验证,仅作临时 workaround,长期建议更新服务器CA证书,或确认SMTP服务器证书的有效性。
- 检查邮件合规性:避免使用敏感关键词,确保发件人地址与SMTP认证用户名一致,部分服务器会强制验证发件人身份匹配。
- 确认Webmail服务状态:登录Webmail后台,检查账号是否被封禁、邮件配额是否已满、SMTP服务是否启用,也可直接在Webmail内手动发送测试邮件,确认服务本身是否正常。
内容的提问来源于stack exchange,提问作者Oraclefx
相关产品推荐
相关产品推荐

