Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa việc gửi báo cáo Excel qua Email bằng Python

Bế Hồng Đan 10/04/2026 14:57 479 lượt xem 3 trả lời

Chào mọi người,

Dạo gần đây mình thấy các bài viết trong chuyên mục Tin học mở rộng tập trung nhiều vào tự động hóa xử lý dữ liệu trong Excel. Mình cũng đang áp dụng một số giải pháp và thấy hiệu quả, đặc biệt là với việc gửi báo cáo định kỳ. Hôm nay mình muốn chia sẻ một cách tự động hóa việc gửi báo cáo Excel qua email bằng Python, hy vọng sẽ giúp ích cho các bạn nào đang làm các công việc tương tự.

Công việc này tuy không quá phức tạp nhưng nếu làm thủ công thì tốn khá nhiều thời gian, nhất là khi có nhiều báo cáo cần gửi cho các bộ phận khác nhau.

Yêu cầu:

  • Cài đặt Python trên máy tính.
  • Cài đặt thư viện pandasopenpyxl để đọc file Excel.
  • Cài đặt thư viện smtplibemail để gửi email.

Các bước thực hiện:

  1. Đọc dữ liệu từ file Excel: Sử dụng pandas.read_excel() để nạp dữ liệu vào DataFrame.
  2. Chuẩn bị nội dung email: Tạo tiêu đề, người nhận, và phần nội dung email. Có thể đính kèm file Excel trực tiếp hoặc gửi link tải file nếu lưu trên cloud.
  3. Thiết lập kết nối SMTP: Sử dụng smtplib để kết nối đến máy chủ email của bạn (ví dụ: Gmail, Outlook).
  4. Gửi email: Sử dụng đối tượng MIMEMultipart để tạo email, đính kèm file nếu cần, và gửi đi bằng server.sendmail().

Mình có một đoạn code mẫu đơn giản để gửi một file Excel cụ thể:

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 email
sender_email = "your_email@gmail.com"
sender_password = "your_app_password"
receiver_email = "recipient_email@example.com"

# Tạo đối tượng email
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = "Báo cáo hàng ngày"

# Nội dung email
body = "Xin chào, 

Đây là báo cáo hàng ngày của bạn. Vui lòng xem file đính kèm.

Trân trọng,
Đội ngũ của bạn"
message.attach(MIMEText(body, "plain"))

# Đính kèm file Excel
filename = "bao_cao.xlsx"
attachment = open(filename, "rb")

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 SMTP và gửi email
server = smtplib.SMTP("smtp.gmail.com", 587)
server.starttls() # Mã hóa kết nối
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!")

Lưu ý: Đối với Gmail, bạn cần bật "Less secure app access" hoặc tạo "App Password" để sử dụng.

Đây chỉ là một ví dụ cơ bản, các bạn có thể tùy biến thêm như đọc danh sách người nhận từ một file khác, gửi email theo lịch trình cố định bằng schedule hoặc APScheduler, hoặc tạo báo cáo động trước khi gửi.

Rất mong nhận được thêm các ý kiến đóng góp và chia sẻ từ mọi người!

3

Tuyệt vời! Tự động hóa gửi báo cáo đúng là tiết kiệm được khối thời gian thật. Mình cũng đang mò mẫm với Python cho mấy vụ này. Bạn có thể bật mí chút về cách bạn xử lý đính kèm file Excel vào email không? Có cần phải convert sang PDF trước không hay cứ gửi file .xlsx thẳng lên được?

0

Hay quá bạn ơi! Mình cũng đang tìm cách để tự động hóa mấy vụ gửi báo cáo lặp đi lặp lại này. Bạn có thể chia sẻ thêm về các thư viện Python bạn dùng cho việc này không? Đặc biệt là phần gửi email, có cần cài thêm gì phức tạp không?

4

Hay quá bạn ơi! Tự động hóa gửi báo cáo qua email bằng Python đúng là một giải pháp hiệu quả để tiết kiệm thời gian. Mình cũng đang quan tâm đến việc này.

Bạn có thể chia sẻ thêm về cách bạn xử lý việc đính kèm file Excel vào email không? Liệu có cần phải convert file sang PDF trước khi gửi hay có thể gửi trực tiếp file .xlsx được không? Cảm ơn bạn!

5

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

Đăng nhập Đăng ký