Hello, guys! Kalau kamu sering bergelut dengan email dan merasa capek harus ngecek satu per satu inbox kamu, ini waktunya buat belajar sesuatu yang keren banget! Di artikel ini, gue bakal ngajarin cara otomatisasi grab email dari Outlook pake Python. Siap, bro? Let’s go!

Apa yang Bakal Kita Pelajari?

Gue bakal tunjukin langkah-langkah buat bikin script Python yang bisa:

  1. Ngecek inbox kamu di Outlook.
  2. Ambil email yang subjeknya sesuai kriteria tertentu (contoh: mengandung kata “INVITATION – YEAR-END EVENT”).
  3. Simpan data email ke file Excel.
  4. Download attachment dari email tersebut.

Tools yang Dibutuhkan

Sebelum mulai, pastiin kamu udah punya ini:

  1. Python (tentunya).
  2. Library Python: pywin32 dan openpyxl (install pake pip).
  3. Microsoft Outlook (buat akses inbox kamu).

Kalau semua udah siap, kita langsung ke script-nya!

Script Python: Grab Email dari Outlook

Berikut adalah script Python yang bakal kita bahas:

# -*- coding: utf-8 -*-

"""

Created on Tue Nov 26 11:06:24 2024

@author: MF38240

"""

import win32com.client

from openpyxl import load_workbook

import os

def clean_sender_address(sender_address):

    """

    Menghapus nilai yang tidak diinginkan dari alamat email pengirim,

    termasuk menghapus 33 karakter pertama jika ada, dan menghapus bagian "/CN=".

    """

    if '-' in sender_address:

        # Mengambil bagian setelah karakter '-'

        sender_address = sender_address.split('-')[-1]

    # Menghapus "/CN=" jika ada

    if "/CN=" in sender_address:

       return sender_address.split("/CN=")[-1]

    return sender_address

def ambil_email():

    print("Memulai proses ambil email...")

    # Inisialisasi Outlook

    try:

        olApp = win32com.client.Dispatch("Outlook.Application")

        olNamespace = olApp.GetNamespace("MAPI")

        olFolder = olNamespace.Folders("meidhy@enterspasi.com").Folders("Inbox")

        print("Folder Inbox ditemukan.")

    except Exception as e:

        print(f"Error saat mengakses folder: {e}")

        return

    # Path workbook Excel

    workbook_path = "D:/DATABASE EMAIL/DB_GRAB.xlsx"

    if not os.path.exists(workbook_path):

        print(f"File Excel {workbook_path} tidak ditemukan!")

        return

    # Membuka workbook Excel

    try:

        print("Membuka file Excel...")

        wb = load_workbook(workbook_path)

        sheet = wb.active

    except Exception as e:

        print(f"Error saat membuka file Excel: {e}")

        return
 

    # Truncate data yang sudah ada di Excel (kecuali header)

    try:

        # Menghapus seluruh data di worksheet kecuali header

        max_row = sheet.max_row

        if max_row > 1:  # Hanya menghapus jika ada data lebih dari header

            sheet.delete_rows(2, max_row - 1)  # Hapus semua baris setelah baris pertama (header)

        print("Data lama berhasil dihapus.")

    except Exception as e:

        print(f"Error saat melakukan truncate: {e}")

        return

    # Path folder untuk lampiran

    attachment_dir = "D:/DATABASE EMAIL/LAMPIRAN"

    os.makedirs(attachment_dir, exist_ok=True)
 

    # Iterasi melalui setiap email di folder Inbox

    print("Memulai iterasi email...")

    try:

        email_count = 0

        for olItem in olFolder.Items:

            if olItem.Class == 43:  # MailItem

                if "INVITATION - YEAR-END EVENT" in olItem.Subject.upper():

                    print(f"Mengolah email: {olItem.Subject}")

                    email_count += 1

                    # Salin informasi email ke Excel

                    row = [

                        olItem.ReceivedTime.strftime("%Y-%m-%d %H:%M:%S"),

                        clean_sender_address(olItem.SenderEmailAddress),

                        olItem.To,

                        olItem.CC,

                        olItem.BCC,

                        olItem.Subject,

                        olItem.Body,

                        ", ".join([attachment.FileName for attachment in olItem.Attachments]),

                    ]

                    sheet.append(row)

                    # Simpan lampiran ke folder

                    for attachment in olItem.Attachments:

                        attachment_path = os.path.join(attachment_dir, attachment.FileName)

                        attachment.SaveAsFile(attachment_path)

                        print(f"Lampiran disimpan di: {attachment_path}")

        # Simpan perubahan ke file Excel

        wb.save(workbook_path)

        print(f"Proses selesai. Total email yang diproses: {email_count}")

    except Exception as e:

        print(f"Error saat memproses email: {e}")

if __name__ == "__main__":

    ambil_email()

Penjelasan Kode

  1. Mengakses Outlook dengan Python

Kita pake library win32com.client buat ngakses Outlook. Dengan olApp = win32com.client.Dispatch(“Outlook.Application”), kita bisa ngehubungin Python sama aplikasi Outlook kamu.

  1. Navigasi ke Folder Inbox

Kode berikut:

olFolder = olNamespace.Folders("meidhy@enterspasi.com").Folders("Inbox")

akal membuka folder inbox dari email kamu. Kalau ada error, script bakal kasih tahu lewat pesan.

  1. Filter Email Berdasarkan Subjek

Di bagian ini:

if "INVITATION - YEAR-END EVENT" in olItem.Subject.upper():

kita ngecek apakah subjek email mengandung kata “INVITATION – YEAR-END EVENT” (nggak peduli huruf besar atau kecil). Kalau iya, email itu bakal diproses.

  1. Membersihkan Data Lama

Sebelum menambahkan data baru, script ini akan menghapus semua data lama di Excel (kecuali header) dengan:

sheet.delete_rows(2, max_row - 1)
  1. Download Attachment

Kalau email punya lampiran, script ini bakal nyimpen semua file attachment ke folder D:/DATABASE EMAIL/LAMPIRAN dengan kode berikut:

for attachment in olItem.Attachments:

    attachment_path = os.path.join(attachment_dir, attachment.FileName)

    attachment.SaveAsFile(attachment_path)

    print(f"Lampiran disimpan di: {attachment_path}")
  1. Simpan Perubahan ke Excel

Jangan lupa buat save file Excel setelah semua data ditambahkan:

wb.save(workbook_path)

Tantangan dan Tips

  1. Hak Akses Email: Pastikan kamu punya akses ke email yang mau kamu ambil.
  2. Folder Path Valid: Path untuk file Excel dan folder attachment harus valid.
  3. Debugging: Kalau ada error, cek di mana script berhenti. Biasanya masalah ada di akses Outlook atau path file.

Kesimpulan

Dengan script ini, kamu bisa otomatisasi proses ambil email dari Outlook dan hemat waktu buat kerjaan lain. Gimana? Keren kan? Kalau kamu punya ide buat improve script ini atau punya pertanyaan, langsung aja share di kolom komentar! ✌️

Selamat mencoba, bro! Semoga sukses!

By Medhy

Leave a Reply