Computer >> Hướng Dẫn Máy Tính >  >> Phần Mềm >> Thư Điện Tử

Cách gửi email tự động bằng Python

Mặc dù các ứng dụng email thương mại cung cấp sự tiện lợi của GUI thân thiện, chúng thường thiếu sự linh hoạt và tùy chỉnh mà nhiều lập trình viên hoặc người tạo nội dung mong muốn cho nhu cầu email.

Dù để gửi email cảm ơn đến người đăng ký mới trên kênh mạng xã hội hay thêm chức năng email vào dự án mới, khả năng gửi tin nhắn tự động bằng SMTP trong Python chắc chắn sẽ hữu ích.

Đọc tiếp để biết cách chạy tập lệnh Python gửi email trên máy của bạn ngay hôm nay.

SMTP là gì?

Đơn giản mà nói, SMTP (Simple Mail Transfer Protocol) là giao thức truyền thông cho máy chủ thư để truyền email qua internet.

Nó là phần thiết yếu của lớp ứng dụng trong bộ TCP/IP, tập các giao thức dùng cho truyền thông qua internet hoặc mạng tương tự. Trong mạng triển khai SMTP, quy trình lưu trữ và chuyển tiếp giúp di chuyển thư qua các mạng.

Tại mỗi đầu cuối, phần mềm gọi là Mail Transfer Agent (MTA) dùng lưu trữ và chuyển tiếp để tạo điều kiện truyền thông giữa các máy chủ SMTP tham gia. Vai trò chính của SMTP là chỉ định nơi và cách thư di chuyển từ điểm này sang điểm khác trong mạng.

Bắt đầu

Bạn cần tài khoản email để gửi email bằng chương trình này. Vì chúng ta sẽ dùng dịch vụ SMTP của ứng dụng email để gửi. Hướng dẫn này dùng Gmail.

Bạn cũng có thể dùng máy chủ SMTP cục bộ để gửi email test, nhưng hiện tại dùng tài khoản email trực quan hơn.

Có thể dùng tài khoản Gmail hiện có, nhưng khi thử nghiệm chương trình, nó sớm bị lấp đầy email test. Vì vậy khuyên tạo tài khoản "dùng một lần" cho mục đích test.

Bây giờ, bật tùy chọn cho phép ứng dụng kém an toàn truy cập Gmail. Đây là lý do khác dùng email dùng một lần vì không khuyến khích thay đổi cài đặt bảo mật email chính.

Viết email trong Python

Python 3 cài sẵn module smtplib (viết tắt của smtp library), dùng để làm việc với máy chủ SMTP.

Giống mọi module Python, điều đầu tiên là import smtplib.

import smtplib

Khởi tạo đối tượng SMTP

Bây giờ, dùng smtplib tạo đối tượng SMTP, cung cấp hầu hết chức năng của ứng dụng email thông thường. Tuy nhiên, hàm của đối tượng SMTP chỉ dùng qua phương thức instance. Vì vậy, bước tiếp theo là khai báo instance đối tượng.

mySMTP = smtplib.SMTP("smtp.google.com") 

Điều này cấu hình đối tượng SMTP gửi email qua máy chủ SMTP của Google.

Sau đó, chỉ định email người gửi và người nhận. Tại đây tài khoản Gmail bạn tạo trước đây hữu ích.

emailSender = “senderMail@sender.com”
myThroaway = "myEmail@gmail.com"
emailRecipients = [myThroaway]

Lưu ý: danh sách người nhận thực sự là một mảng, nghĩa là được thiết kế lưu giá trị phi nguyên tử. Do đó, bạn thậm chí có thể chỉ định toàn bộ danh sách gửi thư trong trường này!

Viết tin nhắn

Có lẽ phần đơn giản nhất, ở đây bạn nhập giá trị thường thêm khi soạn email mới. Bao gồm:

  • Chi tiết người gửi
  • Chi tiết người nhận
  • Chủ đề
  • Nội dung thư

Các trường này được gộp trong dấu ba ngoặc kép và phân tách như sau:

newEmail = """From: From Person <senderMail@sender.com>
To: To Person <my_email@gmail.com>
Subject: Email Test
This is the body of the email.
"""

Gửi email

Cuối cùng, dùng lệnh sendmail gửi thư từ máy chủ SMTP của bạn đến máy chủ người nhận.

mySMTP.sendmail(emailSender, emailRecipients, newEmail)

Chỉ còn một bước cuối: tổ chức lại code để ngăn chặn sự cố chương trình có thể lường trước.

Khắc phục sự cố chương trình email Python

Đôi khi máy chủ SMTP không thiết lập được kết nối với máy chủ người nhận, hoặc có vấn đề gửi email từ cổng SMTP này sang cổng khác. Trong trường hợp đó, chương trình có thể bị sập bất ngờ.

Để giải quyết, dùng khối try-except và đặt câu lệnh dễ gây lỗi trong khối try. Toàn bộ chương trình với try-except trông như sau:

import smtplib
emailSender = “senderMail@sender.com”
myThroaway = ‘my_email@gmail.com’
emailRecipients = [myThroaway]
newEmail = """From: From Person <senderMail@sender.com>
To: To Person <my_email@gmail.com>
Subject: Email Test
This is the body of the email.
"""
try:
smtpObj = smtplib.SMTP(‘smtp.gmail.com’)
mySMTP.sendmail(emailSender, emailRecipients, newEmail)
print (“Email sent successfully!”)
except SMTPException:
print ("Error: There was an error in sending your email.")

Bảo mật email của bạn

Nếu định dùng Python trong thực tế gửi email, quan trọng phải đảm bảo truyền thông an toàn ở cả hai đầu.

Dùng máy chủ SMTP đơn giản với cổng mặc định không cung cấp lớp mã hóa. Nghĩa là nếu bên thứ ba nghe lén mạng, chúng có thể truy cập thông tin đăng nhập và nội dung email.

Cách giải quyết là dùng giao thức TLS (Transport Layer Security) mã hóa truyền thông. Đây là giao thức Gmail và Outlook dùng để đảm bảo email không rơi vào tay sai.

Cách gửi email tự động bằng Python

Để làm vậy, cần một vài thay đổi nhỏ cho chương trình trước.

Bước đầu, import thư viện ssl cùng smtplib. Thư viện ssl cho phép tạo ngữ cảnh SSL an toàn và truyền thông qua mạng mã hóa bằng cách kết nối cổng cụ thể ở cả hai đầu.

Một ngữ cảnh SSL an toàn không gì hơn tập hợp các cipher, phiên bản giao thức, chứng chỉ tin cậy, tùy chọn TLS và mở rộng TLS.

Sau đó, chỉ định cổng TLS và thêm vài hàm ssl để tạo bộ gửi email an toàn.

Code với tất cả thay đổi trông như sau:

import smtplib, ssl
smtpServer = "smtp.gmail.com"
port = 587
myEmail = "my_email@gmail.com"
password = "my_password"
#email and password can also be user input fields
context = ssl.create_default_context()
newEmail = """From: From Person <senderMail@sender.com>
To: To Person <my_email@gmail.com>
Subject: Email Test
This is the body of the email.
"""
try:
server = smtplib.SMTP(smtpServer,port)
server.starttls(context=context)
server.login(newEmail, password)
except Exception as e:
print("the email could not be sent.")
finally:
server.quit()

Giống như trước, bạn nên tạo và dùng instance SMTP trong khối try-except để ngăn chặn sập chương trình đột ngột.

Bạn có thể làm gì với tập lệnh Python này

Bây giờ bạn đã nắm được kỹ năng thú vị và hữu ích là tự động hóa email bằng code, bạn có thể áp dụng cho bất kỳ nền tảng nào yêu cầu gửi email đến danh sách gửi thư đa dạng.

Từ dùng trên trang web cá nhân gửi email xác nhận tự động đến gửi thiệp Giáng sinh hoặc lời mời cho gia đình bạn bè, việc dùng tập lệnh Python nhỏ này chỉ bị giới hạn bởi sự sáng tạo của bạn.

Cũng, đây chỉ là một trong nhiều điều tuyệt vời bạn có thể làm với Python. Với hỗ trợ lập trình viên phổ biến và cú pháp dễ học, học kỹ năng Python chưa bao giờ dễ dàng hơn.

Để tiếp tục xây dựng điều cool với code, xem hướng dẫn xây dựng bot Telegram riêng với Python 3!