2014-02-07 3 views
0

Я пытаюсь отправить электронное письмо с использованием скрипта Python, но каким-то образом в формате, который я ожидаю, что письмо поступит в мой почтовый ящик, оно не приходит в этом формате. Ниже мой метод, который отправляет электронное письмо -Как отправить правильно отформатированное письмо с помощью Python и SMTP?

def send_mail(data): 
    sender = '[email protected]' 
    receivers = ['[email protected]'] 

    message = """From: [email protected] 
    To: [email protected] 
    Subject: Send mail from python!! 

    """ 
    body = 'Some Text\n' 
    for item in data: 
     body = body + '{name} - {res}\n'.format(name=item['name'], res=item['res']) 

    message = message + body 

    try: 
     smtpObj = smtplib.SMTP('corp.host.com') 
     smtpObj.sendmail(sender, receivers, message) 
     print "Mail sent" 
    except smtplib.SMTPException: 
     print "You can't spam. Mail sending failed!" 

Здесь данные имеют только пару ключ-значение.

И я получаю по электронной почте, как это в моем Outlook, почтовый ящик -

В разделе в моем мировоззрении From: ниже строки приходит, как это что неправильно -

[email protected] To: [email protected] Subject: Send mail from python!! 

И To:, Subject: раздел идет как Empty, что тоже неправильно.

И в теле я вижу все, приходя в одной строке, но я хочу, результат будет показан -

Some Text 

machinA - 0 
machineB - 0 
machineC - 0 

Как я могу представить мои данные, чтобы показать, как это в моем почтовом ящике Outlook?

+1

Заголовки должны быть разделены символом \ r \ n. Используйте классы электронной почты для создания правильного сообщения. – Max

+0

@Max здесь правильный. Похоже, у вас есть это сейчас, но если вам нужен пример, сообщите нам об этом. – Feign

+0

уверен ... можете ли вы привести пример на моем примере? – AKIWEB

ответ

1

С тройным котированием заповедников всех пространствами, вы случайно отправки:

From: [email protected] 
     To: [email protected] 
     Subject: Send mail from python!! 

Это вызывает заголовок разворачивание: отступ линия означает, что заголовок продолжается. Так что это действительно плохо отформатированный заголовок From. Вы должны убедиться, что нет посторонних пробелов. Это исправляет ваш текущий пример:

def send_mail(data): 
    sender = '[email protected]' 
    receivers = ['[email protected]'] 

    message = """\ 
From: [email protected] 
To: [email protected] 
Subject: Send mail from python!! 
""" 
    body = '\n\nSome Text\n' 
    for item in data: 
     body = body + '{name} - {res}\n'.format(name=item['name'], res=item['res']) 

    message = message + body 

    try: 
     smtpObj = smtplib.SMTP('corp.host.com') 
     smtpObj.sendmail(sender, receivers, message) 
     print "Mail sent" 
    except smtplib.SMTPException: 
     print "You can't spam. Mail sending failed!" 

Однако вы не должны вручную создавать сообщения вообще. Python включает в себя набор прекрасных классов в email.message для построения сообщения.

import email.message 

m = email.message.Message() 
m['From'] = "[email protected]" 
m['To'] = "[email protected]" 
m['Subject'] = "Send mail from python!!" 

m.set_payload("Your text only body"); 

Теперь вы можете превратить свое сообщение в строку:

>>> m.as_string() 
'To: [email protected]\nFrom: [email protected]\nSubject: Send mail from python!!\n\nyour text-only body' 

Я предупреждаю вас, правильно дело с электронной почтой очень большой и сложный вопрос, и если вы хотите использовать не- ascii, вложения и т. д., есть немного кривая обучения, и вам нужно будет использовать все возможности библиотеки mail.message, в которой есть много документации, которую вы должны прочитать и понять.

+0

Спасибо за предложение .. Теперь я могу правильно видеть разделы From, To и Subject. Но данные не появляются в моем почтовом теле вообще. Только разделы From, To и Subject работают нормально. Любая идея, почему это происходит? – AKIWEB

+0

Я пробовал с вашим первым вариантом, так как мои данные довольно просты и понятны, поэтому теперь с первым вариантом. – AKIWEB

+0

Вам нужно два \ n после темы.Либо добавьте их в раздел заголовков, либо перед своим телом. – Max

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