Ich kann mit dem smtplib-Modul erfolgreich E-Mails senden. Wenn die E-Mail gesendet wird, ist der Betreff in der gesendeten E-Mail nicht enthalten.
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()
Wie soll ich "server.sendmail" schreiben, damit das SUBJECT auch in der gesendeten E-Mail enthalten ist?.
Wenn ich server.sendmail (FROM, TO, message, SUBJECT) verwende, gibt es einen Fehler über "smtplib.SMTPSenderRefused".
Hänge es als Header an:
message = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT)
und dann:
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
Erwägen Sie auch die Verwendung des Standardmoduls Python= email
- es wird Ihnen beim Verfassen von E-Mails sehr helfen.
versuche dies:
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())
Sie sollten Ihren Code wahrscheinlich folgendermaßen ändern:
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())
Offensichtlich ist die <>
Variablen müssen tatsächliche Zeichenfolgenwerte oder gültige Variablen sein. Ich habe sie nur als Platzhalter ausgefüllt. Dies funktioniert bei mir beim Versenden von Nachrichten mit Betreff.
Ich denke, Sie müssen es in die Nachricht aufnehmen:
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"
code von: http://www.tutorialspoint.com/python/python_sending_email.htm
Dies funktioniert mit Google Mail und Python= 3.6+ mit dem neuen Objekt "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()
Beachten Sie den Hinweis am Ende der smtplib-Dokumentation:
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.
Hier ist der Link zum Beispielabschnitt der Dokumentation von email
, in dem die Erstellung einer Nachricht mit einer Betreffzeile dargestellt ist. http://docs.python.org/library/email-examples.html#email-examples
Es scheint, dass smtplib das Hinzufügen von Betreffs nicht direkt unterstützt und erwartet, dass die Nachricht bereits mit einem Betreff usw. formatiert ist. Hier kommt das Modul email
ins Spiel.
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()