Python: «тема» не отображается при отправке электронной почты с помощью модуля smtplib - PullRequest
49 голосов
/ 29 августа 2011

Я успешно могу отправить электронное письмо с помощью модуля smtplib. Но когда сообщение отправлено, оно не включает тему в отправленное электронное письмо.

import smtplib

SERVER = <localhost>

FROM = <from-address>
TO = [<to-addres>]

SUBJECT = "Hello!"

message = "Test"

TEXT = "This message was sent with Python's smtplib."
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()

Как мне написать "server.sendmail", чтобы включить SUBJECT в отправленное письмо.

Если я использую, server.sendmail (FROM, TO, message, SUBJECT), он выдаст ошибку об «smtplib.SMTPSenderRefused»

Ответы [ 6 ]

113 голосов
/ 29 августа 2011

Присоедините его в качестве заголовка:

message = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT)

, а затем:

server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()

Также рассмотрите возможность использования стандартного модуля Python email - это поможет ваммного при написании писем.

11 голосов
/ 17 октября 2014

попробуйте это:

import smtplib
from email.mime.multipart import MIMEMultipart
msg = MIMEMultipart()
msg['From'] = 'sender_address'
msg['To'] = 'reciver_address'
msg['Subject'] = 'your_subject'
server = smtplib.SMTP('localhost')
server.sendmail('from_addr','to_addr',msg.as_string())
6 голосов
/ 29 августа 2011

Вы, вероятно, должны изменить свой код так:

from smtplib import SMTP as smtp
from email.mime.text import MIMEText as text

s = smtp(server)

s.login(<mail-user>, <mail-pass>)

m = text(message)

m['Subject'] = 'Hello!'
m['From'] = <from-address>
m['To'] = <to-address>

s.sendmail(<from-address>, <to-address>, m.as_string())

Очевидно, что переменные <> должны быть действительными строковыми значениями или действительными переменными, я просто заполнил их как заполнители.Это работает для меня при отправке сообщений с темами.

4 голосов
/ 29 августа 2011

Я думаю, вы должны включить это в сообщение:

import smtplib

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP HTML e-mail test

This is an e-mail message to be sent in HTML format

<b>This is HTML message.</b>
<h1>This is headline.</h1>
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Successfully sent email"
except SMTPException:
   print "Error: unable to send email"

код от: http://www.tutorialspoint.com/python/python_sending_email.htm

2 голосов
/ 29 августа 2011

См. Примечание внизу документации smtplib:

In general, you will want to use the email package’s features to construct an email message, which you can then convert to a string and send via sendmail(); see email: Examples.

Вот ссылка на раздел примеров документации email, в которой действительно показано созданиесообщение с темойhttp://docs.python.org/library/email-examples.html#email-examples

Похоже, что smtplib не поддерживает непосредственное добавление темы и ожидает, что сообщение уже будет отформатировано с темой и т. Д. Вот тут и появляется модуль email.

0 голосов
/ 16 июня 2019
 import smtplib

 # creates SMTP session 

List item

 s = smtplib.SMTP('smtp.gmail.com', 587)

 # start TLS for security   
 s.starttls()

 # Authentication  
 s.login("login mail ID", "password")


 # message to be sent   
 SUBJECT = "Subject"   
 TEXT = "Message body"

 message = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT)

 # sending the mail    
 s.sendmail("from", "to", message)

 # terminating the session    
 s.quit()
...