J'utilise la méthode suivante pour envoyer du courrier à partir de Python en utilisant SMTP. Est-ce la bonne méthode à utiliser ou y a-t-il des pièges qui me manquent?
from smtplib import SMTP
import datetime
debuglevel = 0
smtp = SMTP()
smtp.set_debuglevel(debuglevel)
smtp.connect('YOUR.MAIL.SERVER', 26)
smtp.login('USERNAME@DOMAIN', 'PASSWORD')
from_addr = "John Doe <[email protected]>"
to_addr = "[email protected]"
subj = "hello"
date = datetime.datetime.now().strftime( "%d/%m/%Y %H:%M" )
message_text = "Hello\nThis is a mail from your server\n\nBye\n"
msg = "From: %s\nTo: %s\nSubject: %s\nDate: %s\n\n%s"
% ( from_addr, to_addr, subj, date, message_text )
smtp.sendmail(from_addr, to_addr, msg)
smtp.quit()
Réponses:
Le script que j'utilise est assez similaire; Je le poste ici comme exemple d'utilisation des modules email. * Pour générer des messages MIME; donc ce script peut être facilement modifié pour joindre des images, etc.
Je compte sur mon FAI pour ajouter l'en-tête de date et d'heure.
Mon FAI me demande d'utiliser une connexion smtp sécurisée pour envoyer du courrier, je compte sur le module smtplib (téléchargeable sur http://www1.cs.columbia.edu/~db2501/ssmtplib.py )
Comme dans votre script, le nom d'utilisateur et le mot de passe (donnés ci-dessous), utilisés pour s'authentifier sur le serveur SMTP, sont en texte brut dans la source. C'est une faiblesse de sécurité; mais la meilleure alternative dépend de la prudence dont vous avez besoin (voulez?) pour les protéger.
========================================
la source
from ssmtplib import SMTP_SSL as SMTP
parfrom smtplib import SMTP_SSL as SMTP
, et cet exemple fonctionnerait à partir de la bibliothèque Python standard.msg['To'] = ','.join(destination)
, sinon la destination n'est pas affichée dans gmailLa méthode que j'utilise couramment ... pas très différente mais un peu
C'est tout
la source
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText
De plus, si vous voulez faire l'authentification smtp avec TLS par opposition à SSL, il vous suffit de changer le port (utilisez 587) et de faire smtp.starttls (). Cela a fonctionné pour moi:
la source
Le principal inconvénient que je vois est que vous ne gérez aucune erreur: .login () et .sendmail () ont tous deux des exceptions documentées qu'ils peuvent lancer, et il semble que .connect () doit avoir un moyen d'indiquer que c'était impossible de se connecter - probablement une exception levée par le code de socket sous-jacent.
la source
Assurez-vous qu'aucun pare-feu ne bloque SMTP. La première fois que j'ai essayé d'envoyer un e-mail, il a été bloqué à la fois par le pare-feu Windows et McAfee - il a fallu une éternité pour les trouver tous les deux.
la source
Et ça?
la source
le code suivant fonctionne bien pour moi:
Réf: http://www.mkyong.com/python/how-do-send-email-in-python-via-smtplib/
la source
smtpserver.close()
Cela doit être:,smtpserver.quit()
carclose()
ne mettra pas fin à la connexion TLS correctement!close()
sera appelé pendantquit()
.Vous devez vous assurer de formater la date dans le format correct - RFC2822 .
la source
L'exemple de code que j'ai fait pour envoyer du courrier en utilisant SMTP.
la source
Voir toutes ces réponses longues? S'il vous plaît, permettez-moi de me promouvoir en faisant tout cela en quelques lignes.
Importez et connectez:
Ensuite, ce n'est qu'une seule ligne:
Il se fermera en fait lorsqu'il sortira de sa portée (ou pourra être fermé manuellement). De plus, cela vous permettra d'enregistrer votre nom d'utilisateur dans votre trousseau de clés afin que vous n'ayez pas à écrire votre mot de passe dans votre script (cela m'a vraiment dérangé avant d'écrire
yagmail
!)Pour le package / installation, trucs et astuces, veuillez consulter git ou pip , disponible pour Python 2 et 3.
la source
tu peux faire comme ça
la source
Voici un exemple de travail pour Python 3.x
la source
Sur la base de cet exemple, j'ai créé la fonction suivante:
si vous passez seulement
body
, un courrier en texte brut sera envoyé, mais si vous passez unhtml
argument avecbody
argument, un courrier électronique html sera envoyé (avec un retour au contenu texte pour les clients de messagerie qui ne prennent pas en charge les types html / mime).Exemple d'utilisation:
Btw. Si vous souhaitez utiliser gmail comme serveur SMTP de test ou de production, activez l'accès temporaire ou permanent aux applications moins sécurisées:
la source