如何使用phpmailer更改信封寄件人地址?

6
使用PHP的mail()函数,我可以编写邮件。
mail('to@example.com','subject!','body','From: from@example.com','-f from@example.com');

但是我该如何使用phpmailer实现相同的功能呢?
5个回答

21

Theolodis 回答中相关的那一行是:

$mail->SetFrom('name@yourdomain.com', 'First Last');

不需要使用AddReplyTo(),这是完全不同的东西。

您只需要使用SetFrom()来设置您的发件人地址(和可选的名称)。如果您查看代码SetFrom()接受三个参数:

/**
 * Set the From and FromName properties
 * @param string $address
 * @param string $name
 * @param boolean $auto Whether to also set the Sender address, defaults to true
 * @throws phpmailerException
 * @return boolean
 */
public function SetFrom($address, $name = '', $auto = true) {
....

第三个参数默认为true,因此信封发件人地址将设置为与发件人相同的地址。

如果您想将信封发件人地址和寄件人地址设置为不同的地址,这时就有趣了。以下是更改信封发件人的方法:修改$sender属性,您需要像这样设置您的PHPMailer实例:

  $pMail->Sender='admin@yourdomain.com';
  $pMail->SetFrom('name@yourdomain.com', 'First Last', FALSE);

11

这个示例展示了如何操作。

相关的行:

$mail->SetFrom('name@yourdomain.com', 'First Last');
$mail->AddReplyTo('name@yourdomain.com', 'First Last');

正如Hannes Morgenstern所建议的那样,答案是:

$pMail->Sender='admin@yourdomain.com';
$pMail->SetFrom('name@yourdomain.com', 'First Last', FALSE);

我不认为SetFrom()AddReplyTo()解决了OP关于信封发件人的问题。请参考https://dev59.com/32zXa4cB1Zd3GeqPQy6J#18053334底部的`Sender`变量。 - SuprMan

2
-f标志设置为$email->Sender。
这是信封发件人,允许电子邮件服务器在接收其余电子邮件数据之前评估发件人的电子邮件地址。
SetFrom - 这是最终用户将看到消息来自哪个电子邮件地址。
AddReplyTo - 这是如果他们回复邮件将弹出哪个电子邮件地址。
发件人需要干净以通过垃圾邮件过滤器。
SetFrom需要干净以通过垃圾邮件过滤器。
AddReplyTo并不重要。这使服务能够代表使用非由服务管理的电子邮件地址的用户发送电子邮件。

这是唯一正确的答案。其他答案设置了“From”头...而不是根据问题在邮件信封中设置实际发件人。话虽如此,我认为OP实际上想要更改“From”头。 - hiburn8

0

对我起作用的是(晦涩)使用

$mail->SetFrom('name@yourdomain.com', 'Rupert Bear');

应该使用本地主机而不是直接访问SMTP服务器,例如:

$email->Host='localhost'; // SMTP server this way you get from name (don't know why)

现在Outlook中收到来自“Rupert Bear”[name@yourdomain.com]的邮件


0
正如Hannes Morgenstern所建议的那样,答案是:
$pMail->Sender='admin@yourdomain.com';
$pMail->SetFrom('name@yourdomain.com', 'First Last', FALSE);

顺序很重要。首先

$pMail->Sender='admin@yourdomain.com';

第二个

$pMail->SetFrom('name@yourdomain.com', 'First Last', FALSE);

否则它将无法工作,因为发送方会被覆盖。

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