Python

Envoi d'emails avec Python

Envoi d'emails avec Python
Envoyer, vérifier et répondre aux e-mails est une tâche qui prend du temps, surtout lorsque vous le faites pour un grand nombre de personnes ou de clients où vous n'avez qu'à changer le nom, l'adresse, l'âge et d'autres petites choses du destinataire. 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 / professionnels, mais vous pouvez toujours automatiser beaucoup de choses à cet égard, ce qui vous fera gagner beaucoup de temps.

Par exemple, vous souhaitez envoyer un rappel à vos clients pour leurs factures restantes et vous avez toutes les données relatives aux clients comme leurs numéros de téléphone, leur adresse, leur âge, etc. dans une feuille Excel ou une base de données. Au lieu de le faire manuellement, vous pouvez écrire un programme simple en Python pour le faire automatiquement pour vous. Dans ce tutoriel, nous allons apprendre comment fonctionne le protocole de messagerie et comment vous pouvez automatiser le processus pour gagner un temps précieux.

Un mot sur SMTP

Simple Mail Transfer Protocol (SMTP) est l'équivalent informatisé de votre service postal. C'est un protocole qui fonctionne sur la couche 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 courrier consiste en l'envoi et la réception d'e-mails par les serveurs de messagerie et les clients.

Par exemple, vous avez un compte GMAIL et vous souhaitez envoyer un email à votre ami sur son compte YAHOO. Vous écrivez un e-mail et appuyez sur envoyer, 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 HELLO (ou alors EHLO) au serveur GMAIL, vous pouvez dire que cette commande ou cet en-tête équivaut à Hôte 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 auprès du serveur avec le nom d'utilisateur et le mot de passe donnés en utilisant AUTH commander. 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. Le serveur GMAIL confirmera d'abord que l'adresse e-mail du destinataire sur YAHOO existe ou non, puis il enverra l'e-mail au serveur YAHOO où le destinataire pourra 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ée 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 en Python, si vous ne l'avez pas, vous pouvez l'installer à l'aide de la commande suivante.

[email protected]:~$ pip install smtplib

OU en Python3

[email protected]:~$ pip install smtplib

Rédiger votre premier e-mail avec Python

Dans ce tutoriel, j'utiliserai un compte GMAIL comme expéditeur, j'utiliserai également la console Python, il me sera donc plus facile d'expliquer chaque ligne de code étape par étape. Pour commencer, nous devons autoriser 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 aux applications moins sécurisées est activé.

Ouvrez maintenant votre console python et commencez à écrire votre premier e-mail en utilisant Python

[email protégé] : ~$ python
Python 2.7.16 (par défaut, le 7 octobre 2019, 17:36:04)
[CCG 8.3.0] sur linux2

Tapez "aide", "droit d'auteur", "crédits" ou "licence" pour plus d'informations.

//importe la bibliothèque SMTP
>>> importer smtplib
// se connecte 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 consulter le tableau ci-dessous)
>>> mailobj = smtplib.SMTP('smtp.Gmail.com',587)
//bonjour au serveur
>>> mailobj.ehlo()
(250, 'smtp.Gmail.com à votre service, [103.255.4.246]\nSIZE35882577\n8BITMIME\nSTARTTLS\
nENHANCEDSTATUSCODES\nPIPELING\nCHUNKING\nSMTPUTF8')
//Le port 587 signifie que nous utilisons une connexion TLS cryptée, alors démarrez TLS crypté
communication à l'aide de 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'email et du mot de passe
>>> mailobj.login('[email protected]','s3cr3t_p4ssw0rd')
(235, '2.7.0 Accepté')
//spécifier l'adresse e-mail de l'expéditeur et du destinataire et le contenu de l'e-mail
>>> mailobj.sendmail('[email protected]','[email protected]','Subject :
Bonjour le monde! \n Bonjour tout le monde! c'est mon premier e-mail hello world en Python')

// ferme la connexion au serveur GMAIL
>>> mailobj.quitter()
(221, '2.0.0 connexion de fermeture b6sm4519863lfi.72 - gsmtp')

Dans l'exemple de programme 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 messagerie courants.

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.rapporter 465
Comcast smtp.comcast.rapporter 587

Quelques mots sur IMAP

Nous venons donc d'étudier que SMTP est utilisé pour envoyer des e-mails, mais à quoi sert IMAP (Internet Access Messaging Protocol)? SMTP ne peut pas être utilisé pour rechercher et obtenir des e-mails du serveur, le protocole IMAP ou POP3 est utilisé à cette fin.

IMAPCLIENT, IMAPLIB et PYZMAIL

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

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

[email protected]:~$ sudo pip install imapclient
[email protected]:~$ sudo pip install pyzmail

Récupérer vos e-mails depuis le serveur de messagerie

Maintenant, nous allons apprendre à rechercher et télécharger des e-mails à partir du serveur de messagerie à l'aide d'imapclient. Nous utiliserons imapclient pour rechercher et télécharger des e-mails à partir du serveur, puis nous utiliserons pyzmail pour analyser ce contenu brut. Faisons

// importer la bibliothèque imapclient
>>> importer imapclient
// Connexion au serveur IMAP de GMAIL
>>> obj = client imap.IMAPClient('imap.Gmail.com',ssl=Vrai)
// Connectez-vous à votre compte de messagerie en utilisant vos identifiants
>>> obj.login('[email protected]','s3cr4tp4ss')
'[email protected] authentifié (Succès)'
// Sélectionnez le dossier de messages à lire i.e INBOX, BROUILLONS, E-MAILS ENVOYÉS
>>> obj.select_folder('INBOX', readonly=True)
'EXISTS' : 830, 'PERMANENTFLAGS' : (), 'HIGHESTMODSEQ' : 112999, 'UIDNEXT' : 931,
'DRAPEAU' : ('\\Répondu', '\\Averti', '\\Brouillon', '\\Supprimé', '\\Vu',
'$NotPhishing', '$Phishing'), 'UIDVALIDITY' : 1, 'LECTURE SEULE' : ["], 'RECENT' : 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.recherche(['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 email reçus depuis le 25-Oct-2019,
vous pouvez télécharger un e-mail en utilisant la fonction de récupération imapclient.
>>> raw_mail = obj.récupérer([919],['BODY[]','DRAPEAU'])
// Maintenant, le contenu de la variable raw_mail est au format brut, il ne peut pas être affiché sur le
screen directement, nous aurions donc besoin d'un analyseur pour analyser ce contenu pour une sortie conviviale
>>> importer pyzmail
>>> message = pyzmail.PyzMessage.usine(raw_mail[919]['BODY[]'])
// Maintenant, l'e-mail est analysé et stocké dans la variable message, pour obtenir le sujet de
l'e-mail, utilisez la fonction get_subject
>>> message.get_subject()
u'Habillez 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_addresses('de')
[(u'Usama Azad', '[email protected]')]
>>> message.get_addresses('à')
[(u'[email protected]', '[email protected]')]
// Pour obtenir le corps de l'e-mail, tapez
>>> message.partie_texte.get_payload().décoder (message.partie_texte.jeu de caractères)
u" Salut! Profitez d'un forfait 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 messagerie célèbres.

Fournisseur Nom de domaine pour le serveur IMAP
YAHOO imap.poster.yahoo.com
Hotmail/Outlook imap-mail.perspectives.com
Verizon entrant.verizon.rapporter
Comcast imap.comcast.rapporter
AT&T imap.poster.att.rapporter

Supprimer votre e-mail du serveur IMAP

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

// Pour supprimer un e-mail, vous devez passer en lecture seule à 'False' pour obtenir un accès en écriture à votre
e-mails
>>> obj.select_folder('INBOX', readonly=False)
>>> mail_ids = obj.recherche(['DEPUIS', '25-Oct-2019'])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Fournissez un uid de messagerie ou une liste d'UID de messagerie, après avoir exécuté la commande ci-dessous,
votre e-mail disparaîtra de INBOX.
>>> obj.supprimer_messages(919)
919 : ('\\Vu', '\\Supprimé')
 
// Cette commande supprimera définitivement vos e-mails du serveur de messagerie
>>> obj.effacer()
('Succès', [])

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

Créer votre propre rappel d'anniversaire

Vous avez les anniversaires de vos amis dans les mois à venir et vous souhaitez leur souhaiter leur anniversaire. Mais vous avez beaucoup de travail dans votre bureau et il est possible que vous oubliiez de leur souhaiter. Cette tâche peut donc être effectuée automatiquement à l'aide de python. Voici le code pour effectuer cette tâche.

// importation de modules
importation re
// le module os est utilisé pour effectuer les tâches du système d'exploitation i.e accéder aux répertoires
importer le système d'exploitation
date/heure d'importation
importer smtplib
 
// définition d'une fonction qui enverra des emails
def send_mail(reciever_mail_address, nom):
sender_mail_address = "[email protected]"
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)
// envoyer un mail à 'reciever_mail_address'.
obj.sendmail(sender_mail_address, reciever_mail_address, "Objet : Courrier de souhaits du jour de naissance\n\n Joyeux anniversaire "+nom)
// fin de la connexion
obj.quitter()
// Corps principal
// aller dans le répertoire dans lequel le fichier contenant les données est présent
système d'exploitation.chdir("chemin_vers_fichier_données_anniversaire")
tandis que 1 :
// obtenir la date et l'heure du moment présent
aujourd'hui = dateheure.dateheure.aujourd'hui()
aujourd'hui = str(aujourd'hui)
// obtenir l'année, le mois, le jour, l'heure, la minute et la seconde en cours
current_year = aujourd'hui[0:4]
mois_actuel = aujourd'hui[5:7]
jour_actuel = aujourd'hui[8:10]
heure_actuelle = aujourd'hui[11:13]
minute_actuelle = aujourd'hui[14:16]
current_sec = aujourd'hui[17:19]
// ouverture du fichier d'anniversaire dans l'objet 'birthday_file' en mode lecture
fichier_anniversaire = open('fichier_anniversaire','r')
// sauvegarde de toutes les lignes de 'fichier_anniversaire' dans la liste des lignes
lignes = fichier_anniversaire.lignes de lecture()
// fermeture de l'objet 'fichier_anniversaire'
fichier_anniversaire.Fermer()
// lecture de chaque ligne en utilisant la boucle for
pour ligne en lignes :
// création d'une expression régulière pour trouver une date dans 'fichier_anniversaire'
dateEx = re.compile(r"\d4-\d2-\d2")
findDate=dateEx.recherche (ligne)
date = date de recherche.grouper()
// récupération du mois_anniversaire et du jour_anniversaire à partir du fichier
anniversaire_mois = date[5:7]
jour_anniversaire = date[8:10]
// création d'une expression régulière pour trouver l'adresse e-mail à partir de fichier_anniversaire
mailEx = re.compile(r"\w*@\w*.com")
findMail = mailEx.recherche (ligne)
destinataire_mail = findMail.grouper()
//créer une expression régulière pour trouver le nom de la personne
nomEx = re.compiler(r"\w*")
findName = nameEx.recherche (ligne)
nom = findName.grouper()
// vérifier si l'anniversaire de quelqu'un approche ou non
if current_month == birthday_month et =current_day == birthday_day :
// envoi du courrier à 08h00 exacte
if current_hour == '08' et current_minute == '00' et current_sec == '00' :
// appeler la fonction 'send_mail'
send_mail(reciever_mail, nom)

Maintenant, nous créons un « fichier_anniversaire », dans lequel nous enregistrons les noms, les adresses e-mail et leur date de naissance. Ceci est un simple fichier texte et ressemble à ceci.

Explication

Nous allons lire ce fichier en utilisant le script python et vérifier dont l'anniversaire arrive et leur souhaiter. Tout d'abord nous allons importer quelques 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 un courrier au 'reciever_mail_address', dont le nom est 'name'. Les deux arguments sont passés à la fonction à partir du corps principal de msg. Dans le corps principal du script, nous verrons comment trouver 'reciever_mail_address' et 'name'.

L'envoi d'email en utilisant smtplib a été expliqué ci-dessus, vous pouvez donc le lire et il ne sera pas discuté ici.

Dans le corps principal, nous allons dans le répertoire où nous avons enregistré "fichier_anniversaire" en utilisant "os.chdir()'. Ensuite, nous avons une « boucle while » qui est toujours vraie, donc elle vérifiera l'anniversaire en continu. 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 extrairons l'année, le mois, le jour, l'heure, les minutes et les secondes en utilisant les indices de ces quantités. Après cela, nous ouvrirons le fichier_anniversaire dans un objet 'fichier_anniversaire' en mode lecture, nous ne pourrons donc que le lire. Maintenant, nous allons enregistrer toutes les lignes de ce fichier dans la liste des lignes. 'fichier_anniversaire.readlines()' enregistrera chaque ligne dans la liste 'lines'. Après cela, nous fermerons le fichier_anniversaire en utilisant 'fichier_anniversaire.fonction close()'.

Maintenant, nous allons lire chaque ligne une par une en utilisant la boucle for. Dans chaque ligne, seules les données d'une personne sont disponibles dans 'birthday_file', nous ne lisons donc que les données d'une seule personne à la fois dans cette boucle.

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

AAAA-MM-JJ

On va donc faire une expression régulière 'dateEx' qui trouve ce format dans la ligne.

ré.compile(r"\d4-\d2-\d2")

Au-dessus de la commande, recherchez une chaîne qui a '4 chiffres' suivi de '-' puis '2 chiffres' suivi de '-' et '2 chiffres'. Cela nous donnera la date de naissance de la personne, nous extrairons donc 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 le birthday_month et le current_month et le birthday_day et le current_day. Si ces conditions sont remplies, nous enverrons l'e-mail d'anniversaire en utilisant la fonction 'send_mail' à exactement '08:00'.

Exécution automatique du script via Cronjob

Maintenant, nous allons nous assurer que ce script python s'exécute à chaque fois. Pour ce faire, nous allons ajouter cette tâche à crontab. Crontab, sous 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 indiquées.

  1. Ouvrez crontab pour ajouter une tâche dans votre terminal à l'aide de la commande suivante
[email protégé] :~$ crontab -e
  1. A la fin de ce fichier entrez la commande suivante sans #
@reboot python path_to_the_script

Les commandes ci-dessus permettront à votre système d'exécuter le script python à chaque redémarrage de votre système. De cette façon, votre système exécutera un script python à chaque fois que votre système est allumé.

Comment booster les FPS sous Linux?
FPS signifie Images par seconde. La tâche du FPS est de mesurer la fréquence d'images dans les lectures vidéo ou les performances de jeu. En termes si...
Meilleurs jeux de laboratoire d'applications Oculus
Si vous êtes propriétaire d'un casque Oculus, vous devez être au courant du chargement latéral. Le chargement latéral est le processus d'installation ...
Top 10 des jeux à jouer sur Ubuntu
La plate-forme Windows a été l'une des plates-formes dominantes pour les jeux en raison du pourcentage énorme de jeux qui se développent aujourd'hui p...