【问题标题】:PHPMailer not working in my serverPHPMailer 在我的服务器上不起作用
【发布时间】:2016-03-09 03:44:58
【问题描述】:

我用 Ubuntu 和 DigitalOcean 构建了一个 droplet,我正在尝试将其配置为使用 SMTP 发送电子邮件。

我知道 DigitalOcean 通过 IPv6 而不是通过 IPv4 阻止 SMTP,所以我将 IPv6 禁用为 this post says。

我的脚本仍然无法运行。我已经尝试使用端口 25、465 和 587。TLS 和 SSL。

我已经为 Ubuntu 14.04 安装了 sendmail,但无法正常工作。

这是我的脚本:

<?php
    require 'mail/PHPMailerAutoload.php';
    
    $mail = new PHPMailer;
    
    $to = $_GET['email'];
    
    $mail->isSMTP();
    $mail->Host = 'smtp.gmail.com';
    $mail->SMTPAuth = true;
    $mail->Username = 'rafawins@gmail.com';
    $mail->Password = '***';
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;
    
    $mail->setFrom('rafawins@gmail.com', 'Rafael');
    
    $mail->addAddress($to);
    
    $mail->isHTML(true);
    
    $mail->Subject = 'Subject';
    $contents = ob_get_contents();
    $mail->Body    = "ao!";
    
    if(!$mail->send()) {
        echo 'Message could not be sent.';
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        echo 'Message has been sent';
    }
    print_r(error_get_last());
    

?>

出现的错误是:

SMTP connect() 失败。

我有兴趣使用 SMTP 发送电子邮件,所以需要-&gt;isSMTP()!

我哪里错了?

非常感谢。


编辑:

正在做:telnet smtp.gmail.com 587 我明白了:

正在尝试 74.125.133.108...

已连接到 gmail-smtp-msa.l.google.com。

转义字符是'^]'。

220 smtp.gmail.com ESMTP w6sm13897014wjy.31 - gsmtp

然后做:openssl s_client -connect smtp.gmail.com:465 我也得到了答案...

怎么了?

【问题讨论】:

  • 您需要定义“不工作”。阅读the troubleshooting guide,用SMTPDebug = 4 发布你得到的信息。
  • 对不起,我更新了错误。我忘记写了!我之前一直在故障排除指南中。否则我不会来 StackOverflow :)
  • 因此,请发布您从调试输出中获得的信息,就像指南所说的那样 - 关于该确切消息的 SO 上有 800 多个问题。您很可能会遇到指南中准确描述的问题;这些天连接到 gmail 非常混乱。
  • OceanDigital 上默认禁用 SMTP 端口,您必须打开支持工单才能启用 SMTP 端口。
  • 尝试“tls”到“ssl”有时服务器需要 ssl。

标签: php email ubuntu phpmailer sendmail


【解决方案1】:

谨防从不同设备使用 Gmail。谷歌不允许并立即阻止使用帐户的位置不应使用的位置(当然在 google 眼中)。

【讨论】:

  • 你可以从localhost 运行你的代码。还要检查您的收件箱,了解您可能收到的有关暂停该特定设备/IP 帐户的任何通知
  • 在 AWS 服务器中使用了相同的脚本,并且运行正常。所以问题就在这里
  • 因此您一直在不同地理位置的不同设备(不同托管站点)上使用此帐户。你也检查过你的收件箱吗?
  • 是的。我正在尝试使用不同的服务器,即使来自不同的帐户,我也可以完美地做到这一点。但不在此服务器中(DigitalOcean)
  • 你是对的,我在这里得到了信息:stackoverflow.com/questions/21937586/… 并解决了我的问题
【解决方案2】:

在实时服务器上使用 SMTP 发送邮件,执行此操作。

$mail->Host = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;

并注释 $mail->IsSMTP();

它对我有用....

【讨论】:

  • 这可能有效,但它使用的是默认邮件功能,而不是 SMTP 服务器
【解决方案3】:

尝试注释掉第 8 行。

// $mail->isSMTP();

【讨论】:

  • 这将忽略您的所有 SMTP 设置并使用网络服务器发送电子邮件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多