у кого-нибудь есть пример кода Python, который отправляет почту с помощью sendmail и подпроцесса?

Я немного запутался в том, как работает subprocess.Popen. Если у кого-то есть пример кода, который отправляет электронную почту с использованием модуля подпроцесса и sendmail, это было бы здорово.


person Incognito    schedule 21.12.2009    source источник
comment
Из любопытства, почему sendmail вместо smtplib Python?   -  person DNS    schedule 21.12.2009
comment
на самом деле прямо сейчас я использую smtplib, но по какой-то причине адрес To: не отображается в электронных письмах.   -  person Incognito    schedule 21.12.2009
comment
Не было бы более разумным спросить (путем публикации рассматриваемого кода), почему адрес Кому: не отображается в электронных письмах?   -  person jhwist    schedule 22.12.2009
comment
@Joe, я предоставил ответ, показывающий, почему вы, вероятно, не видите адрес «Кому» в заголовках. Если это работает для вас, пожалуйста, примите его, но сначала отредактируйте свой вопрос, чтобы обобщить эту серию комментариев и дать понять, что принятый ответ не касается вопроса, как описано в его заголовке...   -  person Peter Hansen    schedule 22.12.2009


Ответы (2)


Это не дает прямого ответа на вопрос, но, учитывая ваш ответ на комментарий «DNS», это может решить вашу проблему.

При отправке SMTP-почты вы должны понимать, что адреса "от" и "куда", которые вы передаете процедуре smtplib.sendmail() в качестве аргументов, не совпадают с тем, что вы видите в From: и To: заголовки в сообщении при его получении. Эти аргументы становятся параметрами, передаваемыми принимающей почтовой программе SMTP с помощью команд «MAIL FROM» и «RCPT TO». Это обычно называют «конвертом» почты, и значения обычно отображаются в строках заголовка Received:.

Чтобы указать нужные заголовки, вы должны предоставить их самостоятельно перед телом сообщения. пример smtplib показывает, как это делается, в данном случае с кортежем называемые «msg», которые они добавляют перед телом сообщения.

person Peter Hansen    schedule 21.12.2009

Одной из первых проблем, с которыми я столкнулся при использовании subprocess, был тот факт, что по умолчанию он не принимает полные строковые команды оболочки.

Если вы хотите сделать эквивалент команды оболочки, например:

os.system("echo hello world")

вам нужно использовать опцию shell=True:

subprocess.Popen("echo hello world", shell=True)
person Ross Rogers    schedule 21.12.2009
comment
Это не совсем ловушка: хорошо документировано. Это также одна из причин подпроцесса породы. :) - person ; 21.12.2009