代码之家  ›  专栏  ›  技术社区  ›  user7589192

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

  •  1
  • user7589192  · 技术社区  · 6 年前

    也许我是一个糟糕的Googler,但我无法找到我目前的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。改用Web服务器/本地主机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';
    

    但是没有运气。对此有什么想法吗?感谢所有帮助。谢谢,谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   user7589192 user7589192    6 年前

    我出现这个错误的原因很简单,因为我的主机提供商不允许通过服务器发送电子邮件,只允许个人使用。感谢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.';
        }
    }
    ?>
    

    祝你好运