PHP PEAR send_mail无法设置发件人姓名和电子邮件

3
我正在尝试使用这个脚本发送电子邮件。
$to = 'example@example.com';
$headers['To'] = $to;
$headers['From'] = '"My Name" <examlpe@example.com>';
$headers['Return-Path'] = 'examlpe@example.com';
$headers['Subject'] = 'Subject';

$auth = array('host' => MAIL_HOST, 'auth' => true, 'username' => MAIL_USER, 'password' => MAIL_PASS);
$smtp = Mail::factory('smtp', $auth);
$mail = $smtp->send($to, $headers, $message);

if (PEAR::isError($mail))
    echo('<p>PEAR mail: '.$mail->getMessage().'</p>');
else
    echo('<p>PEAR mail: Message successfully sent!</p>');

但是我收到了以下信息:

Failed to set sender: "My Name" <example@example.com> [SMTP: Invalid response code received from server (code: 501, response: <"My Name" <example@example.com>>: "@" or "." expected after ""My Name"")]

当我将表单字段设置为以下内容时:
$headers['From'] = 'examlpe@example.com';

它能正常工作并且我收到了邮件。

如何发送带有发件人名称的电子邮件?


你尝试过不加引号吗?My Name <example@example.com>也是一个有效的邮箱。 - Alexander
2个回答

5

Return-Path和Reply-To并不相同。

Return-Path:如果您想覆盖电子邮件的信封发件人,请设置Return-Path标头,该值将代替From标头的值(来自PEAR网站)。您无法为Return-Path设置名称,只能设置电子邮件地址。

Reply-To:使收件人回复此地址。您可以设置名称和电子邮件地址。

因此,用Reply-To替换Return-Path即可。


1
为什么需要在发件人中包含电子邮件地址呢?建议您应该添加“回复地址(Reply-To)”头部并在那里提供电子邮件地址,在发件人中只指定姓名即可。

我需要在发件人中包含电子邮件地址,因为没有它,邮件将无法发送。但我的错误是我认为Return-Path是Reply-To,这导致了一个错误。当我用Reply-To替换Return-Path时,它就可以工作了。 - Marm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接