使用 PHP 邮件功能发送电子邮件时出现问题。提供完整跟踪信息

使用 PHP 邮件功能发送电子邮件时出现问题。提供完整跟踪信息

我有一个简单的脚本设置:

<?php
mail('[email protected]', 'Hello World', 'Testing a message');
?>

我无法从我的服务器向 AOL 帐户发送电子邮件。错误详细信息如下。GMail 允许我发送邮件...所以我猜 AOL 有点严格。

   Starting tcpick 0.2.1 at 2009-08-03 22:25 UTC
    Timeout for connections is 600
    tcpick: reading from tcp_dump.pcap
    1      SYN-SENT       67.23.28.65:49516 > 64.12.138.153:smtp
    1      SYN-RECEIVED   67.23.28.65:49516 > 64.12.138.153:smtp
    1      ESTABLISHED    67.23.28.65:49516 > 64.12.138.153:smtp
    220-rly-mg05.mx.aol.com ESMTP mail_relay_in-mg05.6; Mon, 03 Aug 2009 18:25:34 -0400
    220-America Online (AOL) and its affiliated companies do not
    220-     authorize the use of its proprietary computers and computer
    220-     networks to accept, transmit, or distribute unsolicited bulk
    220-     e-mail sent from the internet.  Effective immediately:  AOL 
    220-     may no longer accept connections from IP addresses which 
    220      have no reverse-DNS (PTR record) assigned.
    EHLO bandop.com
    250-rly-mg05.mx.aol.com fallsroadsunoco.com
    250 HELP
    MAIL FROM:<www-data@com>
    501 SYNTAX ERROR IN PARAMETERS OR ARGUMENTS
    RSET
    250 OK
    QUIT
    1      FIN-WAIT-1     67.23.28.65:49516 > 64.12.138.153:smtp
    2      SYN-SENT       67.23.28.65:45729 > 216.239.113.101:smtp
    1      FIN-WAIT-2     67.23.28.65:49516 > 64.12.138.153:smtp
    221 SERVICE CLOSING CHANNEL
    1      RESET          67.23.28.65:49516 > 64.12.138.153:smtp
    3      SYN-SENT       67.23.28.65:45729 > 216.239.113.101:smtp
    tcpick: done reading from tcp_dump.pcap

    20 packets captured
    3 tcp sessions detected

您知道如何才能正确显示 FROM 参数吗?在 PHP 邮件函数中设置 FROM 标头不起作用。

更新

这个小技巧是有效的,但是我更愿意在 PHP 之外解决这个问题。

mail('[email protected]', 'Hello World', 'Testing a message', null,'[email protected]');

我对邮件服务器非常陌生

答案1

使用 AOL 时,除非您填写表单列入白名单。要更改邮件的来源,请编辑 php.ini 文件中的 sendmail_path 参数。这在php mail() 文档在 additional_parameters 下。

例如:

sendmail_path = "/usr/sbin/sendmail -t -f [email protected]"

您也可以将参数传递给 mail() 函数:

<?php
mail('[email protected]', 'the subject', 'the message', null,
   '[email protected]');
?>

最后,您可能会发现其他更灵活的邮件包,例如梨子邮件包裹或邮件传输协议,您可以指定其他 smtp 服务器。

答案2

您想要更改信封发件人:地址,该地址与发件人:标题不同。请参阅此评论在 mail() 函数的文档中。

信封地址取决于您的 MTA 配置 - 在您的例子中,“www-data”是运行脚本的用户,“com”是机器主机名(的一部分?)。假设您使用的是 *nix,您可以尝试像这样覆盖信封地址:

mail('[email protected]', 'Hello World', 'Testing a message', null,'[email protected]');

在哪里[电子邮件保护]是您想要显示的信封发件人地址。

如果可行,并且您可以访问 php.ini 文件,则可以在那里设置信封发件人地址 - 请参阅 Kyle 的帖子。

您可能还想查看您的 MTA(sendmail、postfix)配置 - 看起来您的主机名设置有问题。更改 php-s 设置将修复 php 的问题,但如果系统上的其他程序(cron、logwatch)想要发送邮件,那么拥有一个正常工作的 MTA 会很有帮助。

在您的评论后进行编辑: 如果不知道您的邮件服务器的配置,就很难提出任何建议,但首先,请尝试以下步骤:

myhostname = mail.virtualhostname.com
mydomain = virtualhostname.com
myorigin = $mydomain
masquerade_domains = virtualhostname.com

答案3

尝试转义 at 符号。

mail('corgan1003\@aol.com', 'Hello World', 'Testing a message');

相关内容