【发布时间】:2017-01-01 22:08:41
【问题描述】:
我有一个 PHPMailer 联系表格,可以将数据发送到一个 GMail 帐户。当站点在本地主机上运行时,它会成功执行此操作,但是当我将网页上传到服务器并尝试使用联系表单时出现以下错误:无法发送消息。邮件程序错误:SMTP 连接()失败.
我正在通过 Plesk 将文件上传到服务器,但我怀疑这是否相关。代码如下:
<form action="currentFile.php" method="POST">
Full Name:<input required type="text" name="fullname"/>
<input type="submit"/>
</form>
<?php
require 'phpmailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = 'mail@gmail.com';
$mail->Password = 'pass';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->addAddress('mail@gmail.com');
$mail->Subject = 'Contact Form';
$mail->Body = "Test";
$mail->AltBody = "Test";
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
?>
我相信将$mail->isSMTP(); 更改为$mail->isMAIL(); 没有区别。当网站在线(在我的服务器上)时,我该怎么做才能将表单数据发送到电子邮件?
注意:使用的 gmail 帐户和密码在下面的代码中是“假的”。我确实打算以 GMail 帐户为目标,并且我已成功输入 Google Mail 地址和密码,因此脚本在 localhost 上成功运行。
谢谢。
【问题讨论】:
-
您确定您的服务器中的端口 587 已打开(对传出连接)吗?
-
@Dekel 我从一家公司租用服务器,我需要联系他们吗?我尝试使用端口 25 和端口 465,GMail 的替代选项,它们在服务器上也不起作用。同时,25 和 587 在 localhost 上工作得很好。
-
否,如果它是租用的服务器,您应该具有 root 访问权限才能在防火墙中打开端口。其方法取决于安装的操作系统、控制面板等。例如 ubuntu 使用 ufw,任何安装了 WHM/Cpanel 的操作系统都应该能够安装可通过 WHM 面板访问的 CSF(ConfigServerFirewall)
-
@H3ll0 如果您不打算使用它的值来处理它,为什么还要使用带有输入的表单?顺便说一句,
action="currentFile.php"的操作属于<form>,不是输入,而是使用 GET/POST 方法。很确定这就是解决方案,或者至少是其中很大一部分。 -
遵循 PHPMailer 故障排除指南。它会告诉你什么被阻止了。我希望是您的托管公司阻止出站邮件 - 这很常见。
标签: php forms server phpmailer