AWS SES с GMail (только отправка) - PullRequest
0 голосов
/ 05 июля 2019

Наша компания использует G Suite для своих электронных писем. В настоящее время у нас есть несколько автоматических писем, которые отправляются с использованием MailKit в коде .Net Core. До вчерашнего дня это работало нормально, когда нам приходилось отправлять большое количество писем (около 600) за один раз. Около 60 писем были отправлены успешно, но остальные все не удалось с ошибками, как это, которые были возвращены из Gmail:

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

Мне кажется, что Gmail сообщает, что он перегружен: https://stackoverflow.com/a/39108563/5392786

Я предполагаю, что у Google есть ограничение на количество писем, которые вы можете отправлять таким образом?

Большая часть нашей инфраструктуры находится на AWS, поэтому я подумал о переходе на AWS SES для обработки наших автоматических электронных писем. Это жизнеспособный вариант?

Я все еще хочу, чтобы остальная часть бизнеса могла продолжать использовать Gmail в качестве своего почтового клиента. Можно ли использовать AWS SES параллельно с Gmail для отправки электронных писем из кода (с помощью AWS SDK), но оставить получение электронной почты без изменений (т. Е. SES не имеет ничего общего с получением или обработкой входящих сообщений электронной почты, это просто отправляет электронные письма, когда я говорю это из кода)?

EDIT Вот код, который я использую для отправки писем:

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 Ответ

1 голос
/ 05 июля 2019

Да, вы можете использовать SES в качестве дополнительного отправителя.Если вы специально не настроили это, входящие электронные письма останутся как есть и будут вести себя как обычно.

Фактически, вы могли бы даже иметь одно приложение, отправляющее электронную почту, используя gsuite, второе приложение, отправляющее электронную почту из SES.и все пользователи все еще используют gsuite для отправки и получения сообщений электронной почты, и все будет работать нормально.

...