webentwicklung-frage-antwort-db.com.de

Python: "Betreff" wird beim Senden von E-Mails mit dem smtplib-Modul nicht angezeigt

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".

51
nsh

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.

120

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())
13
Hackaholic

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.

6
g.d.d.c

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

4
Martin

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()
2
emehex

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.

2
jeffcook2150
 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()
1
King_Avi