在 PHPMailer 上出现错误 405(不允许)

Posted

技术标签:

【中文标题】在 PHPMailer 上出现错误 405(不允许)【英文标题】:Getting Error 405 (Not Allowed) on PHPMailer 【发布时间】:2016-05-09 12:49:40 【问题描述】:

我正在尝试使用 phpMailer 从联系表单发送电子邮件。提交后,服务器超过 5 分钟没有响应,然后返回 ERROR 405 Not Allowed - ngnix

我正在使用来自 webmaster@mydomain.com 的 SMTP Auth,而 SMTP 服务器位于 voyager.websitewelcome.com。我想,“会不会是因为跨域提交,虽然这不是AJAX,都是PHP?”

不,请看下面的答案:

mail = new PHPMailer;

$mail->isSMTP();
$mail->Host = 'voyager.websitewelcome.com';
$mail->SMTPAuth = true;
$mail->Username = 'webmaster@mydomain.com';
$mail->Password = 'mypassword';
$mail->SMTPSecure = 'tls'; //<---- THIS is the problem
$mail->Port = 465;

$mail->setFrom('webmaster@mydomain', 'My Company Kiosk');
$mail->addAddress('me@mydomain.com', 'My Name');

$mail->ishtml(true);

$mail->Subject = 'New Lead from My Company';
$mail->Body    = '<b>test</b> html'; //$body;
$mail->AltBody = 'test text';


try 
  $mail->send();
  //echo $output;

catch (phpmailerException $e) 
  echo $e->errorMessage();
 catch (Exception $e) 
  $e->getMessage();

【问题讨论】:

【参考方案1】:

这并不是说服务器不允许 TLS,而是您试图在需要隐式 SSL (SMTPS) 的端口上使用显式 SSL (SMTP+STARTTLS == 'tls' in PHPMailer)。您也可以通过设置 $mail-&gt;Port = 587; 来修复它(以自 1998 年以来未弃用的方式),这是 the documentation 所建议的(查看“使用加密”)。

顺便说一句,您的错误捕获将不起作用,因为 PHPMailer 默认情况下不会抛出异常,您需要将 true 传递给构造函数以启用它们,如下所示:

$mail = new PHPMailer(true);

【讨论】:

感谢更新的答案!这比我的意外发现提供的信息要多得多。我的 SMTP 服务器设置建议声称在该端口上同时接受 TLS 和 SSL,所以我没有考虑尝试端口 587。我会尝试一下,因为 TLS 更安全,这涉及客户的个人信息。如果这不起作用,我会给他们打电话,看看那个人是否知道有关端口配置的任何事情。感谢有关错误捕获的更新,我完全错过了。【参考方案2】:

在写这个问题的过程中,“TLS”引起了我的注意。我从没想过要改变这一点,而且我的 SMTP 服务器不允许 TLS!

我已经阅读了很多帖子试图弄清楚这一点。我认为应该有人发布一个可能的答案!

$mail->SMTPSecure = 'ssl';

【讨论】:

以上是关于在 PHPMailer 上出现错误 405(不允许)的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring MVC 中映射 Ajax 请求:不允许出现错误 405 方法

出现 405 错误-在邮递员中工作时方法不允许招摇撞错

Flask 文件上传返回错误 405 方法不允许

HttpURLConnection responseCode 405 方法不允许错误

如何打印错误 405 方法不允许用户使用

打开网页出现“405 Not Allowed”,是啥意思?怎么解决?