Chào các bác, hôm nay em muốn chia sẻ một chút kinh nghiệm về việc tự động hóa gửi email báo cáo Excel hàng tháng. Công việc của em thỉnh thoảng phải gửi các báo cáo tổng hợp cho sếp, mà làm thủ công thì mất công quá, nhất là khi file báo cáo có thể thay đổi tên file hoặc đường dẫn.
Em đã tìm hiểu và dùng Python để giải quyết vấn đề này. Cụ thể là dùng thư viện smtplib để gửi email và email.mime để tạo nội dung email có đính kèm file.
Cách làm cơ bản:
- Đầu tiên, các bác cần chuẩn bị file báo cáo Excel mà mình muốn gửi.
- Tiếp theo, viết một đoạn script Python để thực hiện các bước sau:
- Kết nối đến máy chủ email (ví dụ: Gmail, Outlook).
- Tạo nội dung email, bao gồm tiêu đề, người nhận, người gửi và phần thân email.
- Đính kèm file Excel báo cáo vào email.
- Gửi email đi.
Code mẫu cho việc gửi email đính kèm file Excel (với Gmail) sẽ như sau:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
msg = MIMEMultipart()
msg['From'] = 'your_email@gmail.com'
msg['To'] = 'recipient_email@example.com'
msg['Subject'] = 'Bao cao thang [Thang] [Nam]'
body = """Dear Team,\n\nXin vui long xem file bao cao dinh kem.\n\nBest regards,\nYour Name"""
msg.attach(MIMEText(body, 'plain'))
filename = "BaoCao_Thang_10_2023.xlsx" # Ten file Excel cua ban
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= %s" % filename)
msg.attach(part)
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login('your_email@gmail.com', 'your_password')
text = msg.as_string()
server.sendmail('your_email@gmail.com', 'recipient_email@example.com', text)
server.quit()
Lưu ý:
- Các bác cần thay thế
'your_email@gmail.com','your_password','recipient_email@example.com'và tên file cho phù hợp. - Đối với Gmail, các bác có thể cần bật chế độ 'Less secure app access' hoặc tạo mật khẩu ứng dụng.
- Để chạy tự động hàng tháng, các bác có thể dùng Task Scheduler trên Windows hoặc cron job trên Linux để lên lịch chạy script này.
Hy vọng chia sẻ này hữu ích cho các bác nào đang làm công việc tương tự. Nếu có câu hỏi hoặc cách làm hay hơn, mọi người cùng thảo luận nhé!