2013-08-24 2 views
2

Я использую следующий фрагмент кода для отправки по электронной почте содержимого gerrit.txt, который является HTML-кодом, но его не работает, он не показывает никаких ошибок, но не работает так, как предполагалось .нимые данные о том, как это исправить?содержание электронной почты в текстовом файле на платформе unix

from email.mime.text import MIMEText 
from subprocess import check_call,Popen,PIPE 

def email (body,subject,to=None): 
     msg = MIMEText("%s" % body) 
     msg['Content-Type'] = "text/html;" 
     msg["From"] = "[email protected]" 
     if to!=None: 
      to=to.strip() 
      msg["To"] = "[email protected]" 
     else: 
      msg["To"] = "[email protected]" 
     msg["Subject"] = '%s' % subject 
     p = Popen(["/usr/sbin/sendmail", "-t"], stdin=PIPE) 

def main(): 
    Subject ="test email" 
    email('gerrit.txt',Subject,'userid') 

if __name__ == '__main__': 
    main() 
+0

Не похоже, что вы пишете на PIPE. – FakeRainBrigand

ответ

1

Причина, по которой ничего не отправляется, заключается в том, что как только вы открываете процесс sendmail, сообщение никогда не записывается на него. Кроме того, вам нужно прочитать содержимое текстового файла в переменной, которая будет включена в сообщение.

Вот простой пример, который строит ваш код. Я не использовал объект MIMEText для всего, чтобы изменить его в соответствии с вашими потребностями.

from email.mime.text import MIMEText 
from subprocess import check_call,Popen,PIPE 

def email (body,subject,to=None): 
     msg = MIMEText("%s" % body) 
     msg['Content-Type'] = "text/html;" 
     msg["From"] = "[email protected]" 
     if to!=None: 
      to=to.strip() 
      msg["To"] = to 
     else: 
      msg["To"] = "[email protected]" 
     msg["Subject"] = '%s' % subject 
     p = Popen(["/usr/sbin/sendmail", "-t", "-f" + msg["From"]], stdin=PIPE) 
     (stddata, errdata) = p.communicate(input="To: " + msg["To"] + "\r\nFrom: " + msg["From"] + "\r\nSubject: " + subject + "\r\nImportance: Normal\r\n\r\n" + body) 
     print stddata, errdata 
     print "Done" 


def main(): 
    # open gerrit.txt and read the content into body 
    with open('gerrit.txt', 'r') as f: 
     body = f.read() 

    Subject ="test email" 
    email(body, Subject, "[email protected]") 

if __name__ == '__main__': 
    main() 
+0

На самом деле ..gerrit.txt содержит HTML-код. Я хочу, чтобы результат отправлялся по электронной почте в формате HTML, а не тот же точный контент ... Например: содержимое gerrit.txt http://pastie.org/8264638 – user2341103

+0

Просто добавьте a Content-Type: text/html; charset = UTF8', и он будет в формате HTML. – drew010

+0

Можете ли вы указать, какая часть кода должна быть добавлена? Разве это уже нет в коде? – user2341103

Смежные вопросы