在PHPMailer上获取错误405(不允许)

时间:2016-02-01 06:32:27

标签: php phpmailer http-status-code-405

我尝试使用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();
}

2 个答案:

答案 0 :(得分:2)

并非服务器不允许TLS,而是您尝试使用明确的SSL(SMTP+STARTTLS == 'tls' PHPMailer)在端口上期望隐式SSL(SMTPS)。您也可以通过设置$mail->Port = 587;来修复它(以自1998年以来未被弃用的方式),这是the documentation建议的内容(查看&#34;使用加密&#34;)。

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

$mail = new PHPMailer(true);

答案 1 :(得分:0)

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

我已经阅读了很多帖子,试图解决这个问题。我以为有人应该发布一个可能的答案!

$mail->SMTPSecure = 'ssl';