在 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->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 方法