我遵循了这个问题中的所有说明:
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库,这让我觉得它有点过时或不赞成,但我怎么发送电子邮件?我不知道。
答案 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';
}