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 gửi email báo cáo hàng loạt với Outlook và Python

Lệ Hán Độ 20/03/2026 17:33 295 lượt xem 3 trả lời

Chào các bác, dạo này em đang tập tành tự động hóa mấy vụ báo cáo lặt vặt trên diễn đàn mình. Thấy nhiều bài viết hay về Python với Excel, VBA với Outlook, hôm nay em mạo muội chia sẻ một chút kinh nghiệm cá nhân về việc tự động hóa gửi email báo cáo hàng loạt bằng Outlook kết hợp với Python.

Cái này rất hữu ích khi các bác cần gửi cùng một báo cáo (có thể là file Excel, PDF...) cho nhiều người nhận khác nhau, hoặc gửi theo lịch trình định kỳ. Thay vì ngồi copy-paste từng cái email thì giờ đây chỉ cần chạy một script Python là xong.

Về cơ bản, chúng ta sẽ cần:

  • Python: Cài đặt sẵn trên máy.
  • Thư viện pywin32: Dùng để tương tác với Outlook. Cài bằng lệnh: pip install pywin32
  • Microsoft Outlook: Đã cài đặt và cấu hình tài khoản email.

Dưới đây là một đoạn code ví dụ đơn giản:

import win32com.client

# Khởi tạo đối tượng Outlook
outlook = win32com.client.Dispatch('Outlook.Application')
namespace = outlook.GetNamespace('MAPI')

# Thông tin email
subject = "Báo cáo hàng tháng"
body_content = "Kính gửi anh/chị, \n\nĐây là báo cáo tháng [Tháng] của quý công ty. \n\nTrân trọng,\n[Tên của bạn]"
recipient_email = "nguoi_nhan@example.com"
attachment_path = "C:\\Path\\To\\Your\\Report.xlsx"

# Tạo email mới
mail = outlook.CreateItem(0) # 0 Represents an Email item
mail.To = recipient_email
mail.Subject = subject
mail.Body = body_content
mail.Attachments.Add(attachment_path)

# Hiển thị email để xem trước trước khi gửi (hoặc dùng mail.Send() để gửi thẳng)
mail.Display()

Các bác có thể tùy biến thêm phần danh sách người nhận, nội dung email, đính kèm nhiều file, hoặc thậm chí là đọc danh sách người nhận và file đính kèm từ một file Excel khác. Cái này em thấy tiết kiệm được khối thời gian cho mấy vụ báo cáo lặp đi lặp lại.

Có bác nào đã từng làm hoặc có cách nào hay hơn thì chia sẻ thêm cho mọi người học hỏi với ạ!

0

Chào bạn,

Bài viết của bạn thật sự rất thiết thực, đặc biệt với những ai thường xuyên phải gửi báo cáo định kỳ. Mình cũng từng mất kha khá thời gian cho việc này trước đây.

Về phần bạn hỏi ở reply trước, để xử lý danh sách người nhận và đính kèm file có tên thay đổi, bạn có thể kết hợp sử dụng pandas để đọc danh sách người nhận từ file Excel (bao gồm email, tên, đường dẫn file báo cáo), sau đó dùng vòng lặp for để duyệt qua từng dòng, lấy thông tin và gửi email tương ứng.

Ví dụ, nếu file Excel có các cột Email, TenNguoiNhan, DuongDanFile, bạn có thể làm như sau:

``python import pandas as pd import win32com.client as win32

# Đọc danh sách người nhận từ Excel df = pd.read_excel("danh_sach_gui_email.xlsx")

# Khởi tạo Outlook outlook = win32.Dispatch('outlook.application')

# Duyệt qua từng người nhận for index, row in df.iterrows(): email_nguoi_nhan = row['Email'] ten_nguoi_nhan = row['TenNguoiNhan'] duong_dan_file = row['DuongDanFile']

# Tạo email mới mail = outlook.CreateItem(0) mail.To = email_nguoi_nhan mail.Subject = f"Báo cáo hàng tuần - {ten_nguoi_nhan}" mail.Body = f"Chào {ten_nguoi_nhan},\n\nDưới đây là báo cáo hàng tuần của bạn.\n\nTrân trọng,\n[Tên của bạn]"

# Đính kèm file mail.Attachments.Add(duong_dan_file)

# Gửi email (hoặc lưu dưới dạng draft nếu muốn kiểm tra) # mail.Send() mail.Save() # Lưu dưới dạng draft để kiểm tra trước khi gửi thực sự

print("Đã xử lý xong!") ``

Cách này giúp bạn linh hoạt hơn rất nhiều trong việc cá nhân hóa email và tệp đính kèm.

Chúc bạn thành công với các dự án tự động hóa của mình!

3

Hay quá bạn ơi! Mình cũng đang vật lộn với việc gửi báo cáo hàng loạt đây. Bạn có thể chia sẻ chi tiết hơn về cách bạn cấu hình Outlook với Python để gửi email không? Đặc biệt là phần xử lý danh sách người nhận và đính kèm file báo cáo có thể thay đổi tên theo từng người nhận không? Mình đang tìm giải pháp cho vụ này.

0

Cái vụ tự động hóa này đúng là cứu cánh cho dân văn phòng thật! Mình cũng hay phải gửi báo cáo theo lịch, mỗi lần làm thủ công là mệt phờ.

Bạn chia sẻ đoạn code dùng pandaswin32com hay quá. Mình có một cách hơi khác một chút, thay vì dùng win32com để điều khiển Outlook trực tiếp, mình hay dùng thư viện smtplibemail của Python để gửi email qua SMTP server của Outlook (hoặc Gmail). Cách này không cần cài đặt Outlook trên máy chủ và có thể chạy độc lập hơn.

Tuy nhiên, cách của bạn có vẻ tiện hơn nếu đã quen với giao diện Outlook và muốn gửi trực tiếp từ ứng dụng đó. Cảm ơn bạn đã chia sẻ kinh nghiệm rất thực tế!

5

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

Đăng nhập Đăng ký