【问题标题】:PHPMailer not sending with correct 'from' addressPHPMailer 未使用正确的“发件人”地址发送
【发布时间】:2014-11-18 16:03:58
【问题描述】:

我正在使用链接到我的 gmail 帐户的 PHPMailer。

我需要自动加载器,创建了一个处理发送邮件的函数,然后触发该函数进行测试。一切看起来像这样:

require "PHPMailer/PHPMailerAutoload.php";

function sendMail($to, $subject, $body, $from){

  //init PHPMailer
  $mail = new PHPMailer;
  $mail->isSMTP();
  $mail->SMTPAuth = true;
  $mail->SMTPSecure = "tls";
  $mail->Port = 587;
  $mail->isHTML(true);

  //connection settings
  $mail->Host = "smtp.gmail.com";
  $mail->Username = "xxx@xxx.com";
  $mail->Password = "xxxxxxxx";

  //addresses
  $mail->addAddress($to);
  $mail->setFrom($from);

  //create email
  $mail->Subject = $subject;
  $mail->Body = $body;

  //send email
  $mail->send();
}

//sendMail(to, subject, body, from)
sendMail("xxxx@xxxxx.com", "Test Subject", "Test body", "xxxxx@xxxxx.com");

这会将带有正确主题和正文的电子邮件发送到正确的位置,但它会忽略“发件人”地址,并且电子邮件始终表示它来自传递电子邮件的 gmail 帐户。反正有没有配置这个工作?

请注意,我显然在上面的代码中省略了正确的帐户详细信息和真实的往返地址。

【问题讨论】:

  • 我发誓我不是个混蛋但是,你真的需要phpMailer吗?我问这个是因为 PHP 有一个内置的 mail() 函数,它可以很好地工作 if 你不需要附件等等。它有局限性,如 phpmailers 文档中所述,但如果您不需要手提钻来杀死苍蝇,为什么要使用它呢? (我显然假设它是一只小苍蝇)
  • @MoshMage 我正在使用 Microsoft Azure 服务器。 PHP mail() 不起作用。这就是在这里使用 SMTP 的全部意义所在。
  • 糟了。让我尝试阅读他们的文档并检查是否可以提供帮助
  • @MoshMage 直接调用mail() 是一个真的坏主意 - 绝大多数示例代码都是错误的、不完整的或容易受到攻击。例如 all PHP 文档页面上的代码示例容易受到标头注入的影响,并且无法正确编码标头和正文。
  • @Synchro 从来没有想过你可以注入mail()(主要是因为我从未想过自己这样做)但奇怪的是我总是确保“发件人”是只是一封电子邮件(如,正则表达式输入并匹配电子邮件表单);这意味着虽然它可以注射,但并不难预防。但!很高兴知道这种暴行以防止将来发生。谢谢。

标签: php email smtp gmail phpmailer


【解决方案1】:

这很简单:默认情况下,Gmail 不允许您将发件人地址设置为非 Gmail 地址,除非他们正在处理您的域;他们会将发件人地址重写为您的 gmail 地址,正如您所看到的那样。这与 PHPMailer 和 PHP 邮件功能无关。

可以设置特定的地址(而不是整个域),但您必须事先设置它们;您不能只从随机地址发送。见this answer

【讨论】:

  • 我没有注意到他试图从不同的地址发送邮件。我的错。好回答兄弟:)
  • 谢谢,这证实了我的结论。
【解决方案2】:

更改下面提到的部分:

$mail->addAddress($to);
$mail->setFrom($from);

$mail->addAddress($to); 
$mail->From = $from;
$mail->FromName = $from_name;

希望它会起作用。

问候。

【讨论】:

  • 谢谢,但这不起作用。它仍然来自同一个电子邮件地址,“发件人姓名”现在显示为“root 用户”。
  • 兄弟,能否请您按照链接中的PHPMailer约定:github.com/PHPMailer/PHPMailer。这里写得很清楚。如果您需要任何帮助,请告诉我。 :)
  • 我想如果你在下面使用它会对你有所帮助。 $mail->发件人 = $sender_email; $mail->FromName = $sender_name; $mail->addAddress($receiver_email, $receiver_name);
  • 我知道这就是它所说的在 PHPMailer 上执行此操作的方式,但您的方法对我不起作用。我认为这可能与我的 gmail 帐户无法从别名地址发送有关。当它通过该帐户时,它会自动被标记为该电子邮件地址作为发件人。
  • 我希望这个链接对你有帮助。 stackoverflow.com/questions/16048347/…
猜你喜欢
  • 2020-07-26
  • 2020-04-25
  • 2014-10-21
  • 2017-10-25
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 2019-06-30
  • 1970-01-01
相关资源
最近更新 更多