Python smtplib и несколько сообщений на соединение - PullRequest
2 голосов
/ 14 сентября 2010

В последнее время я изучаю клиентскую библиотеку smtplib smtp для python, но не могу найти ссылки на протокол PIPELINING для серверов smtp, которые его поддерживают. Есть что-то, чего мне не хватает? Это еще не реализовано, может быть? Какие-нибудь другие реализации, кроме smtplib с включенной PIPELINING?

Спасибо

1 Ответ

6 голосов
/ 14 сентября 2010

Есть что-то, чего мне не хватает?

Вполне возможно.

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

Из вашего комментария звучит так, как будто вы беспокоитесь, что через одно соединение будет отправлено только одно сообщение. Это не PIPELINING.

smtplib поддерживает использование одного и того же соединения для нескольких сообщений. Вы можете просто позвонить sendmail несколько раз. Э.Г.

s = smtplib.SMTP("localhost")
s.sendmail("foo@bar.baz",["bar@foo.baz"],message1)
s.sendmail("foo@bar.baz",["baz@foo.baz"],message2)

Окончательное обновление

какое максимальное количество сообщений я могу добавить "на соединение"?

Это зависит от демона SMTP. Кажется, exim по умолчанию равен 1000.

мне нужно делать это синхронно или smtplib в конечном итоге обрабатывает современные вызовы sendmail?

Вызов метода sendmail будет блокирован до завершения, ваши вызовы будут последовательными.

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

Количество разрешенных одновременных подключений также может быть элементом конфигурации демона SMTP.

...