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

PHP联系表单带认证SMTP函数使用及Hotmail收信问题求助

解决PHP联系表单无法向Hotmail发送邮件的问题:使用SMTP认证

嘿,我明白你现在的困扰——用PHP原生mail()函数发邮件到Gmail没问题,但Hotmail就是收不到,对吧?这其实是因为Hotmail(现在归属Outlook生态)的反垃圾邮件规则比Gmail严格很多,原生mail()是通过服务器本地的邮件服务发送的,没有经过官方SMTP认证,很容易被当成垃圾邮件直接拦截。

下面我给你改成带SMTP认证的版本,推荐用PHPMailer这个库——这是PHP领域处理邮件最成熟、最靠谱的工具,能完美解决这类邮件投递问题。

步骤1:准备PHPMailer

你有两种方式获取PHPMailer:

  • 如果你用Composer管理项目,直接运行命令:composer require phpmailer/phpmailer
  • 手动下载:去PHPMailer的官方仓库下载源码,把src文件夹里的三个核心文件(Exception.php、PHPMailer.php、SMTP.php)放到你的项目目录里。

步骤2:修改后的完整代码

<?php
// 引入PHPMailer相关文件(根据你的安装方式选一种)
// 方式1:Composer安装的话,直接引入自动加载文件
require 'vendor/autoload.php';

// 方式2:手动下载的话,引入三个核心文件
// require 'src/Exception.php';
// require 'src/PHPMailer.php';
// require 'src/SMTP.php';

// 导入PHPMailer的命名空间
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// 获取表单提交的用户数据
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];

// 构建邮件内容(纯文本格式)
$emailContent = "Name: $name \nEmail: $email \nPhone: $phone \nMessage: $message";

// 初始化PHPMailer实例
$mail = new PHPMailer(true);

try {
    // -------------------------- SMTP配置 --------------------------
    $mail->SMTPDebug = SMTP::DEBUG_OFF; // 关闭调试输出,上线前务必保持关闭
    $mail->isSMTP(); // 启用SMTP发送模式
    $mail->Host = 'smtp.office365.com'; // Outlook/Hotmail官方SMTP服务器
    $mail->SMTPAuth = true; // 开启SMTP认证(必须打开,否则无法投递)
    $mail->Username = 'your-sender-email@hotmail.com'; // 你的发件Hotmail邮箱(必须是真实存在的)
    $mail->Password = 'your-app-password-or-email-password'; // 邮箱密码:如果开启了两步验证,要用微软账户的「应用密码」
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // 加密方式:TLS
    $mail->Port = 587; // SMTP端口(对应TLS加密的标准端口)

    // -------------------------- 邮件收发人设置 --------------------------
    $mail->setFrom('your-sender-email@hotmail.com', '你的网站名称'); // 发件人用你的认证邮箱,可信度更高
    $mail->addAddress('abc@hotmail.com'); // 你的收件邮箱(就是原来的$to)
    $mail->addReplyTo($email, $name); // 设置回复邮箱为用户提交的邮箱,方便你直接回复用户

    // -------------------------- 邮件内容设置 --------------------------
    $mail->isHTML(false); // 这里用纯文本格式,也可以改成true发送HTML邮件
    $mail->Subject = 'Contact Form'; // 邮件主题
    $mail->Body = $emailContent; // 邮件正文

    // 发送邮件
    $mail->send();
    // 发送成功后的提示(保留你原来的前端提示)
    echo "<br><br><p style='color:#000'><b>Thank You $name</b></p><p style='color:#000'>We will be in touch as soon as possible.</p>";
    echo "<p style='color:#000'>Go to <a href='index.html'><b>Home Page</b></a></p>";
} catch (Exception $e) {
    // 发送失败时的错误提示
    echo "Error! Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
?>

关键注意事项

  1. 关于发件邮箱的密码:如果你的Hotmail账户开启了两步验证,直接用登录密码会失败,需要去微软账户后台创建一个「应用密码」(专门给第三方应用用的密码),用这个密码代替普通登录密码。
  2. 不要硬编码密码:上线部署时,建议把邮箱密码存在环境变量里,不要直接写在代码里,避免泄露。
  3. 发件人设置:尽量用你自己的认证邮箱作为发件人,不要直接用用户提交的邮箱——很多邮件服务商不允许伪造发件人,这样做能避免邮件被拦截。
  4. 调试模式:如果还是收不到,可以把SMTPDebug改成SMTP::DEBUG_SERVER,这样会输出详细的SMTP交互日志,方便排查问题。

内容的提问来源于stack exchange,提问作者Webhostwala

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:44:03