首页 > 解决方案 > PHPMailer 不使用 GoDaddy 发送电子邮件

问题描述

我在 GoDaddy 上设置了一个邮件程序,我的代码如下所示:

$mail = new PHPMailer(true);
$mail->IsSMTP();
$mail->SMTPDebug = 3;
$mail->SMTPAuth = false;
$mail->Port = 25;
$mail->Host = "localhost";
$mail->Username = 'username';
$mail->Password =  'password';

$mail->isSendmail();

$mail->From = $email;
$mail->FromName = "Website";

$mail->AddAddress("jn@website.com");

$mail->Subject = "Inquiry - " . $name;
$mail->WordWrap = 80;

$mail->MsgHTML($message);
$mail->IsHTML(true);return $mail->send();

我得到的输出如下:

使用 sendmail 发送:

Sendmail path: /usr/sbin/sendmail -t -i
Sendmail command: /usr/sbin/sendmail -t -i -oi -ft@t.com -t
Envelope sender: t@t.com
Headers: Date: Wed, 21 Apr 2021 22:43:52 +0000To: jn@website.comFrom: Website <t@t.com>Subject: Inquiry - testMessage-ID: <Km4AQw3yoiFLxzzxLhULZdgQjrgPSBSTT66rxurg4@website.com>X-Mailer: PHPMailer 6.3.0 (https://github.com/PHPMailer/PHPMailer)MIME-Version: 1.0Content-Type: multipart/alternative; boundary="b1_Km4AQw3yoiFLxzzxLhULZdgQjrgPSBSTT66rxurg4"Content-Transfer-Encoding: 8bit
Result: true

问题是我没有收到这些电子邮件。

提前感谢您的任何回复。

标签: phpemailphpmailersendmailgodaddy-api

解决方案


@zanderwar 的回答大多是正确的,但不幸的是并不那么相关。您可以使用任何语言同样出色地欺骗电子邮件来源,但这就是我们拥有 SPF 和 DKIM 的原因。

这里的主要问题是使用 GoDaddy。他们阻止出站 SMTP,并要求您仅通过他们自己的secureserver.net服务器发送,无需加密或身份验证。这足以防止在除 GoDaddy 拥有的域之外的几乎所有情况下进行有用的发送。您可以通过一种机制将它们添加到您的 SPF 记录中include,但这不太可能对接收者产生太大影响。

你还有一些其他的问题。

您正在调用isSMTP(),但是isSendmail()- 后者是最后调用的,因此将是实际使用的,这意味着您的所有 SMTP 设置都将被忽略。选择一种发送机制。

isSendmail()接下来,无论如何您都不太可能真正想要使用;这适用于那些自定义安装自己的邮件服务器软件的用户,这些软件需要特殊处理mail()(例如 qmail)或 SMTP 到 localhost(极少数情况)不支持。您在 GoDaddy 上,这意味着您无论如何都不能这样做。要么使用默认值isMail(),要么最好使用 SMTP localhost(最快和最安全的方法,也提供最好的反馈)。

你很难说出发生了什么,因为你没有错误处理。您没有检查任何返回值,没有异常处理(您也需要在 PHPMailer 中启用),没有显示错误消息,也没有启用调试输出(尽管这仅对 SMTP 发送非常有用)。我建议您将代码基于PHPMailer 提供的示例,这些示例展示了如何执行这些操作。

是的,您还应该与 DKIM 签约,但同样,GoDaddy 在这里将无济于事。

最后,发帖前先搜索;这里有很多关于将PHPMailer 与 GoDaddy一起使用的问题和答案,其中大部分与使用 GoDaddy 所固有的问题完全相同。如果可能的话,我建议转移到一个不会让电子邮件变得如此混乱的主机。


推荐阅读