Menu

Tự động hóa gửi báo cáo Excel hàng tháng bằng Python và SMTP

Sầm Bích Lam 07/06/2026 20:24 159 lượt xem 1 trả lời

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é!

2

Hay quá bạn ơi! Mình cũng đang tìm hiểu về tự động hóa báo cáo bằng Python. Bạn có thể chia sẻ chi tiết hơn về cách bạn xử lý phần đính kèm file Excel không? Mình đang gặp chút khó khăn với phần này khi dùng smtplib.

0

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký