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:
- Ngecek inbox kamu di Outlook.
- Ambil email yang subjeknya sesuai kriteria tertentu (contoh: mengandung kata “INVITATION – YEAR-END EVENT”).
- Simpan data email ke file Excel.
- Download attachment dari email tersebut.
Tools yang Dibutuhkan
Sebelum mulai, pastiin kamu udah punya ini:
- Python (tentunya).
- Library Python: pywin32 dan openpyxl (install pake pip).
- 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
- 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.
- 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.
- 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.
- 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)
- 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}")
- Simpan Perubahan ke Excel
Jangan lupa buat save file Excel setelah semua data ditambahkan:
wb.save(workbook_path)
Tantangan dan Tips
- Hak Akses Email: Pastikan kamu punya akses ke email yang mau kamu ambil.
- Folder Path Valid: Path untuk file Excel dan folder attachment harus valid.
- 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!