【问题标题】:Postfix / PHP Mail() sends email as same email address, ignores header $fromPostfix / PHP Mail() 以相同的电子邮件地址发送电子邮件,忽略标头 $from
【发布时间】:2013-03-17 13:11:14
【问题描述】:

我们最近升级了我们的网络服务器,我们遇到的第一个问题是发送到同一个域时出现问题,因为该网站托管在与公司交换服务器不同的服务器上。无论如何,我修复了这是一些简单的配置更改并禁用域的邮件服务。

无论如何,这不起作用,但当我在网站上测试一些 PHP 邮件表单时,我没有注意到它们都作为我的电子邮件地址发送给客户。

这是 PHP(我认为这不是问题)

<?php
    ini_set("sendmail_from", "noreply@******.com"); 

    $name       = $_POST['name'];
    $email      = $_POST['email'];
    $phone      = $_POST['phone'];
    $comments   = $_POST['comments'];
    $ip=$_SERVER['REMOTE_ADDR'];

    $recipient  = '*****@******.com';
    $subject    = "Comments submitted from the Contact Us form on www.wavesfm.com from $name" ;

    $message   = "This is an email submitted from the Contact Us form on the website www.*****.com containing details from $name \n";
    $message  .= "    \n";
    $message  .= "Name: $name \n";
    $message  .= "Email: $email \n";
    $message  .= "Phone Number: $phone \n";
    $message  .= "Comments: $comments \n\n\n";
    $message  .= "IP Address: $ip ";

    $headers   = "From: noreply@********.com \n";
    $headers  .= "Reply-To: $email";

    mail($recipient,$subject,$message,$headers);
    header( 'Location: http://www.*****.com/thanks.php' ) ; 
?>

任何人都可以看到该代码有任何问题吗?我尝试将 -fnoreply@**.com 添加为发送参数,但它不会更改我自己的电子邮件地址,使其不再显示为发件人。

我不认为这是一个 PHP 问题,它看起来更像是一个 Postfix 问题,但真正困扰我的是我的未在任何地方使用的电子邮件地址如何显示为发件人。

以前有人有过这方面的经验吗?和两周前一样,我根本没有使用过 Postfix,所以它对我来说相当新。

Web 服务器:Cent 操作系统,Plesk 11.0.9

邮件服务器:MS Exchange 邮件服务器/使用 ORF

其中一封电子邮件的后缀日志

3 月 27 日 13:48:41 专用后缀/拾取 [12199]: 652EFA106C5: uid=48 from= 3 月 27 日 13:48:41 专用后缀/清理 [14376]: 652EFA106C5: message-id= 3 月 27 日 13:48:41 专用 postfix/qmgr[12198]: 652EFA106C5: from=, size=726, nrcpt=1 (queue active) 3 月 27 日 13:48:41 专用 postfix/smtp[14378]:mail.mydomain.com[82.888.888.51]:25 的证书验证失败:不受信任的颁发者 /CN=clientdomain-WAV01-CA 3 月 27 日 13:48:42 专用 postfix/smtp[14378]: 652EFA106C5: to=, relay=mail.client_website.com[82.888.888.51]:25, delay=0.89, delays=0.04/0.01/0.36/0.48, dsn =2.6.0,状态=已发送(250 2.6.0 [InternalId=11846] 排队等待投递的邮件) 3 月 27 日 13:48:42 专用后缀/qmgr[12198]: 652EFA106C5: 已移除

【问题讨论】:

    标签: php email header postfix-mta


    【解决方案1】:

    以下代码可能存在一些字符串连接问题:

    $headers = "From: noreply@********.com \n";
    

    试试

    $headers = "From: noreply@********.com \r\n";
    

    我推荐使用广泛使用的 phpmailer 类来发送电子邮件: https://github.com/Synchro/PHPMailer

    【讨论】:

    • +1 用于指出正确的行拆分顺序。在这里定义:ietf.org/rfc/rfc2821.txt
    • +1 推荐 phpMailer。我真的不明白为什么这么多人继续使用 PHP 可怕的内置 mail() 函数,而像 phpMailer 这样的替代品存在并且让生活变得如此轻松。
    • 这并没有改变任何东西,我应该提到的一件重要的事情是,它不仅作为我的电子邮件出现的“发件人”字段,而且还有回复,这很奇怪。但也不知道它从哪里得到我的电子邮件地址,因为我没有设置网络服务器我以 root 身份登录并且我的电子邮件没有输入到服务器中的任何地方它就像它以某种方式记住它而没有我告诉服务器我电子邮件我完全被难住了。我们还没有实现 PHP 邮件类,因为网站很古老而且他们不想为工作付费。
    • 我以前也用过mail(),当我发现phpmailer一见钟情。解决上述所有问题。
    • 奇怪的后缀日志我的电子邮件在那里,所以它肯定是从某个地方得到的。
    【解决方案2】:

    php.ini sendmail_from 指令仅适用于 windows 框

    sendmail_from 字符串 在邮件中应该使用哪个“发件人:”邮件地址 在 Windows 下从 PHP 发送。该指令还设置 “返回路径:”标题。

    我认为这不是代码问题。您在 Linux 机器上从哪个用户运行 webserver+php 环境?如果您以自己的身份运行它,那么它可能会使用您的电子邮件地址提交到 postfix。

    如果您使用的是 postfix,请不要忘记跟踪 /var/log/maillog,这可以告诉您很多信息并帮助您找到问题的根源。

    sudo tail -f /var/log/maillog

    您可以尝试使用Sendgrid 注册一个免费帐户,并结合 PHPMailer、Zend Mailer 或 Symfony Mailer 库使用它来发送电子邮件,看看您是否遇到同样的问题。

    【讨论】:

      猜你喜欢
      • 2011-11-18
      • 2021-01-12
      • 2016-04-06
      • 2014-07-20
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多