首页  >  问答  >  正文

PHP 邮件程序在本地主机上工作还是这里有问题

尝试使用 PHP 邮件程序 (localhost) 发送电子邮件时,我不断收到错误消息。或者 php 邮件程序无法在本地主机上运行吗?

<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';


//Load Composer's autoloader
require 'vendor/autoload.php';

//Create an instance; passing `true` enables exceptions
$mail = new PHPMailer(true);

    try {
        //Server settings
        $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output
        $mail->isSMTP();                                            //Send using SMTP
        $mail->Host       = 'smtp.gmail.com';                     //Set the SMTP server to send through
        $mail->SMTPAuth   = true;                                   //Enable SMTP authentication
        $mail->Username   = 'default@gmail.com';                     //SMTP username
        $mail->Password   = '00000120';                               //SMTP password
        // $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            //Enable implicit TLS encryption
        $mail->Port       = 465;                                    //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`

        //Recipients
        $mail->setFrom('NatsuDragneelxd42069@gmail.com', 'Mailer');
        $mail->addAddress('Received@gmail.com', 'Joe User');     //Add a recipient
        //$mail->addAddress('ellen@example.com');               //Name is optional
        $mail->addReplyTo('Noreply@gmail.com', 'Info');
        // $mail->addCC('cc@example.com');
        // $mail->addBCC('bcc@example.com');

        //Attachments
        // $mail->addAttachment('/var/tmp/file.tar.gz');         //Add attachments
        // $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    //Optional name

        //Content
        $mail->isHTML(true);                                  //Set email format to HTML
        $mail->Subject = 'Here is the subject';
        $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
        $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

        $mail->send();
        echo 'Message has been sent';
    } catch (Exception $e) {
        echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
    }

这是我得到的错误:

服务器-> 客户端: SMTP 错误:无法连接到 SMTP 主机。 Message could not be sent. Mailer Error: SMTP 错误:无法连接到 SMTP 主机。

P粉969253139P粉969253139257 天前362

全部回复(1)我来回复

  • P粉364129744

    P粉3641297442024-02-26 11:12:42

    我不知道你为什么注释掉这一行,但它会使连接失败,因为它将尝试与需要加密的端口建立未加密的连接:

    // $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;

    取消注释,您可能会更幸运。您可能还想尝试设置 SMTPDebug = SMTP::DEBUG_CONNECTION,因为它会为您提供有关连接的 TLS 阶段的更多信息。

    这可能无法解决您的整个问题,因为 Gmail(自 2022 年 5 月起)不再允许使用常规 ID 和密码进行身份验证。您需要切换到使用 XOAUTH2(PHPMailer 支持),或者在 Gmail 控制台中创建应用程序密码。

    另请注意,gmail 不允许您使用任意地址,只能使用您的用户名 地址和预定义别名。

    PHPMailer 故障排除指南中涵盖了所有这些内容。

    回复
    0
  • 取消回复