Chào các bác, hôm nay em muốn chia sẻ một chút về cách em dùng Python để tự động gửi báo cáo Excel qua email hàng ngày. Công việc của em hay phải làm báo cáo và gửi cho sếp, mà làm thủ công thì mất thời gian quá. Sau khi tìm hiểu, em thấy Python có thể làm việc này rất gọn gàng.
Đầu tiên, các bác cần cài đặt thư viện openpyxl để đọc và ghi file Excel, và smtplib, email để gửi email.
pip install openpyxl
Code của em trông đại khái như thế này:
import openpyxl
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
# --- Cấu hình gửi email ---
sender_email = "your_email@gmail.com"
sender_password = "your_app_password"
receiver_email = "receiver_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"
# --- Đính kèm file Excel ---
filename = "bao_cao.xlsx"
# Mở file Excel (giả sử bạn đã có file này)
# wb = openpyxl.load_workbook(filename)
# ... xử lý dữ liệu nếu cần ...
# wb.save(filename)
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)
message.attach(part)
attachment.close()
# --- Kết nối và gửi email ---
try:
context = smtplib.ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.gmail.com", 465, context=context) as server:
server.login(sender_email, sender_password)
server.sendmail(sender_email, receiver_email, message.as_string())
print("Email đã được gửi thành công!")
except Exception as e:
print(f"Lỗi khi gửi email: {e}")
Lưu ý: Các bác cần bật "Less secure app access" hoặc tạo "App password" trong cài đặt tài khoản Google của mình để sử dụng. Các bác có thể tùy chỉnh thêm nội dung email, định dạng báo cáo Excel, hoặc thậm chí là lên lịch chạy script tự động bằng Task Scheduler (Windows) hoặc cron (Linux/macOS).
Hy vọng chia sẻ này hữu ích cho các bác!