Menu

Tự động hóa gửi báo cáo Excel qua Email bằng Python – Giải pháp cho dân văn phòng

Thế Đạt Yên 14/06/2026 12:37 535 lượt xem 1 trả lời

Chào các anh chị em trong diễn đàn,

Dạo này công việc của mình cứ lặp đi lặp lại cái vụ gửi báo cáo Excel cuối ngày. Mỗi lần như vậy lại phải mở file, lưu lại, rồi lại mở email, đính kèm, nhập địa chỉ, gửi đi... Tốn kha khá thời gian mà đôi khi còn sơ suất quên gửi nữa.

Sau khi mày mò tìm hiểu, mình phát hiện ra có thể dùng Python để tự động hóa hoàn toàn quy trình này. Vừa nhanh, vừa chính xác, lại không sợ quên.

Cụ thể, mình dùng thư viện pandas để đọc dữ liệu và smtplib, email để gửi mail.

Các bước cơ bản mình làm như sau:

  • Đọc file Excel chứa dữ liệu báo cáo bằng pandas.read_excel().
  • Xử lý, định dạng dữ liệu nếu cần (ví dụ: tạo bảng tóm tắt).
  • Tạo nội dung email (có thể là text đơn giản hoặc đính kèm file Excel đã xử lý).
  • Thiết lập kết nối tới máy chủ email (ví dụ: Gmail với SMTP).
  • Gửi email với các thông tin người nhận, tiêu đề, nội dung đã chuẩn bị.

Mọi người có thể tham khảo đoạn code mẫu cơ bản này:

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

# --- Thông tin báo cáo ---
file_bao_cao = 'bao_cao_hang_ngay.xlsx'

# --- Thông tin gửi mail ---
email_gui = 'your_email@gmail.com'
mat_khau = 'your_app_password'
email_nhan = 'recipient@example.com'
chu_de = 'Báo cáo hàng ngày - ' + pd.Timestamp.now().strftime('%Y-%m-%d')
noi_dung = """
Chào bạn,

Dưới đây là báo cáo hàng ngày.

Trân trọng,
[Tên của bạn]
"""

# --- Đọc và chuẩn bị file đính kèm ---
df = pd.read_excel(file_bao_cao)
# Có thể thêm xử lý dữ liệu tại đây

# Lưu lại file để đính kèm (tùy chọn)
df.to_excel('bao_cao_gui_mail.xlsx', index=False)

# --- Tạo đối tượng email ---
msg = MIMEMultipart()
msg['From'] = email_gui
msg['To'] = email_nhan
msg['Subject'] = chu_de

msg.attach(MIMEText(noi_dung, 'plain'))

# --- Đính kèm file ---
filename = 'bao_cao_gui_mail.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)

msg.attach(part)

# --- Gửi email ---
try:
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login(email_gui, mat_khau)
    text = msg.as_string()
    server.sendmail(email_gui, email_nhan, text)
    server.quit()
    print('Email đã được gửi thành công!')
except Exception as e:
    print(f'Lỗi khi gửi email: {e}')

Lưu ý: Bạn cần bật "Ứng dụng ít an toàn hơn" hoặc tạo "Mật khẩu ứng dụng" trên Gmail để script có thể đăng nhập và gửi mail.

Đây là một ví dụ khá cơ bản, nhưng hy vọng nó sẽ giúp ích cho anh em nào đang gặp tình huống tương tự. Nếu có ai có cách làm hay hơn hoặc gặp khó khăn gì, cùng thảo luận nhé!

1

Hay quá bạn ơi! Mình cũng đang đau đầu với vụ gửi báo cáo hàng ngày đây. Bạn có thể chia sẻ chi tiết hơn về cách cấu hình smtplib để kết nối với mail server không? Mình đang dùng Gmail và gặp chút khó khăn ở phần xác thực.

0

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

Đăng nhập Đăng ký