Chào mọi người,
Dạo gần đây mình có làm một dự án nhỏ để tự động hóa việc gửi báo cáo Excel hàng tháng qua email bằng Python. Mình nghĩ là công cụ này sẽ rất hữu ích cho những ai thường xuyên phải gửi báo cáo cho cấp trên hoặc đối tác.
Mình sử dụng kết hợp thư viện pandas để đọc và xử lý dữ liệu Excel, và thư viện smtplib, email để gửi email. Ý tưởng cơ bản là:
- Đọc file Excel báo cáo bằng
pandas.read_excel(). - Tạo nội dung email, có thể đính kèm file Excel hoặc gửi link tải file.
- Sử dụng
smtplibđể kết nối đến máy chủ email (ví dụ: Gmail, Outlook) và gửi email.
Ví dụ đơn giản về cách gửi email đính kèm file:
import pandas as pd
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
# Thông tin người gửi và người nhận
sender_email = "your_email@gmail.com"
sender_password = "your_app_password"
receiver_email = "recipient_email@example.com"
# Tạo đối tượng MIMEMultipart
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = "Báo cáo Excel Tháng"
# Nội dung email
body = "Xin chào,\n\nĐây là báo cáo Excel hàng tháng của bạn.\n\nTrân trọng,"
message.attach(MIMEText(body, 'plain'))
# Đính kèm file Excel
filename = "bao_cao_thang.xlsx"
# Mở file ở chế độ nhị phân
with open(filename, "rb") as attachment:
part = MIMEBase('application', 'octet-stream')
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header(
'Content-Disposition',
f'attachment; filename= {filename}',
)
message.attach(part)
# Kết nối đến máy chủ SMTP của Gmail và gửi email
try:
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)
print("Email đã được gửi thành công!")
except Exception as e:
print(f"Lỗi khi gửi email: {e}")
finally:
server.quit()
Lưu ý: Bạn cần bật "Less secure app access" hoặc tạo "App password" trên tài khoản Google của mình nếu dùng Gmail.
Anh em nào có kinh nghiệm hay có cách làm hay hơn thì chia sẻ nhé!