Mengelola dan mengolah data dari email bisa menjadi tugas yang membosankan, terutama jika Anda menerima banyak lampiran setiap hari. Dalam artikel ini, kami akan menunjukkan cara membuat aplikasi ini menggunakan Python, dengan bantuan dari ChatGPT.
Langkah-langkah Utama
- Mengunduh Lampiran Email Berdasarkan Kata Kunci
- Menyimpan Lampiran ke Folder Berdasarkan Pengirim
- Mengekstrak Teks dari PDF
- Menyimpan Data yang Diekstraksi ke File CSV
Alat dan Perpustakaan yang Diperlukan
- Python
- Perpustakaan Python:
imaplib
,email
,PyPDF2
,pandas
, danos
1. Mengunduh Lampiran Email Berdasarkan Kata Kunci
Pertama, kita akan menggunakan perpustakaan imaplib
dan email
untuk menghubungkan ke server email dan mengunduh lampiran berdasarkan kata kunci tertentu. Berikut adalah fungsi untuk mengunduh lampiran dari email yang berisi kata kunci "kip kuliah":
pythonimport imaplib
import email
from PyPDF2 import PdfReader
import pandas as pd
from email.header import decode_header
import os
def download_attachments(username, password, keyword, base_path):
try:
mail = imaplib.IMAP4_SSL("imap.gmail.com")
mail.login(username, password)
mail.select("inbox")
status, messages = mail.search(None, f'(BODY "{keyword}")')
if status != 'OK':
print(f"Error searching emails with keyword: {keyword}")
return
email_ids = messages[0].split()
for email_id in email_ids:
status, msg_data = mail.fetch(email_id, "(RFC822)")
if status != 'OK':
print(f"Error fetching email ID {email_id}")
continue
for response_part in msg_data:
if isinstance(response_part, tuple):
msg = email.message_from_bytes(response_part[1])
sender_email = email.utils.parseaddr(msg['From'])[1]
sender_folder = os.path.join(base_path, sender_email)
if not os.path.exists(sender_folder):
os.makedirs(sender_folder)
if msg.get_content_maintype() == 'multipart':
for part in msg.walk():
if part.get_content_maintype() == 'multipart':
continue
if part.get('Content-Disposition') is None:
continue
file_name = part.get_filename()
if file_name:
file_name = decode_header(file_name)[0][0]
if isinstance(file_name, bytes):
file_name = file_name.decode(errors='replace')
file_path = os.path.join(sender_folder, file_name)
with open(file_path, "wb") as f:
f.write(part.get_payload(decode=True))
mail.logout()
except Exception as e:
print(f"An error occurred: {e}")
2. Menyimpan Lampiran ke Folder Berdasarkan Pengirim
Kode di atas menyimpan setiap lampiran ke subfolder yang diberi nama sesuai dengan alamat email pengirim. Misalnya, lampiran dari juangtechno@gmail.com
akan disimpan di D:/Downloads/juangtechno@gmail.com
.
3. Mengekstrak Teks dari PDF
Setelah lampiran diunduh, kita dapat mengekstrak teks dari file PDF menggunakan PyPDF2
. Berikut adalah fungsi untuk mengekstrak teks dari PDF:
pythondef extract_text_from_pdf(pdf_path):
try:
with open(pdf_path, "rb") as file:
reader = PdfReader(file)
text = ""
for page in reader.pages:
text += page.extract_text()
return text
except Exception as e:
print(f"Error reading PDF {pdf_path}: {e}")
return ""
4. Menyimpan Data yang Diekstraksi ke File CSV
Data yang diekstraksi kemudian disimpan ke file CSV menggunakan pandas
:
pythondef save_data_to_csv(data, csv_path):
try:
df = pd.DataFrame(data)
df.to_csv(csv_path, index=False, encoding='utf-8')
except Exception as e:
print(f"Error saving data to CSV: {e}")
Workflow Utama
Berikut adalah kode lengkap untuk mengunduh lampiran, mengekstrak teks, dan menyimpan data ke CSV:
python# Main Workflow
username = "alamat email anda"
password = "kata_sandi_aplikasi_anda"
keyword = "kip kuliah"
base_path = "D:/Downloads" # Ganti dengan path yang benar
csv_path = "D:/Downloads/data.csv" # Ganti dengan path yang benar
# Step 1: Download Attachments
download_attachments(username, password, keyword, base_path)
# Step 2: Extract Data from PDFs (assuming all files are PDFs)
data = {"Nama": [], "Alamat": [], "Nilai": []}
for sender_folder in os.listdir(base_path):
sender_path = os.path.join(base_path, sender_folder)
if os.path.isdir(sender_path):
for pdf_file in os.listdir(sender_path):
if pdf_file.endswith(".pdf"):
pdf_path = os.path.join(sender_path, pdf_file)
pdf_text = extract_text_from_pdf(pdf_path)
# Process the extracted text to fill the data dictionary
# This is a placeholder, you need to parse the pdf_text to extract actual data
data["Nama"].append("Extracted Name")
data["Alamat"].append("Extracted Address")
data["Nilai"].append(100) # Example value
# Step 3: Save Data to CSV
save_data_to_csv(data, csv_path)
Dengan mengikuti panduan ini, Anda dapat membuat aplikasi yang secara otomatis mengunduh lampiran dari email, mengatur file dalam folder berdasarkan pengirim, mengekstrak data dari PDF, dan menyimpannya dalam file CSV. Ini sangat membantu dalam mengelola dan mengolah data dalam jumlah besar dengan efisien.
Jika Anda memiliki pertanyaan atau butuh bantuan lebih lanjut, jangan ragu untuk meninggalkan komentar.
Prompt untuk ChatGPT
Untuk mendapatkan bantuan dari ChatGPT dalam membuat aplikasi ini, berikut adalah prompt yang bisa Anda gunakan:
kotlinBantu saya membuat aplikasi Python untuk mengunduh lampiran email secara otomatis berdasarkan kata kunci, menyimpan file dalam folder berdasarkan pengirim, mengekstrak teks dari file PDF, dan menyimpan data ke file CSV. Saya menggunakan perpustakaan imaplib, email, PyPDF2, dan pandas. Tolong berikan saya kode lengkap dengan penjelasan setiap langkahnya.
Dengan mengikuti langkah-langkah dan panduan di atas, Anda sekarang siap untuk mengotomatiskan proses pengunduhan dan pengolahan lampiran email dengan Python. Selamat mencoba!
0 Comments