带有 GMail 的 AWS SES(仅发送)

Posted

技术标签:

【中文标题】带有 GMail 的 AWS SES(仅发送)【英文标题】:AWS SES with GMail (sending only) 【发布时间】:2019-07-05 08:55:34 【问题描述】:

我们的企业使用 G Suite 来处理电子邮件。目前,我们有许多使用 .Net Core 代码中的MailKit 发送的自动电子邮件。这一直运行良好,直到昨天我们不得不一次性发送大量电子邮件(大约 600 封)。大约 60 封电子邮件已成功发送,但其余的都失败了,并从 Gmail 返回了类似这样的错误:

4.7.0 Temporary System Problem. Try again later (10). i4sm4226208wrr.17 - gsmtp

我相信是 Gmail 告诉我它已超载:https://***.com/a/39108563/5392786

我猜 Google 对您可以通过这种方式发送的电子邮件数量有限制?

我们的许多基础设施都在 AWS 上,因此我考虑切换到 AWS SES 来处理我们的自动电子邮件。这是一个可行的选择吗?

我仍然希望其他企业能够继续使用 Gmail 作为他们的电子邮件客户端。是否可以将 AWS SES 与 Gmail 并行使用以从代码发送电子邮件(使用 AWS 开发工具包),但保持接收电子邮件不变(即 SES 与接收或处理传入的电子邮件没有任何关系,它当我从代码中告诉它时只发送电子邮件)?

编辑 这是我用来发送电子邮件的代码:

public async Task SendEmail(MimeMessage message)

    var certificiate = new X509Certificate2("certificate.p12", "notasecret", X509KeyStorageFlags.Exportable);
    var credentials = new ServiceAccountCredential(
        new ServiceAccountCredential.Initializer("automatedemails@automatedemails-######.iam.gserviceaccount.com")
        
            Scopes = new[]  GmailService.Scope.MailGoogleCom ,
            User = ((MailboxAddress)message.From.First()).Address
        .FromCertificate(certificiate));

    if (!await credentials.RequestAccessTokenAsync(new CancellationToken()))
    
        throw new ApplicationException("Error requesting access token for Gmail authentication");
    

    using (var client = new SmtpClient())
    
        client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);

        var oauth2 = new SaslMechanismOAuth2(credentials.User, credentials.Token.AccessToken);
        client.Authenticate(oauth2);

        await client.SendAsync(message);
        client.Disconnect(true);
    

这是为每封电子邮件运行的。我想知道是不是因为我要为每封电子邮件打开和关闭连接?

【问题讨论】:

【参考方案1】:

是的,您可以将 SES 用作附加发件人。除非您专门设置它,否则传入的电子邮件将保持原样并照常运行。

事实上,您甚至可以让一个应用程序使用 gsuite 发送电子邮件,第二个应用程序从 SES 发送电子邮件,并且所有用户仍然使用 gsuite 发送和接收电子邮件,它仍然可以正常工作。

【讨论】:

太好了,感谢您提供的信息!能够同时在不同的应用程序中使用 GSuite 和 SES 将是一个好处,因为这样我就可以逐步迁移我的应用程序,一次一个。您知道对 SES 的更改是否会解决我原来的 Gmail SMTP 过载问题?或者你有关于这个问题的任何补充信息/链接吗? 如果您使用 SES 作为电子邮件服务器之一来处理大量外发电子邮件,它应该会完全绕过 Gmail 的 SMTP 服务器。

以上是关于带有 GMail 的 AWS SES(仅发送)的主要内容,如果未能解决你的问题,请参考以下文章

如何将原始电子邮件 (MIME) 从 AWS SES 转换为 Gmail?

使用没有自定义域的 AWS SES 发送电子邮件

AWS-SES 电子邮件地址未经验证。邮箱帐户

如何使用带有 Postfix 的 AWS SES 接收退回的邮件

在 AWS Lambda 函数中通过 AWS SES 发送电子邮件

节点 AWS-SDK SES 电子邮件发送验证失败