Envoi de courriels avec Python

Envoi de courriels avec Python
L'envoi, la vérification et la réponse aux e-mails sont une tâche longue, surtout lorsque vous le faites pour un grand nombre de personnes ou de clients où il vous suffit de changer le nom, l'adresse, l'âge et l'âge du destinataire et d'autres petites choses. Ce serait une tâche très difficile pour vous d'écrire un programme qui pourrait gérer tous les types de vos e-mails personnels / commerciaux, mais vous pouvez toujours automatiser beaucoup de choses à cet égard, ce qui vous fera finalement gagner beaucoup de temps.

Par exemple, vous souhaitez envoyer un rappel à vos clients pour leurs factures restantes et vous avez toutes les données liées aux clients comme leurs numéros de téléphone, leur adresse, l'âge, etc. Programme simple dans Python pour faire automatiquement cela pour vous. Dans ce tutoriel, nous découvrirons comment fonctionne le protocole de messagerie et comment vous pouvez automatiser le processus pour gagner votre temps précieux.

Un mot sur SMTP

Le protocole de transfert de courrier simple (SMTP) est un équivalent informatisé de votre service postal. Il s'agit d'un protocole qui fonctionne sur la couche d'application d'un réseau TCP / IP. C'est un protocole standard pour envoyer et recevoir des e-mails sur Internet. Le processus de transfert de message.

Par exemple, vous avez un compte Gmail et vous souhaitez envoyer un e-mail à votre ami sur son compte Yahoo. Vous écrivez un e-mail et appuyez sur Send, mais le processus backend est un peu compliqué, et pour comprendre ce processus, vous devrez d'abord comprendre SMTP. Votre client de messagerie SMTP envoie d'abord Hélicoptère (ou Ehlo) Pour le serveur Gmail, vous pouvez dire que cette commande ou cet en-tête est équivalent de Héberger En-tête dans le protocole HTTP et est utilisé pour identifier le serveur à l'aide du nom de domaine. Après HELO ou EHLO, le client s'authentifie au serveur avec le nom d'utilisateur et le mot de passe donné en utilisant Authentification commande. Ensuite, il spécifie l'adresse e-mail de l'expéditeur et du destinataire, puis le corps du message et envoie un e-mail au serveur Gmail. Gmail Server confirmera d'abord que si l'adresse e-mail du destinataire sur Yahoo existe ou non, il enverra l'e-mail à Yahoo Server où le destinataire peut récupérer ses e-mails à partir de.

Smtplib

SMTPLIB est une bibliothèque Python qui peut être utilisée comme client SMTP tout comme votre Gmail, Yahoo, Thunderbird ou tout autre client de messagerie et peut être utilisé pour envoyer des e-mails. Nous pouvons effectuer toutes les tâches en utilisant le client SMTPLIB que nous pouvons faire avec ceux qui ont une interface utilisateur graphique.

Il vient par défaut dans Python, au cas où vous ne l'avez pas, puis vous pouvez installer en utilisant la commande suivante.

ubuntu @ ubuntu: ~ $ pip install smtplib

Ou dans Python3

ubuntu @ ubuntu: ~ $ pip install smtplib

Écrire votre premier e-mail avec Python

Dans ce tutoriel, j'utiliserai un compte Gmail comme expéditeur, je vais également utiliser la console Python, donc il me sera plus facile d'expliquer chaque ligne de code étape par étape. Pour commencer, nous devons permettre à notre accès Gmail à des applications moins sécurisées.

Alors connectez-vous à votre compte Gmail, puis accédez aux paramètres du compte.

Assurez-vous maintenant que l'accès pour les applications moins sécurisées est activée.

Ouvrez maintenant votre console Python et commencez à écrire votre premier e-mail à l'aide de Python

ubuntu @ ubuntu: ~ $ python
Python 2.7.16 (par défaut, 7 octobre 2019, 17:36:04)
[GCC 8.3.0] sur Linux2

Tapez «Help», «Copyright», «Crédits» ou «Licence» pour plus d'informations.

// importe la bibliothèque SMTP
>>> Importer Smtplib
// Connectez-vous au serveur Gmail avec le nom de domaine et le numéro de port (ce paramètre diffère pour
Chaque fournisseur de messagerie, veuillez jeter un œil à la table ci-dessous)
>>> mailoBj = smtplib.SMTP ('SMTP.Gmail.com ', 587)
// Dites bonjour au serveur
>>> MailoBj.ehlo ()
(250, 'SMTP.Gmail.com à votre service, [103.255.4.246] \ nSize35882577 \ n8bitmime \ nstarttls \
NenhancedStatudes \ npipelining \ nchunking \ nsmtputf8 ')
// Le port 587 signifie que nous utilisons la connexion TLS cryptée, alors démarrez TLS crypté
Communication utilisant starttls (), afin que nos informations d'identification et nos messages ne soient pas reniflés
>>> MailoBj.startTls ()
(220, '2.0.0 prêt à démarrer TLS ')
// Connectez-vous à votre compte Gmail à l'aide de l'e-mail et du mot de passe
>>> MailoBj.connexion ('expéditeur @ gmail.com ',' S3CR3T_P4SSW0RD ')
(235, '2.7.0 accepté ')
// Spécifiez l'adresse e-mail de l'expéditeur et du destinataire et le contenu e-mail
>>> MailoBj.sendmail ('expéditeur @ gmail.com ',' usamaazad13141 @ gmail.com ',' Sujet:
Bonjour le monde! \ n Hello World! Ceci est mon premier e-mail Hello Hello World dans Python ')

// Fermer la connexion au serveur Gmail
>>> MailoBj.arrêter()
(221, '2.0.0 Clôture Connexion B6SM4519863LFI.72 - gsmtp ')

Dans le programme d'échantillons ci-dessus, remplacez le contenu donné par le vôtre. Si vous n'êtes pas un utilisateur de Gmail, vous pouvez utiliser le serveur de messagerie de votre fournisseur. Voici la liste des noms de domaine et des ports de certains fournisseurs de courrier communs.

Nom Nom de domaine du serveur Port
Gmail smtp.Gmail.com 587
Outlook / Hotmail SMTP-MAIL.perspectives.com 587
Yahoo Mail smtp.poster.yahoo.com 587
Verizon smtp.Verizon.filet 465
Comcast smtp.comcast.filet 587

Quelques mots sur IMAP

Nous venons donc d'étudier que SMTP est utilisé pour envoyer des e-mails, mais ce qui est IMAP (Internet Access Messageing Protocol) pour? SMTP ne peut pas être utilisé pour rechercher et recevoir des e-mails à partir du serveur, IMAP ou POP3 Le protocole est utilisé à cette fin.

Imapclient, imaplib et pyzmail

Il existe deux grandes bibliothèques en Python qui peuvent être utilisées comme client IMAP pour trouver, récupérer et supprimer les e-mails du serveur de messagerie. Python a défaut imaplib bibliothèque mais une autre bibliothèque externe imapclient est plus efficace et facile à utiliser. Dans ce tutoriel, nous utiliserons imapclient Pour récupérer les e-mails du serveur de messagerie.

Le problème avec imapclient est qu'il récupère les e-mails du serveur de messagerie au format brut. Alors, nous aurons besoin pyzmail Bibliothèque en tant que analyseur pour une sortie conviviale. Pour installer les deux bibliothèques, tapez

ubuntu @ ubuntu: ~ $ sudo pip install imapclient
ubuntu @ ubuntu: ~ $ sudo pip install pyzmail

Obtenir vos e-mails à partir du serveur de messagerie

Maintenant, nous apprendrons à rechercher et à télécharger des e-mails depuis le serveur de messagerie à l'aide d'IMAPClient. Nous utiliserons IMAPClient pour rechercher et télécharger des e-mails depuis le serveur, puis nous utiliserons Pyzmail pour analyser ce contenu brut. Faisons

// Importer la bibliothèque IMAPClient
>>> Importer IMAPClient
// Connectez-vous au serveur IMAP de Gmail
>>> obj = imapclient.IMAPCLIENT ('IMAP.Gmail.com ', ssl = true)
// Connectez-vous à votre compte de messagerie en utilisant vos informations d'identification
>>> obj.Login ('SecretAccount @ gmail.com ',' s3cr4tp4ss ')
'SecretAccount @ gmail.com authentifié (succès) '
// Sélectionnez le dossier de message à lire I.Ebox de réception, brouillons, courriers envoyés
>>> obj.select_folder ('inbox', readonly = true)
'Exists': 830, 'permanentflags': (), 'highestmodseq': 112999, 'uidnext': 931,
'Flags': ('\\ Réponction', '\\ Flagged', '\\ Draft', '\\ Deleted', '\\ voir',
'$ Notphishing', '$ phishing'), 'uidvalidity': 1, 'read only': ["], 'récent': 0
// Recherchez vos messages dans votre boîte de réception ou appliquez un filtre, le filtre ci-dessous s'affichera
vous les mails reçus après le 25-oct-2019
>>> mail_ids = obj.Search (['depuis', '25 -oct-2019 '])
>>> Mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// La liste «Mail_ids» contient une liste des identifiants e-mail reçus depuis le 25-oct-2019,
Vous pouvez télécharger un e-mail à l'aide de la fonction de récupération imapclient.
>>> raw_mail = obj.Fetch ([919], ['corps []', 'Flags'])
// Maintenant, le contenu de la variable Raw_mail est en format brut, il ne peut pas être affiché sur le
Écran directement, nous aurions donc besoin d'un analyseur pour analyser ce contenu pour une sortie conviviale
>>> importer pyzmail
>>> message = pyzmail.Pyzmessage.Factory (Raw_mail [919] ['Body []'])
// maintenant le courrier électronique est analysé et stocké en variable de message, pour obtenir le sujet de
l'e-mail, utilisez la fonction get_subject
>>> Message.get_subject ()
u'rurez vos compétences cet Halloween avec 25% de réduction '
// De même, vous pouvez voir les détails de l'expéditeur
>>> Message.get_address ('from')
[(u'usama azad ',' usamaazad13141 @ gmail.com ')]
>>> Message.get_address ('to')
[(u'SecretAccount @ gmail.com ',' SecretAccount @ gmail.com ')]
// Pour obtenir le corps de l'e-mail, tapez
>>> Message.text_part.get_payload ().décoder (message.text_part.Charset)
u "salut! Profitez d'un plat de 25% sur nos cours premium »

Si vous avez un compte dans un autre fournisseur de services de messagerie autre que Gmail, vous pouvez vous connecter à leur serveur IMAP. Voici la liste des noms de domaine IMAP de certains fournisseurs de courrier célèbres.

Fournisseur Nom de domaine pour le serveur IMAP
Yahoo iMap.poster.yahoo.com
Hotmail / Outlook imap-met.perspectives.com
Verizon entrant.Verizon.filet
Comcast iMap.comcast.filet
AT&T iMap.poster.att.filet

Suppression de votre e-mail du serveur IMAP

Semblable à la recherche et à la récupération des e-mails du serveur, vous pouvez également supprimer les e-mails de votre serveur de messagerie à l'aide de leur UID. Suivez simplement les étapes données

// Pour supprimer un e-mail, vous devez transformer uniquement en «faux» pour obtenir un accès en écriture à votre
e-mails
>>> obj.select_folder ('inbox', readonly = false)
>>> mail_ids = obj.Search (['depuis', '25 -oct-2019 '])
>>> Mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Fournit un e-mail UID ou une liste d'UIDS de messagerie, après avoir exécuté la commande ci-dessous,
Votre e-mail sera disparu de la boîte de réception.
>>> obj.Delete_Messages (919)
919: ('\\ voir', '\\ supprimé')
// Cette commande supprimera en permanence vos e-mails du serveur de messagerie
>>> obj.effacer()
('Succès', [])

https: // techtopz.com / build-a-birthday-reminder-application in-python-on-mac /

Faire votre propre rappel d'anniversaire

Vous avez des anniversaires de vos amis dans les prochains mois et vous voulez leur souhaiter leur anniversaire. Mais vous avez beaucoup de travail dans votre bureau et il est possible que vous oubliez de leur souhaiter. Ainsi, cette tâche peut être effectuée automatiquement à l'aide de Python. Voici le code pour effectuer cette tâche.

// Importation de modules
Importer RE
// Le module OS est utilisé pour effectuer des tâches du système d'exploitation i.E Accès aux directions
Importer un système d'exploitation
Importer DateTime
importer smtplib
// définir une fonction qui envoie des e-mails
def send_mail (reciever_mail_address, nom):
Sender_Mail_Address = "SenderMailAddress @ Gmail.com "
passwd = "SenderPasswd"
// Connexion au serveur Gmail avec le nom de domaine et le numéro de port
obj = smtplib.SMTP ('SMTP.Gmail.com ', 587)
obj.ehlo ()
obj.startTls ()
// Connexion à votre compte Gmail
obj.Login (Sender_Mail_Address, Passwd)
// Envoi du courrier à 'reciever_mail_address'.
obj.sendmail (Sender_Mail_Address, Reciever_Mail_Address, "Sujet: anniversaire souhaitant le courrier \ n \ n happybirthday" + nom)
// Fin de la connexion
obj.arrêter()
// Corps principal
// Aller au répertoire dans lequel des données contenant des fichiers sont présentes
OS.chdir ("path_to_birthday_data_file")
tandis que 1:
// Obtenir la date et l'heure du moment présent
Aujourd'hui = DateTime.DateTime.aujourd'hui()
Aujourd'hui = str (aujourd'hui)
// Obtenir l'année en cours, mois, jour, heure, minute et deuxième
current_year = aujourd'hui [0: 4]
current_month = aujourd'hui [5: 7]
current_day = aujourd'hui [8:10]
current_hour = aujourd'hui [11:13]
Current_Minute = Today [14:16]
current_sec = aujourd'hui [17:19]
// Ouverture du fichier d'anniversaire dans l'objet 'Birthday_file' en mode lecture
anniversaire_file = open ('anniversaire_file', 'r')
// Enregistrer toutes les lignes de 'Birthday_file' dans la liste des lignes
lignes = anniversaire_file.LEADLINES ()
// Clôture de l'objet 'Birthday_file'
anniversaire_file.fermer()
// Lire chaque ligne en utilisant pour Loop
Pour la ligne en lignes:
// Faire une expression régulière pour trouver une date dans 'anniversaire_file'
dateEx = re.compile (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.Recherche (ligne)
date = findDate.groupe()
// Obtenir anniversaire_month et anniversaire_day à partir du fichier
anniversaire_month = date [5: 7]
anniversaire_day = date [8:10]
// Faire une expression régulière pour trouver l'adresse mail de Birthday_file
MailEx = RE.compiler (r "\ w * @ \ w *.com ")
findmail = MailEx.Recherche (ligne)
reciver_mail = findmail.groupe()
// Faire une expression régulière pour trouver le nom de la personne
nameEx = re.compiler (r "\ w *")
findName = nameEx.Recherche (ligne)
name = findName.groupe()
// Vérifiez si l'anniversaire de quelqu'un arrive ou non
Si current_month == anniversaire_month et = current_day == anniversaire_day:
// Envoi du courrier à exactement 08:00
si current_hour == '08' et current_minute == '00' et current_sec == '00':
// appelle la fonction 'Send_mail'
send_mail (reciever_mail, nom)

Maintenant, nous faisons un `` anniversaire_file '', dans lequel nous enregistrons des noms, des adresses e-mail et leur date de naissance. Ceci est un fichier texte simple et ressemble à ceci.

Explication

Nous allons lire ce fichier à l'aide du script Python et vérifier à qui l'anniversaire arrive et leur souhaitons. Tout d'abord, nous importerons des modules. Le module DateTime a des fonctions qui nous donnent la date et l'heure actuelles et bien d'autres. Mais nous ne l'utiliserons que pour trouver la date et l'heure actuelles. Le module SMTPLIB est utilisé pour envoyer du courrier et a été expliqué ci-dessus. Le module RE a des fonctions qui sont utilisées pour trouver une expression régulière à partir d'une chaîne.

Dans ce script, nous définissons la fonction 'Send_mail', qui envoie le courrier au 'reciever_mail_address', dont le nom est 'name'. Les deux arguments sont transmis à la fonction du corps principal de MSG. Dans le corps principal du script, nous verrons comment nous trouvons 'reciever_mail_address' et 'name'.

L'envoi d'e-mails à l'aide de SMTPLIB a été expliqué ci-dessus, vous pouvez donc le lire et il ne sera pas discuté ici.

Dans le corps principal, nous allons au répertoire où nous avons sauvé `` anniversaire_file '' using 'OS.chdir () '. Ensuite, nous avons une `` boucle '', ce qui est toujours vrai, donc il vérifiera en continu l'anniversaire. Maintenant, nous obtenons la date et l'heure actuelles et l'enregistrons dans la variable «aujourd'hui». Ça ressemble à ça.

2019-11-01 16:19:07.144925

Nous extraire nous extraire l'année, le mois, le jour, l'heure, les minutes et les secondes en utilisant des indices de ces quantités. Après cela, nous ouvrirons Birthday_file dans un objet 'Birthday_file' en mode lecture, afin que nous ne puissions le lire que. Nous allons maintenant enregistrer toutes les lignes de ce fichier dans la liste des lignes. 'anniversaire_file.ReadLines () «Enregistrera chaque ligne dans la liste des« lignes ». Après cela, nous fermerons Birthday_file en utilisant 'anniversaire_file.FONCTION () '.

Maintenant, nous allons lire chaque ligne une par une en utilisant pour Loop. Dans chaque ligne, les données d'une seule personne sont disponibles dans `` Birthday_file '', nous lisons donc les données d'une seule personne à la fois de cette boucle.

Après cela, nous extrairera la date de naissance, l'adresse e-mail et le nom de la personne à l'aide du module RE. Comme nous avons écrit la date dans le format suivant

Yyyy-mm-dd

Nous allons donc faire une expression régulière «DateEx» qui trouve ce format dans la ligne.

concernant.compile (r ”\ d 4 - \ d 2 - \ d 2”)

Commande ci-dessus Trouver une chaîne qui a «4 chiffres» suivi de «-« puis «2 chiffres» suivis de «-» et «2 chiffres». Cela nous donnera la date de naissance de la personne afin que nous extraire Birth_day et Birth_Month de cette expression.

De même, nous trouverons l'adresse e-mail en utilisant des expressions régulières. Après cela, nous comparerons les anniversaire_month et current_month et anniversaire_day et current_day. Si ces conditions sont remplies, nous enverrons l'e-mail d'anniversaire en utilisant la fonction 'Send_mail' à Exact '08: 00 '.

Exécution du script automatiquement via Cronjob

Maintenant, nous nous assurerons que ce script Python s'exécute à chaque fois. Pour ce faire, nous ajouterons cette tâche à Crontab. Crontab, dans Linux, est utilisé pour effectuer des tâches automatiquement. Ce que nous devons faire, c'est simplement ajouter la tâche à Crontab. Pour ce faire, suivez les étapes données.

  1. Ouvrez Crontab pour ajouter une tâche dans votre terminal en utilisant la commande suivante
ubuntu @ ubuntu: ~ $ crontab -e
  1. À la fin de ce fichier, entrez la commande suivante sans #
@reboot python path_to_the_script

Les commandes ci-dessus permettra à votre système d'exécuter le script Python chaque fois que vous redémarrez votre système. De cette façon, votre système exécutera le script Python à chaque fois lorsque votre système sera allumé.