Python: "объект" не отображается при отправке электронной почты с использованием модуля smtplib
Я успешно могу отправить электронное письмо с помощью модуля smtplib. Но когда отправляется emial, он не включает тему в отправленное сообщение.
import smtplib
SERVER = <localhost>
FROM = <from-address>
TO = [<to-addres>]
SUBJECT = "Hello!"
message = "Test"
TEXT = "This message was sent with Python smtplib."
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
Как мне написать "server.sendmail", чтобы включить SUBJECT, а также в отправленное сообщение.
Если я использую server.sendmail(FROM, TO, message, SUBJECT), он дает ошибку о "smtplib.SMTPSenderRefused"
Ответы
Ответ 1
Прикрепите его как заголовок:
message = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT)
а затем:
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
Также рассмотрите возможность использования стандартного модуля Python email
- это поможет вам при составлении электронных писем.
Ответ 2
попробуйте следующее:
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())
Ответ 3
Вероятно, вы должны изменить свой код примерно так:
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
Я думаю, вы должны включить его в сообщение:
import smtplib
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
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
Ответ 5
См. примечание внизу документации 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 не поддерживает непосредственное добавление объекта и ожидает, что msg уже будет отформатирован с субъектом и т.д. Что там входит модуль email
.
Ответ 6
Это будет работать с Gmail и Python 3. 6+ с использованием нового объекта "EmailMessage":
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg.set_content('This is my message')
msg['Subject'] = 'Subject'
msg['From'] = "[email protected]"
msg['To'] = "[email protected]"
# Send the message via our own SMTP server.
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.login("[email protected]", "password")
server.send_message(msg)
server.quit()
Ответ 7
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()