You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何发送不会被标记为垃圾邮件的自动化邮件?PHP注册验证邮件问题及Google邮件API替代方案咨询

解决Gmail邮件发送与垃圾邮件问题的现代方案

兄弟,你的痛点我太懂了——用PHPMailer连Gmail靠“低安全性应用”不仅麻烦,还容易踩垃圾邮件的坑,谷歌早就不推荐这种老办法了。给你几个更现代、靠谱的方案,尤其是谷歌官方的替代方案:

一、谷歌官方的现代邮件发送方案:Gmail API

谷歌确实提供了官方API来发送邮件,完全不需要依赖“低安全性应用”,步骤大概是这样:

  • 第一步:配置Google Cloud项目
    先去Google Cloud控制台创建项目,启用Gmail API,然后根据你的场景创建凭据:

    • 如果是需要用户授权的场景(比如让用户用自己的Gmail发件),创建OAuth 2.0客户端ID
    • 如果是服务器端自动发件(比如注册验证邮件这种不需要用户交互的场景),创建服务账号,并且在Google Workspace后台给服务账号设置域范围委派(仅限Workspace用户)。
  • 第二步:用PHP调用Gmail API
    你可以用谷歌官方的PHP客户端库,甚至PHPMailer也支持通过Gmail API发送,示例代码如下:

    require 'vendor/autoload.php';
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\OAuth;
    use Google\Client;
    use Google\Service\Gmail;
    
    $mail = new PHPMailer(true);
    $mail->isSMTP();
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPSecure = 'tls';
    $mail->SMTPAuth = true;
    $mail->AuthType = 'XOAUTH2';
    
    // 初始化Google客户端
    $client = new Client();
    $client->setClientId('你的客户端ID');
    $client->setClientSecret('你的客户端密钥');
    $client->setRefreshToken('你的刷新令牌');
    $client->setScopes([Gmail::MAIL_GOOGLE_COM]);
    
    // 配置PHPMailer的OAuth认证
    $mail->setOAuth(new OAuth([
        'clientId' => '你的客户端ID',
        'clientSecret' => '你的客户端密钥',
        'refreshToken' => '你的刷新令牌',
        'userName' => 'your-email@gmail.com'
    ]));
    
    // 设置邮件内容
    $mail->setFrom('your-email@gmail.com', '你的应用名称');
    $mail->addAddress('recipient@example.com');
    $mail->Subject = '邮箱验证';
    $mail->Body = '点击下方链接验证你的邮箱:[唯一验证链接]';
    
    $mail->send();
    

    这种方式完全符合谷歌的安全规范,再也不用手动开启“低安全性应用”了。

二、更简易的第三方邮件服务API

如果你嫌Gmail API配置麻烦,第三方邮件服务绝对是更省心的选择——它们的API真的就是传入收件人地址和内容就能用,而且自带邮件送达率优化,大幅降低进垃圾邮件的概率:

  • SendGrid:API极简,PHP里几行代码就能搞定:

    require 'vendor/autoload.php';
    use SendGrid\Mail\Mail;
    
    $email = new Mail();
    $email->setFrom('your-email@example.com', '你的应用名称');
    $email->setSubject('邮箱验证');
    $email->addTo('recipient@example.com');
    $email->addContent('text/plain', '点击链接验证你的邮箱');
    $email->addContent('text/html', '<strong>点击<a href="验证链接">这里</a>验证你的邮箱</strong>');
    
    $sendgrid = new \SendGrid('你的SendGrid API密钥');
    try {
        $response = $sendgrid->send($email);
        print $response->statusCode() . "\n";
    } catch (Exception $e) {
        echo '发送失败:'. $e->getMessage() ."\n";
    }
    
  • Mailgun:同样简单,SDK调用便捷,还会引导你配置DKIM、SPF等域名验证记录,从根源上降低垃圾邮件标记概率。

三、避免邮件被标记为垃圾邮件的关键

不管用哪种方案,这些细节一定要做好:

  • 配置DKIM、SPF、DMARC记录:在你的域名DNS后台添加这些记录,证明邮件是你合法发送的,这是提升送达率的核心;
  • 规范邮件内容:不要用夸张的营销关键词,明确标注发件人名称,即使是验证邮件,也可以加一句“如果不是你注册的,请忽略此邮件”的提示;
  • 个性化内容:给每个用户添加唯一的验证链接,避免批量发送完全相同的内容,降低被判定为垃圾邮件的风险。

内容的提问来源于stack exchange,提问作者Gimme the 411

火山引擎 最新活动