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

使用PHP mail函数时,如何修改邮件的Via选项?

如何修改PHP mail函数发送邮件的Via字段?

我尝试了多种基于PHP mail函数实现联系表单发送邮件的方法,虽然能成功收到邮件,但收到的邮件的Via选项显示异常(截图如下):
邮件显示异常截图

当前使用的代码如下:

if($response->success){
  header('Access-Control-Allow-Origin: *');
  header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE');
  header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With');
  // Always set content-type when sending HTML email
  $message = "<html>
  <head>
  <title> contact form</title>
  </head>
  <body>
  <p>Glc contact form</p>
  <table style='border: 1px solid;border-collapse: collapse;'>
  <tr style='border: 1px solid'>
  <th style='border: 1px solid'>Name</th>
  <t style='border: 1px solid'h>E-mail</th>
  <th style='border: 1px solid'>Phone</th>
  <th style='border: 1px solid'>Message</th>
  </tr>
  <tr style='border: 1px solid'>
  <td style='border: 1px solid'>$name</td>
  <td style='border: 1px solid'>$email</td>
  <td style='border: 1px solid'>$mobile</td>
  <td style='border: 1px solid'>$message</td>
  </tr>
  </table>
  </body>
  </html>
  ";
  $headers = "MIME-Version: 1.0" . "\n";
  $headers .= "Content-type:text/html;charset=UTF-8" . "\n";
  // More headers
  $headers .= 'From: <noreply@akiraplc.com>' . "\n";
  $headers .= 'Cc: nio@aapl.com,per@ak.com' . "\n";
 

  mail($to,$subject,$message,$headers);
}

解决方法

Via字段是邮件传输过程中由邮件服务器自动添加的,PHP原生mail()函数无法直接设置这个字段,但可以通过以下几种方式调整:

  • 修改PHP的sendmail配置
    如果服务器使用sendmail或兼容的邮件传输代理(MTA),可以修改php.ini中的sendmail_path参数,添加-f指定发件人身份,让MTA生成更规范的Via字段:

    sendmail_path = "/usr/sbin/sendmail -t -i -f noreply@akiraplc.com"
    

    修改后重启PHP服务生效。

  • 改用专业邮件库(推荐)
    原生mail()函数灵活性有限,建议使用PHPMailer或SwiftMailer这类专业库,通过SMTP方式发送邮件。SMTP发送时,Via字段由你配置的SMTP服务器决定,能有效避免异常显示,还能提升邮件送达率:

    require 'PHPMailer/PHPMailer.php';
    require 'PHPMailer/SMTP.php';
    
    $mail = new PHPMailer\PHPMailer\PHPMailer();
    $mail->isSMTP();
    $mail->Host = 'smtp.akiraplc.com'; // 你的SMTP服务器地址
    $mail->SMTPAuth = true;
    $mail->Username = 'noreply@akiraplc.com'; // SMTP账号
    $mail->Password = '你的SMTP密码'; // SMTP密码
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;
    
    $mail->setFrom('noreply@akiraplc.com', 'Akira PLC');
    $mail->addAddress($to);
    $mail->addCC('nio@aapl.com');
    $mail->addCC('per@ak.com');
    
    $mail->isHTML(true);
    $mail->Subject = $subject;
    $mail->Body = $message;
    
    $mail->send();
    
  • 调整服务器MTA配置
    如果你有权限管理服务器的MTA(如Postfix、Exim),可以直接修改MTA的配置文件,自定义邮件头生成规则来调整Via字段。比如Postfix可以修改main.cf中的相关参数,但这需要具备服务器管理能力。


内容的提问来源于stack exchange,提问作者Nino C Philip

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:40:25