如何使用 gmail SMTP 从 GoDaddy Linux VPS 发送电子邮件以便保存已发送的电子邮件

How to send email from GoDaddy Linux VPS with gmail SMTP so that sent emails are saved

我使用下面的PHP代码发送邮件,但是当我发送邮件后登录到gmail帐户时,发送的邮件没有记录在gmail的已发送邮件部分。但是电子邮件每次都成功发送。我可以在我的笔记本电脑上使用 IsSMTP() 功能,在这种情况下,发送的邮件会被记录下来,但在 GoDaddy 中 VPS 我不能使用 IsSMTP(),只能使用 IsMail()。

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\OAuth;
use PHPMailer\PHPMailer\POP3;
require '../PHPMailer/Exception.php';
require '../PHPMailer/PHPMailer.php';
require '../PHPMailer/SMTP.php';
require '../PHPMailer/OAuth.php';
require '../PHPMailer/POP3.php';
$mail = new PHPMailer(true);
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->IsMail();
//$mail->IsSMTP(); // if enabled instead of IsMail() an error "can not connect to SMTP" appears.
$mail->Host       = 'smtp.gmail.com';
$mail->SMTPAuth   = true;
$mail->Username   = 'username@gmail.com';
$mail->Password   = 'password';
$mail->SMTPSecure = 'ssl';
$mail->Port       = 465;

//Recipients
$mail->setFrom('username@gmail.com', 'OFFICE');
$mail->addReplyTo('username@gmail.com', 'OFFICE');
$mail->addBCC("username@gmail.com", "OFFICE");//since sent mails are not saved
$mail->isHTML(true);
$mail->addAddress('to@gmail.com');
$mail->Subject = 'Subject';
$mail->Body    = 'Hello';
$mail->AltBody = 'Hello';
$mail->send();

问题在于 Godaddy(以及许多其他 VPS 提供商)阻止 SMTP 端口以打击垃圾邮件发送者。

当您使用 $mail->IsMail() 时,e-mails 将通过 GoDaddy 的服务器完全绕过您的 Gmail 帐户。

现在还有另一个问题,Google 使用各种方法(例如 SPF)保护您的 @gmail.com 地址,所以即使您能够发送 e-mail,它很可能被标记为垃圾邮件——如果有的话。否则任何人都可以像你一样发送 e-mails..

我强烈建议您购买一个域(如果您还没有)并且:

  1. 将其托管在 GoDaddys e-mail service and sending it via their SMTP servers(允许他们的 SMTP 服务器)
  2. 使用不依赖 SMTP 的外部服务(例如 MailGun and their PHP SDK,但请自行研究合适的服务)

如果您真的需要,可能还有其他一些“hacky”方式仍然可以通过 Gmail e-mails 发送这些 ,例如 使用 VPN在 VPS 或 [1] 内部代理 google SMTP 在其他一些未被阻止的端口上的外部。请注意,这些方法仍然需要一些外部服务(很可能是付费的)并且 可能与 GoDaddy 的 and/or Gmail TOS

冲突

[1] 显然大多数 VPN 供应商也阻止 SMTP 端口以避免 e-mail 垃圾邮件泛滥