【问题标题】:Understanding sendmail config了解 sendmail 配置
【发布时间】:2011-07-09 14:32:56
【问题描述】:

我正在尝试让 php 在 Ubuntu linux 机器上通过“mail() 命令发送邮件。邮件似乎正在发送,然后被发送邮件丢弃 - 我不知道该做什么去做吧。

php mail() 函数返回 true。邮件未送达。我已经设置了 evolutoin 以在 localhost 上提供 vi SMTP,并向同一用户发送了一封电子邮件 - 它已交付。

/var/log/mail.log 文件包含以下条目。

Jul  9 15:15:34 anake postfix/pickup[1292]: 02879340040: uid=33 from=<www-data>
Jul  9 15:15:34 anake postfix/cleanup[2079]: 02879340040: message-id=<20110709141534.02879340040@anake>
Jul  9 15:15:34 anake postfix/qmgr[1293]: 02879340040: from=<www-data@anake.ianhobXXson.co.uk>, size=411, nrcpt=1 (queue active)
Jul  9 15:15:36 anake postfix/smtp[2082]: 02879340040: to=<hobXXson42@gmail.com>, relay=smtp.ntlworld.com[81.103.221.11]:25, delay=2.3, delays=0.1/0.02/2.1/0.13, dsn=5.0.0, status=bounced (host smtp.ntlworld.com[81.103.221.11] $
Jul  9 15:15:36 anake postfix/cleanup[2079]: 5370B340042: message-id=<20110709141536.5370B340042@anake>
Jul  9 15:15:36 anake postfix/bounce[2083]: 02879340040: sender non-delivery notification: 5370B340042
Jul  9 15:15:36 anake postfix/qmgr[1293]: 5370B340042: from=<>, size=2228, nrcpt=1 (queue active)
Jul  9 15:15:36 anake postfix/qmgr[1293]: 02879340040: removed
Jul  9 15:15:36 anake postfix/local[2084]: 5370B340042: to=<www-data@anake.ianhobXXson.co.uk>, relay=local, delay=0.03, delays=0/0.02/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
Jul  9 15:15:36 anake postfix/qmgr[1293]: 5370B340042: removed

我不明白它从哪里获得“发件人”地址。实际执行的代码是这样的:-

<?php 
    $to      = 'hobXXson42@gmail.com';
    $subject = 'Test email';  
    $message = 'hello - this has gone round the loop';
    $headers = 'From: ian@ianhobXXson.co.uk' . "\n" .
              'Reply-To: ian@ianhobXXson.co.uk' . "\n" .
              'X-Mailer: PHP/'. phpversion()."\r\n";
    if (mail($to, $subject, $message, $headers)) {
        echo "Message sent OK";
    } else {
        echo "message send failed";
    }

?>

谁能发现哪里出了问题,我能做些什么?电子邮件地址以一种相当明显的方式略有变化。 伊恩

【问题讨论】:

    标签: php email ubuntu sendmail


    【解决方案1】:

    这里的“发件人”是信封发件人,即最终将出现在 Return-Path 标头中的地址。此标头不能以与其他标头相同的方式更改,因为这实际上不是邮件的一部分,而是信封的一部分。 Return-Path 是退回的地址,除其他外。

    您可以使用mail() 函数的第五个参数来更改信封发件人。 Postfix(您的服务器正在运行)、Sendmail 和 Exim 都可以使用 -f 标志更改信封发件人:

    ...
    $extra_parameters = '-fian@ianhobXXson.co.uk';
    mail($to, $subject, $message, $headers, $extra_parameters);
    

    【讨论】:

    • 感谢 Emil - 这很有魅力。我实际上最终将 php.ini 中的 sendmail_path 行设置为“sendmail_path = /usr/sbin/sendmail -t -i -r ian@ianhobXXson.co.uk”(它做同样的事情)。再次感谢。
    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2022-12-18
    • 2014-09-04
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多