我正在尝试使用php发送邮件。但它给了我错误,
“ SMTP错误:无法连接到服务器:连接被拒绝(111)
SMTP connect()失败。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
“邮件程序错误:SMTP连接()失败.https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting”“
因此我搜索了很多以找到问题。我有一个解决方案,我需要更改 $ mail-> IsMail();来自$ mail-> IsSMTP();
我做到了,发送了邮件...... 但是当我查收邮件时,
我得到了, “此邮件可能未由:sender@gmail.com发送”作为开发人员,我理解电子邮件不应包含此类行或问题。
我想知道,如果Receiver在电子邮件中显示这样的行,这样可以吗?如果不是那我该怎么办?
我的意思是我应该在代码中做出哪些更改。
这是我的php代码:
**
date_default_timezone_set('Etc/UTC');
include 'PHPMailerAutoload.php';
$mail = new PHPMailer();
$mail->IsSMTP();
// $mail->Mailer = "smtp";
$mail->SMTPDebug = 1;
$mail->Debugoutput = 'html';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = "sender@gmail.com";
$mail->Password = 'senderPassword';
$mail->setFrom("sender@gmail.com", 'sender name');
$mail->addReplyTo('sender@gmail.com', '');
$mail->addAddress($receiver, '');
$mail->Subject = 'Welcome';
$mail->Body = 'body';
$mail->AltBody = 'This is a plain-text message body';
if (!$mail->send())
{
return "Mailer Error: " . $mail->ErrorInfo;
}
else
{
return array('flag' => "1");
}
**
答案 0 :(得分:0)
isMail
和isSMTP
使用两种不同的发送机制。 isMail
通过PHP mail()
函数提交邮件,该函数通过sendmail二进制文件将邮件传递到本地邮件服务器。然后,此本地邮件服务器尝试将邮件传递给其最终收件人。这个本地服务器可能会接受以后被拒绝的消息,这对于您的脚本来说已经太迟了。
使用isMail
:
script -> local mail server -> gmail
使用isSMTP
:
script -> gmail
使用isMail
您不需要进行身份验证(通常允许localhost中继),并且从服务器发送到 Gmail中。使用isSMTP
,您的邮件将从 gmail 发送到 gmail,并且需要进行身份验证。
当通过gmail直接发送时,你需要使用gmail进行身份验证,并且这里有一些问题(这就是你的脚本无法正常工作的原因),这里有关于SO的PHPMailer文档,示例和问题的详细介绍。 / p>
通过您的服务器发送时,您说您是从gmail用户发送的,但它是由您的服务器发送的,而不是由gmail的SPF记录中列出的服务器发送的。这是伪造,这就是为什么你看到"这条消息可能不是由......发送的。"信息。如果您从自己域中的地址发送,则不会说。
解决方案是修复您的gmail身份验证并直接通过gmail发送。将您的代码基于the gmail example provided with PHPMailer,而不是您正在使用的旧的,过时的代码,以及read the docs。
答案 1 :(得分:-1)
以下是用于邮寄目的的代码。尝试设置SMTPDebug模式3并检查输出。
$mail = new PHPMailer;
$mail->SMTPDebug = 3;
$mail->isSMTP();
$mail->Host = 'smtp.office365.com';
$mail->SMTPAuth = true;
$mail->Username = 'xxxxxxxxxxxxxxx';
$mail->Password = 'xxxxxxxxxxxxx';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->From = 'xxxxxxxxxxxxxx';
$mail->FromName = 'xxxxxxxxxxxxxxxxx';
$mail->addAddress(xxxxxxxxxxxxxx);
$mail->addReplyTo('xxxxxxxxxxxxxxxxxxxxxxx', 'xxxxxxxxxxxxxxxxxxxxx');
$mail->isHTML(true);
$mail->Subject = '';
$mail->Body = "";
$mail->send();