You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在搭载Plesk SMTP的VPS上配置PHPMailer的技术求助

修正Plesk VPS上PHPMailer配置的关键问题

我帮你梳理了你代码里的几个核心问题,并且给出了可直接复用的修正版本:

代码里的主要问题

  • 重复实例化PHPMailer:你先创建了支持异常捕获的new PHPMailer(true)实例,随后又用new PHPMailer覆盖了它,浪费了异常处理的能力
  • 端口与加密方式不匹配:25端口通常用于未加密连接或STARTTLS升级,直接指定SMTPSecure = 'tls'会导致连接异常,建议用587端口配合TLS
  • 未完成的SMTPOptions配置:verify_depth没有赋值,而且针对Plesk本地SMTP,若使用自签证书可能需要调整SSL验证规则
  • 缺少SMTP认证配置:Plesk的SMTP服务即使是本地连接,一般也要求验证发件人账号密码
  • 缺失邮件核心内容配置:没有设置发件人、收件人、主题等必要信息

修正后的完整可运行代码

<?php
// 若通过Composer安装,直接替换为 require 'vendor/autoload.php';
require 'path_to_phpmailer/src/Exception.php';
require 'path_to_phpmailer/src/PHPMailer.php';
require 'path_to_phpmailer/src/SMTP.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

try {
    // 仅实例化一次,启用异常处理
    $mail = new PHPMailer(true);

    // 服务器配置
    $mail->isSMTP();
    $mail->SMTPDebug = 2; // 调试模式,上线后改为0关闭日志
    $mail->CharSet = 'UTF-8';
    $mail->Host = 'localhost'; // Plesk本地SMTP主机
    $mail->Port = 587; // TLS标准端口,替代25端口
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // 使用常量更可靠
    $mail->SMTPAuth = true; // 必须启用SMTP认证
    $mail->Username = 'your-plesk-email@your-domain.com'; // Plesk中创建的邮箱账号
    $mail->Password = 'your-email-password'; // 对应邮箱的密码

    // SSL验证配置(适配Plesk自签证书场景)
    $mail->SMTPOptions = [
        'ssl' => [
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        ]
    ];

    // 收件人配置
    $mail->setFrom('your-plesk-email@your-domain.com', 'Your Display Name');
    $mail->addAddress('recipient@example.com', 'Recipient Name'); // 添加目标收件人
    // $mail->addReplyTo('reply@your-domain.com', 'Reply Address'); // 可选:设置回复地址

    // 邮件内容
    $mail->isHTML(true); // 启用HTML格式邮件
    $mail->Subject = 'Test Email from Plesk SMTP';
    $mail->Body    = '<h1>Success!</h1><p>This is a test email sent via PHPMailer with Plesk local SMTP.</p>';
    $mail->AltBody = 'Success! This is a test email sent via PHPMailer with Plesk local SMTP.'; // 纯文本备用内容

    $mail->send();
    echo '邮件发送成功!';
} catch (Exception $e) {
    echo "邮件发送失败. 错误信息: {$mail->ErrorInfo}";
}
?>

关键配置说明

  • SMTP认证:Plesk本地SMTP默认要求身份验证,必须填写你在Plesk面板中创建的有效邮箱账号和密码
  • 端口与加密:587是STARTTLS的标准安全端口,避免25端口被服务器防火墙拦截;若你的Plesk配置了SSL端口465,可将Port改为465,SMTPSecure改为PHPMailer::ENCRYPTION_SMTPS
  • SSL验证:如果Plesk使用自签SSL证书,本地连接时会触发验证错误,因此关闭verify_peer等选项;若使用正规CA签发的证书,可将verify_peer设为true
  • 调试模式:SMTPDebug = 2会输出详细的SMTP交互日志,方便排查连接或认证问题,上线前务必改为0关闭调试输出

额外排查建议

  1. 确认PHPMailer路径正确:若通过Composer安装,直接使用require 'vendor/autoload.php';更简便
  2. 检查Plesk服务状态:确保本地SMTP服务(如Postfix/Exim)正在运行,且允许本地PHP进程连接
  3. 防火墙规则:确认服务器防火墙未拦截587或465端口的出站流量
  4. 邮箱权限:检查Plesk中的邮箱账号是否正常启用,未被限制发送邮件

内容的提问来源于stack exchange,提问作者Tim von Känel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:48:47