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

如何通过LAMPP、PHP及Sendmail/Postfix实现Gmail跨账户发邮件?

我来帮你搞定在LAMPP环境下用PHP结合Sendmail或者Postfix通过Gmail发送邮件的问题,你Windows下的代码思路没问题,Linux下主要是配置环节需要调整,一步步来:

一、Gmail账户必须先做的前置配置

现在Google已经不允许用普通密码给第三方客户端授权了,所以得先搞定这个:

  • 打开你的Gmail账户安全设置,先开启两步验证(没开的话必须先开,不然没法生成应用专用密码)
  • 开启后,找到「应用专用密码」选项,创建一个专门用于邮件发送的密码——记住这个密码,后面配置要用,别搞丢了
二、用Sendmail配置的详细步骤

LAMPP自带Sendmail,直接改配置就行:

  1. 找到Sendmail的配置文件,一般在/opt/lampp/etc/sendmail.ini,用编辑器打开:
    sudo nano /opt/lampp/etc/sendmail.ini
    
  2. 找到[sendmail]段落,替换成下面的配置(把占位符换成你的信息):
    [sendmail]
    smtp_server=smtp.gmail.com
    smtp_port=587
    smtp_ssl=tls
    auth_username=synewavecomplaints@gmail.com  # 你的发件Gmail账户
    auth_password=刚才生成的应用专用密码
    force_sender=synewavecomplaints@gmail.com
    
  3. 保存退出后,重启LAMPP的Apache服务让配置生效:
    sudo /opt/lampp/lampp restart apache
    
三、用Postfix配置的替代方案(更稳定)

如果觉得Sendmail不够顺手,Postfix在Linux环境下是更常用的邮件服务,配置起来也不难:

  1. 先安装Postfix(如果LAMPP没自带):
    sudo apt update && sudo apt install postfix
    
    安装过程中选择「Internet Site」,邮件域名随便填个比如localhost就行
  2. 编辑Postfix的主配置文件/etc/postfix/main.cf:
    sudo nano /etc/postfix/main.cf
    
  3. 找到对应的配置项,修改或添加以下内容:
    relayhost = [smtp.gmail.com]:587
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    smtp_sasl_security_options = noanonymous
    smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
    smtp_use_tls = yes
    
  4. 创建Postfix的认证文件sasl_passwd:
    sudo nano /etc/postfix/sasl_passwd
    
    写入你的Gmail账户信息:
    [smtp.gmail.com]:587 synewavecomplaints@gmail.com:刚才生成的应用专用密码
    
  5. 生成Postfix需要的哈希数据库文件,同时设置安全权限:
    sudo postmap /etc/postfix/sasl_passwd
    sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
    
  6. 重启Postfix服务:
    sudo systemctl restart postfix
    
  7. 最后修改PHP的php.ini,让它用Postfix的sendmail:
    sudo nano /opt/lampp/etc/php.ini
    
    找到sendmail_path,改成:
    sendmail_path = "/usr/sbin/sendmail -t -i"
    
    重启Apache生效。
四、你的PHP代码可以再优化下

原有代码功能没问题,但可以加个错误处理和转义,避免空数据或者注入问题:

<?php
// 先验证表单必填项
if(empty($_POST['email']) || empty($_POST['fullName']) || empty($_POST['subject']) || empty($_POST['mainText'])) {
    die("请填写完整的投诉信息");
}

$to = "synewaveltd@gmail.com";
$fromEmail = "synewavecomplaints@gmail.com";
$replyTo = $_POST['email'];
// 转义特殊字符,防止XSS或邮件格式混乱
$fullName = htmlspecialchars($_POST['fullName']);
$subject = htmlspecialchars($_POST['subject']);
$mainText = htmlspecialchars($_POST['mainText']);

// 构建邮件内容
$fullText = "Complaint from : {$replyTo}\r\n"
          . "Name : {$fullName}\r\n"
          . "Message :\r\n{$mainText}\r\n";

// 构建headers,加上编码声明避免乱码
$headers = "From: {$fromEmail}\r\n"
         . "Reply-To: {$replyTo}\r\n"
         . "X-Mailer: PHP/" . phpversion() . "\r\n"
         . "Content-Type: text/plain; charset=utf-8\r\n";

// 发送邮件并反馈结果
if(mail($to, $subject, $fullText, $headers)) {
    echo "投诉邮件已发送成功!";
} else {
    echo "邮件发送失败,请检查配置或查看Apache错误日志";
}
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:12:53