让我先说一下我不尝试使用gmail作为我的smtp服务器。 我可以使用 PHPMailer 使用我的域 smtp 服务器设置将电子邮件发送到我的主机 (hostgator) 的大多数地址,但发送电子邮件到 gmail 地址除外。发送到 Gmail 地址的电子邮件永远不会到达。据我所知,我没有收到任何错误消息。
我需要做什么? gmail 阻止了什么,导致拥有 gmail 帐户的人无法从某些在线电子邮件表单接收电子邮件?需要做什么来解决它?
这是我正在使用的代码:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require "PHPMailer/src/PHPMailer.php";
require "PHPMailer/src/SMTP.php";
require "PHPMailer/src/Exception.php";
$mail = new PHPMailer(TRUE);
$mail->isSMTP();
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->SMTPAuth = true;
$mail->Host = "mail.mydomain.com";
$mail->Port = 465;
$mail->Username = "smtpusername";
$mail->Password = "smtppassword";
$mail->setFrom($FromEmail,$FromName);
$mail->addAddress("[email protected]","Fred");
$mail->addCC($FromEmail,$FromName);
$mail->addBCC("[email protected]","Webmaster");
$mail->Subject = "Email from contact form";
$mail->Body = $EmailMessage;
$mail->send();
$mail = null;
明白了。这实际上是对一个令人沮丧的问题的相当简单的回答。我希望这会帮助其他人。 秘密在于“发件人地址”必须来自与发送电子邮件的域相同的域。就是这么简单。我知道我们大多数人都希望从网站联系表单发送的电子邮件是由发送电子邮件的人发送的,这样当有人联系我们时,我们只需点击回复即可回复他们的电子邮件。这在大多数情况下都有效,但 Gmail 地址(也许还有其他一些在线电子邮件服务)除外。 因此,解决方法是,确保发件人电子邮件地址与发送邮件的域相同。如果您的表单位于 mywebsite.com 上,则发件人电子邮件地址必须来自 [电子邮件受保护]。它甚至不必是合法的电子邮件地址,但域名需要匹配。 要绕过问题回复(以便接收电子邮件的人只需点击回复即可回复提交联系表单的人),请确保添加回复地址(尽管经过测试,我发现使用gmail时,如果回复与发件人地址不同,则回复时将使用发件人地址)。
这是示例代码。它有效:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require "PHPMailer/src/PHPMailer.php";
require "PHPMailer/src/SMTP.php";
require "PHPMailer/src/Exception.php";
$EmailMessage = "The following message was generated from https://somefakedomain.org/contact : " . chr(10) . chr(13) .
"From : " . $FromName . " (" . $FromEmail . ")" . chr(10) . chr(13) .
"To : " . $SendTo . chr(10) . chr(13) .
"At : " . date("F d, Y G:i") . chr(10) . chr(13) .
$EmailMessage;
$mail = new PHPMailer(TRUE);
$mail->isSMTP();
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->SMTPAuth = true;
$mail->Host = "mail.somefakedomain.org";
$mail->Port = 465;
$mail->Username = "smtpusername";
$mail->Password = "smtppassword";
$mail->isHTML(FALSE);
$mail->setFrom("[email protected]","Webmaster"); /* The From email address MUST be the same as the domain the email is being sent from */
$mail->AddReplyTo($FromEmail,$FromName); /* The reply to address works most all of the time, however gmail will use the From Email address if this is different */
$mail->addAddress("[email protected]","Elvis");
$mail->addCC($FromEmail,$FromName);
$mail->addBCC("[email protected]","Webmaster");
$mail->Subject = "Email from contact form";
$mail->Body = $EmailMessage;
$mail->send();
$mail = null;
我希望这对其他人有帮助。这是一个非常令人沮丧的问题的相当简单的答案。