无法使用 PHPmailer 或 swift 邮件程序发送邮件

Cannot send mail using PHPmailer or swift mailer

当使用 PHPmailer 或 swift 邮件程序通过 mail.google.com 发送邮件时,两者都会在 30 秒后超时。 PHPmailer代码如下

<?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\Exception;

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

$mail = new PHPMailer(true);                              // Passing `true` enables exceptions
try {
    //Server settings
    $mail->SMTPDebug = 2;                                 // Enable verbose debug output
    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'mail.google.com';            // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = '[my email]@gmail.com';                 // SMTP username
    $mail->Password = '[password]';                           // SMTP password
    $mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 465;                                    // TCP port to connect to

    //Recipients
    $mail->setFrom('[my email]@gmail.com', 'Adam Johnston');
    $mail->addAddress('[my email]@gmail.com', 'Adam Johnston');     // Add a recipient
    //$mail->addAddress('ellen@example.com');               // Name is optional
    //$mail->addReplyTo('info@example.com', 'Information');
    //$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;
}

这是 swift 邮件程序代码:

require_once './vendor/autoload.php';

// Create the Transport
$transport = (new Swift_SmtpTransport('mail.google.com', 465))
  ->setUsername('[my email]@gmail.com')
  ->setPassword('[password]')
;

// Create the Mailer using your created Transport
$mailer = new Swift_Mailer($transport);

// Create a message
$message = (new Swift_Message('Wonderful Subject'))
  ->setFrom(['[my email]@gmail.com' => 'Adam Johnston'])
  ->setTo(['[my email]@gmail.com' => 'Adam Johnston'])
  ->setBody('Here is the message itself')
  ;

// Send the message
$result = $mailer->send($message);

因为两者都超时,我假设两者都已正确安装,但我设置不正确。提前致谢。

对于 gmail,SMTP 服务器(Host 字段)应为 smtp.gmail.com

我通过更改为 TLS 并将端口更改为 587 来修复它。也感谢 Jiri 指出我愚蠢的拼写错误。

还要确保您已为您的帐户启用 "Less secure apps",以便为 Gmail 启用密码验证。默认情况下未启用,并且仅允许 OAUTH 身份验证(不能通过 SMTP 使用)。 https://support.google.com/accounts/answer/6010255?hl=en