Отправка электронной почты AWS / SES ... Какой у вас был опыт? - PullRequest
2 голосов
/ 19 марта 2012

Кто-нибудь использует AWS SES для массовой отправки электронной почты?

У нас есть список рассылки компании, и я использую многопоточное приложение (.NET SDK) для одновременной отправки электронных писем, чтобы как можно быстрее получать электронные письма в наш список.

Мы смогли отправлять приблизительно 8 электронных писем в секунду ... кажется довольно низким, особенно учитывая введенный лимит SES 90 / секунду ... Мы не достигли этого.

Может кто-нибудь сказать мне максимумколичество писем, которые им удалось отправить в секунду, используя SES?

Пытались установить разумный эталонный тест.

Спасибо!

Ответы [ 2 ]

6 голосов
/ 19 марта 2012

Обновление

В настоящее время вы используете AWS SDK для .NET для отправки через SES, что по-прежнему упрощает исходный API. Тем временем AWS представила Поддержка SMTP для Amazon Simple Email Service (SES) , что предположительно делает еще проще для вас отправлять транзакционную или массовую электронную почту :

Вам больше не нужно писать код для повышения эффективности и Преимущества доставки СЭС. Вместо этого вы используете вкладку SES Консоль управления AWS для создания пользователя SMTP и набора учетные данные, а затем вы используете эти учетные данные для настройки электронной почты клиент по вашему выбору:

Упрощенный пример C # (т.е. без регулирования и т. Д.) Представлен в Отправка электронной почты из прикладных программ :

public static void SendWithSMTP(string username, string password, string host, 
    int port)
{
    using (var client = new System.Net.Mail.SmtpClient(host, port))
    {
        client.Credentials = new System.Net.NetworkCredential(username, password);
        client.EnableSsl = true;
        client.Send("from@example.com", "to@example.com", "This is a test subject.", 
            "This is a test email message body.");
    }
}

Чтобы продвинуться дальше, вы можете добавить свой собственный MTA в смесь, см. Интеграция с существующим почтовым сервером :

Если вы в настоящее время администрируете свой собственный почтовый сервер, вы можете использовать Конечная точка SMTP Amazon SES для отправки всей исходящей электронной почты на Amazon SES. Нет необходимости изменять существующие почтовые клиенты и Приложения; переход на Amazon SES будет прозрачным для их.

Это избавит ваше приложение от обработки дросселирования SES и в конечном итоге предоставит соответствующее пространство для маневра, однако, очевидно, что это требует от администратора MTA управлять этим по очереди, соответственно настраивая свои очереди отправки / ретрансляции - это может или не может быть знания уже распространяются в вашей организации, но должны обеспечить более надежный опыт SES по сравнению с обработкой этого для каждого приложения.


Начальный ответ

Вы, возможно, уже знаете об этом, но поскольку, вероятно, нет определенного ответа на ваш вопрос, я хотел бы еще раз подчеркнуть динамический Amazon SES подход к этому вопросу (который в основном не зависит от любого определенный AWS SDK используется):

1) Вам потребуется Запросить производственный доступ к Amazon SES , прежде чем даже думать о массовых рассылках:

Чтобы защитить наших клиентов от мошенничества и злоупотреблений и помочь вам установить вашу надежность для интернет-провайдеров и получателей электронной почты, мы не делаем немедленно предоставить неограниченное использование Amazon SES новым пользователям. Новые пользователи изначально находятся в песочнице Amazon SES. [...] действуют следующие ограничения:

  • Письма можно отправлять только на подтвержденные адреса электронной почты.
  • Вы можете отправлять не более 200 сообщений в сутки.
  • Вы можете отправлять не более одного сообщения в секунду.

2) После предоставления ваши лимиты на отправку будут постепенно увеличиваться на основе ряда факторов, как объяснено и проиллюстрировано в Как Amazon SES устанавливает лимиты на отправку - особенно заслуживают внимания:

Если вам недавно был предоставлен производственный доступ к Amazon SES, вы изначально может отправлять до 10 000 писем за 24-часовой период. После нескольких дней, , если вы продолжите отправлять высококачественную электронную почту , ваша квота будет быстро подняться на десятки тысяч. [Акцент мой]

Кроме того, изначально вы должны иметь возможность отправлять со скоростью не более 1 электронного письма в секунду. Ваша максимальная скорость отправки должна увеличиться до 10 / с через 3 дня, 50 / с через 10 дней и 90 / с через 2 недели, согласно таблице, которую они предоставляют.

Используемый вначале агрессивный шаблон корректировки квот, по-видимому, немного позже:

Последующее увеличение квоты происходит более постепенно; вам нужно будет продолжить увеличивать объем отправки. Если ваш объем остается близким к Ваша квота без превышения . Amazon SES обнаружит это использование шаблон и автоматически увеличить свою квоту. [выделено мое]

Мы добились больших успехов, особенно следуя последним, то есть до тех пор, пока мы оставались значительно ниже наших лимитов отправки, эти лимиты не изменились вообще, но начали это делать, как только мы действительно приблизились к ним.

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

Мы настоятельно рекомендуем вам контролировать использование Amazon SES для убедитесь, что вы работаете в рамках ваших лимитов отправки. Вам также нужно быть в курсе любых отскоков или жалоб, которые могут возникнуть, чтобы вы могли определить и устранить коренные причины. По мере того как вы успешно отправляете больше электронной почты, вы должны заметить, что Amazon SES постепенно корректирует ваши лимиты на отправку, чтобы вы могли отправлять еще больше электронной почты и быстрее скорость в секунду. [выделено мной]

Удачи!

4 голосов
/ 13 марта 2013

Вот пример, который я использую для массовых рассылок с помощью AWS Simple Email Service

public SendEmailResult SendEmail(ArrayList toemail, string subject, string bodystring, Enums.EmailTypes emailtype)
    {
        var awsConfig = new AmazonSimpleEmailServiceConfig
                           {
                               UseSecureStringForAwsSecretKey = true
                           };
        var awsClient = new AmazonSimpleEmailServiceClient(RoleEnvironment.GetConfigurationSettingValue("AwsAccessKeyId"),
                                                           RoleEnvironment.GetConfigurationSettingValue("AwsSecretKey"),
                                                           awsConfig);

        //EXAMPLE
        var to = new ArrayList
                           {
                               "email1@example.com",
                               "email2@example.com",
                               "email3@example.com"
                           };

        var dest = new Destination();

        dest.WithToAddresses((string[]) to.ToArray(typeof (string)));

        var body = new Body
                        {
                            Html = new Content(bodystring)
                        };

        string fromemail=string.Empty;

        switch (emailtype)
        {
            case Enums.EmailTypes.Notification:
                fromemail = "notification@example.com";
                break;
            case Enums.EmailTypes.Support:
                fromemail = "support@example.com";
                break;
        }

        var title = new Content(subject);
        var message = new Message(title, body);
        var ser = new SendEmailRequest(fromemail, dest, message);
        SendEmailResponse seResponse = awsClient.SendEmail(ser);

        return seResponse.SendEmailResult;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...