使用PHP发送邮件:SMTP错误

时间:2016-05-05 06:09:32

标签: php smtp phpmailer sendmail

我正在尝试使用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"); 
}

**

2 个答案:

答案 0 :(得分:0)

isMailisSMTP使用两种不同的发送机制。 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();