所以我正在尝试使用当前版本的PHPMailer(https://github.com/PHPMailer/PHPMailer)发送电子邮件 . SMTP连接和邮件发送工作正常,除了脚本没有使用发件人邮件的"SetFrom" $ email变量,而是使用"Username"电子邮件 .
我尝试使用多种形式设置“发件人”邮件,似乎没有任何工作,但重要的是要注意“SetForm”中的“名称”设置得很好,但“电子邮件”不是 .
这是代码:
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = 'USERNAME(MY EMAIL)';
$mail->Password = 'PASSWORD';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->isHTML(true);
$mail->SetFrom($email,$name);
$mail->addAddress($email_received);
$mail->Subject = $subject;
$mail->Body = $user_msg;
2 回答
这是一个常见问题,在这里多次询问 . gmail不允许您设置任意发件人 - 如果您通过gmail发送,则必须使用您的Gmail地址或预先配置的替代方案 . 请参阅here for google 's docs on the matter. Generally it'无论如何都要尝试这样做,因为它可能会导致您的消息失败,而地址所有者可能已经配置了SPF测试 .
如果您检查收到的邮件的 Headers ,您会发现
SetFrom
电子邮件ID定义为X-Google-Original-From
.这是因为Gmail会自动将您通过其SMTP服务器发送的任何电子邮件的“发件人”行重写为Gmail或Google Apps电子邮件帐户设置中的默认“发送邮件”电子邮件地址 .
如果您确实希望将Gmail用作电子邮件提供商,则需要打开Google Apps帐户并验证您拥有用于电子邮件ID的域名 .
此问题还有一个解决方法(但不推荐):
在Gmail设置中,转到'Accounts'标签,然后在
Send mail as
部分添加您拥有的其他电子邮件地址 . 这将导致Google的SMTP服务器使用您启用的任何地址重新编写“发件人”字段作为默认Send mail as
地址 . 在这里,您需要输入域的smtp设置 . 因此,当您使用此设置发送电子邮件时,PHPMailer将连接到Gmail,Gmail将在发送任何电子邮件之前连接到您的SMTP服务器 .