Notification automatique par e-mail avec Python
Le système de courrier électronique serait basé sur la recommandation du API Google Gmail Pour envoyer un email. J’utiliserais également le module de messagerie pour m’aider à construire le système d’envoi d’un email.
Commençons par créer notre fonction pour générer le message.
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import base64
import osdef create_message(sender, to, subject, message_text):
"""Create a message for an email.Args:
sender: Email address of the sender.
to: Email address of the receiver.
subject: The subject of the email message.
message_text: The text of the email message.Returns:
An object containing a base64url encoded email object.
"""
message = MIMEText(message_text)
message['to'] = to
message['from'] = sender
message['subject'] = subject
return {'raw': base64.urlsafe_b64encode(message.as_string().encode()).decode()}
Ensuite, nous créons la fonction pour envoyer le message.
def send_message(service, user_id, message):
"""Send an email message.Args:
service: Authorized Gmail API service instance.
user_id: User's email address. The special value "me"
can be used to indicate the authenticated user.
message: Message to be sent.Returns:
Sent Message.
"""
try:
message = (service.users().messages().send(userId=user_id, body=message)
.execute())
print('Message Id: {}'.format(message['id']))
return message
except:
print ('An error occurred')
Nous avons maintenant deux fonctions pour créer le message et envoyer l’e-mail. Pour l’étape suivante, créons une fonction pour automatiser le système de notification. Ici, nous avons besoin des informations d’identification précédemment créées à partir de l’API Google Gmail. Ici, j’ai configuré mon système pour utiliser le fichier JSON d’informations d’identification en tant que «credentials.json».
def notification(sender, to, subject, notification):#Sender is the sender email, to is the receiver email, subject is the email subject, and notification is the email body message. All the text is str object.SCOPES = 'https://mail.google.com/'
message = create_message(sender, to, subject, notification)
creds = Noneif os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
#We use login if no valid credentials
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)service = build('gmail', 'v1', credentials=creds)
send_message(service, sender, message)
Lorsque notre fonction de notification est prête, nous pouvons essayer d’envoyer la notification. Par exemple, j’essaierais d’apprendre un modèle d’apprentissage automatique ci-dessous.
import seaborn as sns
import pandas as pd
from sklearn.linear_model import LinearRegression#Loading the dataset and only using the numerical variables
mpg = sns.load_dataset('mpg').drop(['origin', 'name'], axis = 1)
linear_model = LinearRegression()try:
#Training the model
linear_model.fit(mpg.drop('mpg', axis =1), mpg['mpg'])notification('test1@gmail.com', 'test2@gmail.com', 'Notification - Success Training', 'The model has finish')
except:
notification('test1@gmail.com', 'test2@gmail.com', 'Notification - Failed Training', 'The model encountered error')
Maintenant, je reçois ma notification lorsque la formation est terminée ou s’ils ont rencontré une erreur. Les données ci-dessus que nous utilisons pour la formation contenant une valeur de NaN, il est donc évident que cela entraînerait une erreur. Bien que, mon point est que nous sommes capables de créer le système de notification à notre e-mail maintenant.