我需要帮助,请 这是我的代码:
require 'PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPDebug = 2;
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls";
$mail->Port = 587;
$mail->Username = '[email protected]';
$mail->Password = 'somepass';
$mail->addAddress('[email protected]', 'Josh Adams');
$mail->Subject = 'PHPMailer GMail SMTP test';
$body = 'This is the HTML message body in bold!';
$mail->MsgHTML($body);
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
我收到此错误: 2013-12-11 15:15:02 SMTP 错误:无法连接到服务器:网络无法访问 (101) SMTP connect() 失败。邮件程序错误:SMTP 连接()失败。
请问有什么帮助吗?
您可能需要首先隔离此问题以确定它是否确实是网络问题;或者它是否特定于 PHP 邮件程序或您的代码。在您的服务器上,从命令提示符处尝试使用 telnet 连接到端口 587 上的 smtp.gmail.com,如下所示:
telnet smtp.gmail.com 587
您应该会看到来自 smtp.gmail.com 的回复,如下所示:
Trying 173.194.74.108...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP f19sm71757226qaq.12 - gsmtp
您是否看到了这一点,或者连接尝试是否挂起并最终超时?如果连接失败,可能意味着您的托管公司正在阻止端口 587 上的传出 SMTP 连接。
这对我有用:
改变:
$mail->SMTPSecure = 'ssl';
$mail->Host = 'smtp.gmail.com';
$mail->Port = '465';
到
$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';
$mail->Port = '587';
以下代码:
$mail->SMTPSecure = 'ssl';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465;
$mail->Host = 'ssl://smtp.gmail.com:465';
我在 Godaddy 托管上遇到了同样的问题,所以我花了很多时间并通过禁用服务器端的 SMTP 限制来修复它。
SMTP 代码适用于 PHPMailer
$mail = new PHPMailer(true);
try {
//Server settings
//$mail->SMTPDebug = SMTP::DEBUG_SERVER; //Enable verbose debug output
$mail->SMTPDebug = 2; //Enable verbose debug output
//$mail->isSMTP(); //Send using SMTP
$mail->Host = "tls://smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->Username = [email protected];
$mail->Password = SMTP_PASSWORD;
$mail->SMTPSecure = "tls";
$mail->Port = 587;
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
//Recipients
$mail->setFrom('[email protected]', 'Online Order');
$mail->addAddress('[email protected]'); //Add a recipient
$mail->addReplyTo('[email protected]', 'Jewellery');
//Attachments
//$mail->addAttachment('/var/tmp/file.tar.gz'); //Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); //Optional name
//Content
$mail->isHTML(true); //Set email format to HTML
$mail->Subject = 'Order';
$mail->Body = 'This is test email content';
$mail->AltBody = 'This is test email content';
if($mail->send()){
return '1';
}else{
return 'Order email sending failed';
}
我还收到了 PHPMailer 错误:SMTP connect() 失败。
确保您的凭据正确。如果使用 smtp.gmail.com,您将必须添加两步验证并创建应用程序密码。您可以在 Gmail 帐户安全部分找到它。在您的项目中,使用创建的应用程序密码而不是主 gmail acc 密码。 PS 不要用创建的应用程序密码替换您的 gmail acc 主密码,它们必须不同。
您可以尝试对 SSL 使用不同的端口 465,对 TLS 使用不同的端口 587。
检查 Windows 防火墙是否阻止任何端口。 https://www.itechtics.com/check-windows-firewall-blocking-ports/?utm_content=cmp-true
您也可以尝试通过命令提示符使用telnet来查看是否存在网络问题。 https://mailtrap.io/blog/telnet-smtp-test/
telnet smtp.gmail.com 587
或者如果使用其他端口则
telnet smtp.gmail.com 465
PS 您还可以尝试使用 openssl 而不是 telnet 。我想通过命令提示符使用 telnet 发送电子邮件,看看是我的代码失败还是其他原因。但不幸的是,telnet遇到了一些问题,无法使其工作,因此改用openssl并设法通过发送电子邮件。 https://www.baeldung.com/linux/openssl-send-emails
如果想尝试使用openssl我建议点击链接https://www.baeldung.com/linux/openssl-send-emailsand:
从命令开始
openssl s_client -host smtp.gmail.com -port 587 -starttls smtp -crlf
当需要添加
rcpt to: <recipientEmailAddress>
命令时,请确保以小写形式书写 rcpt,并在 <> 之间添加电子邮件。
我希望它能帮助别人!
改变
$mail->SMTPSecure = "tls";
与
$mail->SMTPSecure = 'ssl';