J'ai besoin à des fins de test de remplir quelques centaines de boîtes e-mail avec divers messages, et j'allais utiliser smtplib pour cela. Mais entre autres, je dois être capable d'envoyer des messages non seulement à des boîtes aux lettres spécifiques, mais également en CC et en BCC. Il ne semble pas que smtplib prenne en charge CC-ing et BCC lors de l'envoi d'e-mails.
Vous recherchez des suggestions pour envoyer des messages CC ou BCC à partir du script python.
(Et - non, je ne crée pas de script pour spammer quiconque en dehors de mon environnement de test.)
L'essentiel est d'ajouter les destinataires sous forme de liste d'identifiants de messagerie dans votre appel sendmail.
la source
msg['BCC']
désactivé - il révèle votre expéditeur masqué et n'a aucun impact sur le fait que le message lui soit envoyé ou non (les arguments pour lesendmail
faire).N'ajoutez pas l'en-tête Cci.
Voir ceci: http://mail.python.org/pipermail/email-sig/2004-September/000151.html
Et ceci: "" "Notez que le deuxième argument de sendmail (), les destinataires, est passé sous forme de liste. Vous pouvez inclure n'importe quel nombre d'adresses dans la liste pour que le message soit remis à chacun d'eux à tour de rôle. Depuis l'enveloppe les informations sont distinctes des en-têtes de message, vous pouvez même envoyer quelqu'un en BCC en l'incluant dans l'argument de la méthode mais pas dans l'en-tête du message. "" "de http://pymotw.com/2/smtplib
la source
Depuis Python 3.2, publié en novembre 2011, le smtplib a une nouvelle fonction
send_message
au lieu de justesendmail
, ce qui facilite le traitement de To / CC / BCC. En tirant des exemples d'e-mails officiels de Python , avec quelques légères modifications, nous obtenons:L'utilisation des en-têtes fonctionne correctement , car send_message respecte BCC comme indiqué dans la documentation :
Avec
sendmail
il était courant d'ajouter les en-têtes CC au message, en faisant quelque chose comme:Ou
Le problème est que la fonction sendmail traite tous ces en-têtes de la même manière, ce qui signifie qu'ils seront envoyés (visiblement) à tous les utilisateurs To: et BCC:, ce qui va à l'encontre des objectifs de BCC. La solution, comme indiqué dans de nombreuses autres réponses ici, était de ne pas inclure BCC dans les en-têtes, mais uniquement dans la liste des e-mails passés à
sendmail
.La mise en garde est que cela
send_message
nécessite un objet Message, ce qui signifie que vous devrez importer une classe depuisemail.message
au lieu de simplement passer des chaînes danssendmail
.la source
La distinction entre TO, CC et BCC ne se produit que dans les en-têtes de texte. Au niveau SMTP, tout le monde est un destinataire.
TO - Il y a un en-tête TO: avec l'adresse de ce destinataire
CC - Il y a un en-tête CC: avec l'adresse de ce destinataire
BCC - Ce destinataire n'est pas du tout mentionné dans les en-têtes, mais reste un destinataire.
Si tu as
Vous avez trois destinataires. Les en-têtes dans le corps de l'e-mail comprendront uniquement le TO: et le CC:
la source
Vous pouvez essayer MIMEText
puis envoyez msg.as_string ()
https://docs.python.org/3.6/library/email.examples.html
la source
Cela n'a pas fonctionné pour moi jusqu'à ce que je crée:
et que le cc ajouté dans le destinataire [liste] comme:
la source
Aucune des choses ci-dessus n'a fonctionné pour moi car j'avais plusieurs destinataires à la fois en «to» et en «cc». J'ai donc essayé comme ci-dessous:
et étendez les 'destinataires' avec 'cc_recipients' et envoyez du courrier de manière triviale
la source