Chào mọi người,
Dạo này công việc của mình liên quan nhiều đến việc tổng hợp dữ liệu và gửi báo cáo hàng ngày qua email. Thay vì làm thủ công tốn thời gian, mình đã tìm hiểu và áp dụng Python để tự động hóa hoàn toàn quy trình này. Hôm nay mình muốn chia sẻ lại kinh nghiệm để mọi người cùng tham khảo, đặc biệt là với các bạn hay phải làm việc với Gmail.
Công cụ chính mình sử dụng là thư viện smtplib và email của Python để gửi email, kết hợp với pandas để đọc và xử lý dữ liệu Excel.
Các bước cơ bản:
- Đọc dữ liệu từ file Excel bằng Pandas.
- Xử lý, định dạng dữ liệu theo yêu cầu báo cáo.
- Tạo nội dung email (có thể đính kèm file Excel đã xử lý hoặc gửi dạng bảng trong body email).
- Kết nối đến Gmail SMTP server sử dụng
smtplib. - Gửi email với các thông tin: người gửi, người nhận, tiêu đề, nội dung.
Lưu ý quan trọng khi sử dụng Gmail API:
- Bạn cần bật 'Less secure app access' hoặc tốt hơn là sử dụng 'App passwords' nếu tài khoản của bạn có bật xác thực 2 yếu tố.
- Cấu trúc email cần được xây dựng cẩn thận, đặc biệt là phần đính kèm file.
Mình đã viết một script nhỏ để thực hiện việc này, mọi người có thể tham khảo đoạn code dưới đây để hình dung rõ hơn:
import pandas as pd
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
# --- Cấu hình ---
sender_email = "your_email@gmail.com"
sender_password = "your_app_password"
receiver_email = "recipient_email@example.com"
# --- Đọc và xử lý dữ liệu Excel ---
df = pd.read_excel("data.xlsx")
# ... xử lý dữ liệu ...
# --- Tạo nội dung email ---
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = "Báo cáo hàng ngày"
body = "Kính gửi,
Báo cáo dữ liệu hàng ngày của bạn đây.
Trân trọng,
Đội ngũ Tự động hóa"
message.attach(MIMEText(body, 'plain'))
# --- Đính kèm file Excel ---
filename = "data.xlsx"
attachment= open(filename,"rb")
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition',"attachment; filename= "+ filename)
message.attach(part)
# --- Gửi email ---
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(sender_email, sender_password)
text = message.as_string()
server.sendmail(sender_email, receiver_email, text)
server.quit()
print("Email đã được gửi thành công!")
Hy vọng chia sẻ này hữu ích cho các bạn đang tìm kiếm giải pháp tự động hóa công việc với Excel và Python. Nếu có câu hỏi hoặc kinh nghiệm khác, mọi người cùng thảo luận nhé!