2009-12-21 3 views
0

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

+3

Из любопытства, почему sendmail вместо smtplib Python? – DNS

+0

фактически прямо сейчас я использую smtplib, но по какой-то причине адрес To: не отображается в сообщениях электронной почты. – Incognito

+0

Не было бы лишнего смысла спрашивать (через размещение кода, о котором идет речь), почему адрес To: не отображается в письмах? – jhwist

ответ

2

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

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

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

0

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

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

os.system("echo hello world") 

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

subprocess.Popen("echo hello world", shell=True) 
+0

Это не совсем так: хорошо документированы. Это также одна из причин подпроцессов. :) – 2009-12-21 20:37:43