top of page
Gambar penulisCornellius Yudha Wijaya

Pemberitahuan Otomatis ke Email dengan Python

Pemberitahuan Otomatis ke Email dengan Python
Photo by Jonas Leupe on Unsplash

Pernahkah Anda berada dalam posisi di mana Anda sedang menunggu model machine learning Anda selesai dan perlu pergi ke suatu tempat? Atau Anda sedang mengerjakan tugas lain dan terus-menerus berpikir apakah script Anda telah berhasil berjalan atau tidak? Saya pernah berada dalam posisi itu sebelumnya, dan itulah sebabnya saya membuat sistem notifikasi otomatis ke email saya menggunakan Python.


Dalam artikel ini, saya akan menjelaskan cara membuat sistem automasi dengan Python dalam beberapa langkah sederhana. Mari kita mulai.


Email Preparation

Kali ini saya akan menggunakan sistem email dari Gmail. Yang perlu kita lakukan pertama adalah menyiapkan Gmail API dari Google API Console. Di dasbor developer, pilih ENABLE APIS AND SERVICES.

Pemberitahuan Otomatis ke Email dengan Python

Dari sini, coba ketik dan cari Gmail API.

Pemberitahuan Otomatis ke Email dengan Python

Pada pilihan Gmail API, klik ENABLE untuk mengaktifkan Gmail API.

Pemberitahuan Otomatis ke Email dengan Python

Setelah selesai, kita perlu membuat kredensial untuk mengakses email dan mengirim notifikasi menggunakan Gmail.

Pemberitahuan Otomatis ke Email dengan Python

Pilih OAuth client ID, dan ketika ditanya Application Type, karena saya menggunakan Jupyter Notebook untuk menjalankan skrip saya, maka saya akan memilih Aplikasi Desktop.

Pemberitahuan Otomatis ke Email dengan Python

Anda bisa beri nama file ini sesuai keinginan, disini saya beri nama file ini menjadi gmail_python. Setelah selesai membuat kredensial, Anda perlu mengunduhnya dalam bentuk JSON. Sebaiknya Anda mengganti nama file tersebut menjadi “credentials.json”.


Pemberitahuan Otomatis ke Email dengan Python

Letakkan file ini pada folder yang sama dengan scrip atau Jupyter Notebook.


Membuat Sistem Notifikasi

Sistem email akan didasarkan pada rekomendasi yang diberikan oleh Google Gmail API untuk mengirim email. Saya juga akan menggunakan email module untuk membantu membangun sistem pengiriman email.


Pertama, mari kita buat fungsi untuk membuat pesan.

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 os
def 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()}

Kemudian kita membuat fungsi untuk mengirim pesan.

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')

Sekarang kita telah memiliki dua fungsi untuk membuat pesan dan mengirim email. Untuk langkah selanjutnya, mari kita buat fungsi untuk mengotomatiskan sistem notifikasi. Di sini kita memerlukan kredensial yang dibuat sebelumnya dari Google Gmail API. Di sini, saya mengatur sistem saya untuk menggunakan file JSON kredensial sebagai ‘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 = None

if 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)

Fungsi notifikasi kita sudah siap, kita bisa mencoba untuk mengirim notifikasinya. Sebagai contoh, saya akan mencoba mempelajari model machine learning di bawah ini.

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')
Pemberitahuan Otomatis ke Email dengan Python

Sekarang saya mendapatkan notifikasi ketika training telah selesai atau jika terjadi error. Data yang kami gunakan untuk pelatihan di atas mengandung nilai NaN, sehingga jelas akan menyebabkan kesalahan. Meskipun demikian, poin saya adalah kita sekarang bisa membuat sistem notifikasi untuk email.


Kesimpulan

Dalam artikel ini, saya telah menunjukkan kepada Anda bagaimana membuat sistem notifikasi sederhana untuk email Anda menggunakan Python. Anda dapat memodifikasi sistem ini sesuai keinginan Anda.

20 tampilan0 komentar

Postingan Terkait

Lihat Semua

Comments


bottom of page