PHPMailer不工作:有没有新方法这样做?

时间:2018-06-02 13:45:38

标签: php phpmailer

我遵循了这个问题中的所有说明:

SMTP connect() failed PHPmailer - PHP

但我仍然没有成功让PHPMailer工作。我在别处搜索 - 没有解决方案。

您可以在此处查看结果:https://unidrones.co.za/JuneSecond

当我尝试使用我的Gmail帐户凭据发送测试电子邮件时,它会返回" SMTP connect()失败"错误。

我正在使用此模板代码:

<?php
require 'PHPMailerAutoload.php';
if(isset($_POST['send']))
{
$email = $_POST['email'];
$password = $_POST['password'];
$to_id = $_POST['toid'];
$message = $_POST['message'];
$subject = $_POST['subject'];
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'ssl://smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = $email;
$mail->Password = $password;
$mail->addAddress($to_id);
$mail->Subject = $subject;
$mail->msgHTML($message);
if (!$mail->send()) {
$error = "Mailer Error: " . $mail->ErrorInfo;
echo '<p id="para">'.$error.'</p>';
}
else {
echo '<p id="para">Message sent!</p>';
}
}
else{
echo '<p id="para">Please enter valid data</p>';
}
?>

编辑:我现在还不知道是否有通过PHP发送电子邮件的新方法。我正在使用的所有教程和课程都是这样教的(即使用PHPMailer库)。

我很难找到包含PHPMailerAutoload.php文件的PHPMailer库,这让我觉得它有点过时或不赞成,但我怎么发送电子邮件?我不知道。

3 个答案:

答案 0 :(得分:1)

您很难找到PHPMailerAutoload.php的原因是因为它已经过时且不再受支持。 Get the latest并将您的代码基于gmail example provided。如果您是PHP新手,learn to use composer

这三行是​​冲突的:

$mail->Host = 'ssl://smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';

ssl://中的Host会覆盖tls中的SMTPSecure,导致它尝试将隐式TLS用于期望显式TLS的端口。使用端口465的ssl或端口587的tls,而不是其他组合。无论如何,似乎不是你的问题。

正如the troubleshooting guide所述,确切地说&#34; SMTP连接()失败&#34;错误:

  

这通常被报告为PHPMailer问题,但它几乎总是由于本地DNS故障,防火墙阻塞(例如GoDaddy)或本地网络上的其他问题。这意味着PHPMailer无法联系您在Host属性中指定的SMTP服务器,但没有确切说明原因。

然后继续介绍几种可用于尝试诊断无法连接的技术。神奇的东西,文档。

我使用一些随机数据尝试了您的表单,发现您未能在问题中包含最重要的错误消息:

2018-06-02 14:47:25 SMTP ERROR: Failed to connect to server: Network is unreachable (101)
2018-06-02 14:47:25 SMTP connect() failed

这表明您的ISP可能阻止出站SMTP,因此您可以得到答案 - 也许确认使用指南建议的步骤(telnet等),并参考您的ISP的文档或支持。

你也有一个重大遗漏 - 你没有设置&#34;来自&#34;地址:

$mail->setFrom('myname@gmail.com', 'My Name');

请注意,如果您通过Gmail发送邮件,则只能使用您帐户的地址或预设别名(在gmail首选项中设置),而不是任意地址。

与此同时,无论如何,实施起来有点疯狂 - 为什么有人会在这样的表单上输入他们的gmail凭据?

答案 1 :(得分:0)

您是否尝试使用以下配置?

$mail->Host       = 'smtp.gmail.com';
$mail->SMTPSecure = 'ssl';
$mail->Port       = 465;
$mail->CharSet    = 'UTF-8';

答案 2 :(得分:-1)

<?php
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;

//$mail->SMTPDebug = 4;                               // Enable verbose debug output

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'your gamil id';                 // SMTP username
$mail->Password = 'gmail password';                           // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                    // TCP port to connect to

$mail->setFrom('set from address', 'name');
$mail->addAddress('recipient address', 'Joe User');     // Add a recipient

$mail->addReplyTo('reply address', 'Information');


// $mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}