J'ai réussi à envoyer des e-mails à l'aide du module smtplib. Mais lorsque l'emial est envoyé, il n'inclut pas le sujet dans l'e-mail 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"
Attachez-le comme en-tête:
message = 'Subject: {}\n\n{}'.format(SUBJECT, TEXT)
et alors:
server = smtplib.SMTP(SERVER)
server.sendmail(FROM, TO, message)
server.quit()
Pensez également à utiliser le standard Python email
- cela vous aidera beaucoup lors de la composition des e-mails.
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())
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, le <>
les variables doivent être des valeurs de chaîne réelles ou des variables valides, je les ai simplement remplies en tant que marques de réservation. Cela fonctionne pour moi lors de l'envoi de messages avec des sujets.
Je pense que vous devez l'inclure dans le message:
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 de: http://www.tutorialspoint.com/python/python_sending_email.htm
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'] = "[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()
Voir la note au bas de la documentation de 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.
Voici le lien vers la section des exemples de la documentation de email
, qui montre en effet la création d'un message avec une ligne d'objet. http://docs.python.org/library/email-examples.html#email-examples
Il semble que smtplib ne supporte pas directement l'ajout de sujet et s'attend à ce que le msg soit déjà formaté avec un sujet, etc. C'est là que le module email
entre en jeu.
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()