101 votes

Python : "sujet" non affiché lors de l'envoi d'un e-mail à l'aide du module smtplib

Je suis en mesure d'envoyer avec succès des e-mails à l'aide du module smtplib. Mais lorsque l'email est envoyé, il n'inclut pas le sujet dans l'email envoyé.

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

Comment dois-je écrire "server.sendmail" pour inclure également le SUJET dans l'e-mail envoyé.

Si j'utilise server.sendmail(FROM, TO, message, SUBJECT), cela donne une erreur sur "smtplib.SMTPSenderRefused"

191voto

Roman Bodnarchuk Points 12136

Attachez-le comme en-tête :

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

puis:

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

Pensez également à utiliser le module Python standard email - cela vous aidera beaucoup lors de la rédaction d'e-mails.

33voto

emehex Points 2250

Cela fonctionnera avec Gmail et Python 3.6+ en utilisant le nouvel objet "EmailMessage":

 import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg.set_content('This is my message')

msg['Subject'] = 'Subject'
msg['From'] = "me@gmail.com"
msg['To'] = "you@gmail.com"

# Send the message via our own SMTP server.
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.login("me@gmail.com", "password")
server.send_message(msg)
server.quit()

19voto

Hackaholic Points 271

essaye ça:

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

7voto

g.d.d.c Points 20164

Vous devriez probablement modifier votre code en quelque chose comme ceci :

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

De toute évidence, les <> doivent être des valeurs de chaîne réelles ou des variables valides, je les ai juste remplies comme espaces réservés. Cela fonctionne pour moi lors de l'envoi de messages avec des sujets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X