以下收件人使用PHPMailer失败错误

时间:2017-11-26 03:07:25

标签: php email phpmailer

也许我是一个糟糕的Google员工,但我找不到当前PHPMailer问题的答案。我从来没有亲自使用PHPMailer,所以这是我的第一个项目。

当我提交表单时,我收到的信息中也包含错误,但首先要注意的是:

2017-11-26 02:46:39 SMTP INBOUND: "235 Authentication succeeded" 
2017-11-26 02:46:39 SERVER -> CLIENT: 235 Authentication succeeded

认证完成后,我很好,我使用连接到smtp服务器(不是gmail,我的网络托管电子邮件服务器)

这是我得到的错误:

  

SMTP错误:以下收件人失败:my@email.com:发件人IP地址可能不会将此服务器用作asmarthost。请改用webserver / localhost SMTP服务器

我的PHP代码是这样的:

<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'assets/vendor/autoload.php';

/**
 * This example shows how to handle a simple contact form.
 */
$msg = '';

if (array_key_exists('email', $_POST)) {
    date_default_timezone_set('Etc/UTC');

    $mail = new PHPMailer;

    $mail->SMTPDebug = 4;
    $mail->isSMTP();
    $mail->Host = 'my.smtp.host';
    $mail->SMTPAuth = true;
    $mail->Username = 'username';
    $mail->Password = 'password';
    $mail->SMTPSecure = 'tls';                           
    $mail->Port = 587;

    $mail->setFrom('the@smtp.email');

    $mail->addAddress('the@email-receiver.com');

    if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
        $mail->Subject = 'PHPMailer contact form';

        $mail->isHTML(false);

        $mail->Body = <<<EOT
Email: {$_POST['email']}
Name: {$_POST['name']}
Message: {$_POST['message']}
EOT;

        if (!$mail->send()) {

            $msg = 'Sorry, something went wrong. Please try again later.';
        } else {
            $msg = 'Message sent! Thanks for contacting us.';
        }
    } else {
        $msg = 'Invalid email address, message ignored.';
    }
}
?>

我认为这是正确的食谱代码:

$mail->addAddress('my@email.com');

我可能会愚蠢,但我不能在这里找出问题。我更改了一些信息,例如编辑此

$mail->Host = 'my.smtp.host';

到这个

$mail->Host = 'localhost';

但没有运气。有什么想法吗?所有帮助赞赏。谢谢谢谢。

此PHPMailer代码是从其中一个示例中复制而来的。我自己添加了SMTP信息。

1 个答案:

答案 0 :(得分:0)

我之所以遇到此错误的原因仅仅是因为我的托管服务提供商不允许通过服务器发送电子邮件,仅供个人使用。谢谢@ManuelOtto回复了我上面的问题。

因此,如果其他人收到相同的错误,请检查您的主机是否允许通过托管服务器发送电子邮件。如果不是这种情况,请联系您的托管服务提供商,因为这很可能是webhoster结束时的问题。

我仍然可以在不使用SMTP的情况下使用联系表单,只需删除我在PHP代码中列出的所有SMTP信息。

<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'assets/vendor/autoload.php';

/**
 * This example shows how to handle a simple contact form.
 */
$msg = '';

if (array_key_exists('email', $_POST)) {
    date_default_timezone_set('Etc/UTC');

    $mail = new PHPMailer;

    $mail->setFrom('the@smtp.email');

    $mail->addAddress('the@email-receiver.com');

    if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
        $mail->Subject = 'PHPMailer contact form';

        $mail->isHTML(false);

        $mail->Body = <<<EOT
Email: {$_POST['email']}
Name: {$_POST['name']}
Message: {$_POST['message']}
EOT;

        if (!$mail->send()) {

            $msg = 'Sorry, something went wrong. Please try again later.';
        } else {
            $msg = 'Message sent! Thanks for contacting us.';
        }
    } else {
        $msg = 'Invalid email address, message ignored.';
    }
}
?>
祝你好运。