Cách gửi email bằng Python
Python là một ngôn ngữ có nhiều tính năng. Nó có thể được sử dụng để phân tích dữ liệu, phát triển web và hơn thế nữa. Đó không phải là tất cả, Python có một tính năng ẩn:bạn có thể sử dụng nó để gửi email. Điều này có nghĩa là bạn có thể gửi email đặt lại mật khẩu, email quên mật khẩu, thông báo của người dùng và bất kỳ email nào khác mà bạn muốn gửi, từ một chương trình Python.
Trong hướng dẫn này, chúng ta sẽ thảo luận về cách gửi email bằng Python. Chúng ta sẽ xem qua các thư viện email và smtplib, cách chúng hoạt động và viết một chương trình ví dụ để gửi email.
Không cần thêm lời khuyên nào nữa, hãy bắt đầu!
Gửi email bằng Python
Khi bạn gửi email từ một chương trình máy tính, chương trình của bạn sẽ gửi thư bằng một giao thức được gọi là Simple Mail Transfer Protocol (SMTP). Giao thức này được sử dụng bởi các dịch vụ email và ứng dụng khách trên khắp thế giới để gửi tin nhắn.
Để gửi email từ chương trình máy tính, bạn cần có máy chủ SMTP. Bạn có thể tự thiết lập một cái nhưng không phải lúc nào bạn cũng phải làm việc này. Các dịch vụ như Gmail và Outlook cung cấp dịch vụ SMTP để bạn có thể sử dụng các tài khoản email hiện có của mình để gửi email.
Đối với hướng dẫn này, chúng tôi sẽ giả định rằng bạn đang gửi email từ máy chủ SMTP của Gmail. Bạn có thể tìm hiểu thêm về máy chủ SMTP của họ trong tài liệu chính thức của Gmail. Để biết liệu nhà cung cấp dịch vụ email của bạn có hỗ trợ SMTP hay không, hãy tìm kiếm trực tuyến ‘[tên của nhà cung cấp] thông tin đăng nhập SMTP’.
Chúng tôi có ba bước cần làm để gửi email:
- Định cấu hình kết nối SMTP của chúng tôi
- Tạo một đối tượng tin nhắn
- Gửi tin nhắn qua SMTP
Định cấu hình Kết nối SMTP
Để bắt đầu, hãy thiết lập kết nối SMTP của chúng tôi. Chúng tôi có thể thực hiện việc này bằng cách sử dụng thư viện có tên smtplib cung cấp tất cả mã chúng tôi cần để quản lý kết nối. Nhờ có thư viện này, chỉ cần một vài dòng mã để gửi một email.
81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia chương trình đào tạo. Kết hợp với bootcamp ngay hôm nay.
Sinh viên tốt nghiệp bootcamp trung bình dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.
Bắt đầu bằng cách nhập thư viện smtplib vào mã của bạn:
import smtplib
Bây giờ chúng tôi phải thiết lập các biến lưu trữ thông tin đăng nhập cho máy chủ SMTP của chúng tôi. Lưu trữ các giá trị này trong các biến sẽ giúp chúng tôi duy trì khả năng đọc của mã của chúng tôi. Dưới đây là các biến chúng tôi sẽ sử dụng:
sender = '[email protected]' password = '123456' server = 'smtp.gmail.com' port = 465
Mã này chứa tất cả cấu hình chúng ta cần để tạo kết nối SMTP. Bây giờ chúng tôi đã thiết lập xong phần mềm này, chúng tôi có thể đăng nhập vào máy chủ SMTP của mình:
server = smtplib.SMTP_SSL(server, port) server.login(sender, password)
Mã của chúng tôi tạo kết nối SSL đến máy chủ SMTP của chúng tôi. Điều này có nghĩa là chúng tôi đang sử dụng Lớp cổng bảo mật (SSL) để kết nối với máy chủ của mình. SSL an toàn hơn kết nối truyền thống và kết quả là nó đã trở thành tiêu chuẩn trên các máy chủ SMTP.
Kết nối SMTP của chúng tôi hiện đã được định cấu hình!
Tạo đối tượng tin nhắn
Mã của chúng tôi hiện không hoạt động nhiều:nó chắc chắn không gửi được email. Đó là bởi vì chúng tôi chưa tạo đối tượng tin nhắn. Hãy làm điều này bằng cách sử dụng thư viện email. Mặc dù bạn có thể sử dụng smtplib để tạo đối tượng tin nhắn, nhưng thư viện email ngắn gọn hơn.
Hãy bắt đầu bằng cách nhập các gói email cần thiết:
from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText
Với các thư viện được nhập này, chúng ta có thể tạo đối tượng tin nhắn của mình:
message = MIMEMultipart() body = 'This is an email sent from Python!' message['From'] = sender message['To'] = '[email protected]' message['Subject'] = 'This is a test email' message.attach(MIMEText(body, 'plain'))
Chúng tôi đã bắt đầu bằng cách khởi tạo một đối tượng có tên là "message". Đối tượng này tham chiếu đến lớp MIMEMultipart từ thư viện email. Sau đó, chúng tôi đã chỉ định nội dung email của mình và người gửi, người nhận và chủ đề.
Dòng mã cuối cùng của chúng tôi đính kèm nội dung thư vào email của chúng tôi.
Gửi tin nhắn
Bây giờ tất cả những gì còn lại cần làm là gửi tin nhắn của chúng tôi:
server.send_message(message)
Khi chúng tôi chạy tất cả mã của mình cùng nhau, một email sẽ được gửi! Email có tiêu đề "Đây là email thử nghiệm" được gửi từ [email protected] đến [email protected].
Đọc mẫu từ tệp
Nội dung email của chúng tôi chỉ dài một dòng. Điều này có nghĩa là chúng tôi viết nội dung email bên trong Python sẽ thiết thực hơn. Hầu hết các email đều dài hơn mức này và vì vậy tốt hơn hết bạn nên tạo một mẫu để lưu trữ văn bản cho một email cụ thể.
Chúng tôi sẽ bắt đầu bằng cách tạo một tệp có tên email.txt và dán các nội dung sau:
Hello ${NAME}, This is a test email! Thanks, Career Karma
Mẫu này chứa một biến có tên là “NAME”, được đặt trong dấu ngoặc nhọn ({}) và đứng trước dấu đô la ($). Biến này sẽ được thay thế bằng tên của người nhận sau này trong mã của chúng tôi.
Bây giờ chúng tôi sẽ phải đọc mẫu này vào mã của chúng tôi. Chúng ta có thể làm điều này bằng cách tạo một lớp gọi là read_email sử dụng phương thức open () để đọc tệp của chúng ta.
Chúng tôi sẽ nhập đối tượng Template từ thư viện chuỗi. Chúng tôi sẽ sử dụng đối tượng này để tạo một đối tượng có thể đọc được qua email của chúng tôi. Dán dòng mã sau vào đầu chương trình Python của bạn:
from string import Template
Bên dưới tất cả các câu lệnh nhập của bạn, hãy dán mã này vào:
def read_email(): with open('email.txt', 'r') as file: contents = file.read() return Template(contents)
Hàm này sẽ đọc tệp có tên “email.txt” vào biến “nội dung”. Giá trị của nó sau đó được chuyển đổi thành một đối tượng Mẫu bằng cách sử dụng phương thức Mẫu từ thư viện "chuỗi". Bạn có thể tìm hiểu thêm về cách đọc tệp trong hướng dẫn đọc tệp Python của chúng tôi.
Thay đổi dòng mã sau trong chương trình của bạn:
body = 'This is an email sent from Python!'
Để sử dụng mã này:
email_content = read_email() body = email_content.substitute(NAME="Test")
Mã này gọi read_email()
trong mã của chúng tôi để đọc nội dung của tệp “email.txt”. Sau đó, giá trị của NAME bên trong mẫu email của chúng tôi được thay thế bằng giá trị "Kiểm tra". Cùng với nhau, mã của chúng ta trông giống như sau:
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from string import Template def read_email(): with open('email.txt', 'r') as file: contents = file.read() return Template(contents) sender = '[email protected]' password = '123456" server = 'smtp.gmail.com' port = 465 server = smtplib.SMTP_SSL(server, port) server.login(sender, password) message = MIMEMultipart() email_content = read_email() body = email_content.substitute(NAME="Test") message['From'] = sender message['To'] = '[email protected]' message['Subject'] = 'This is a test email' message.attach(MIMEText(body, 'plain'))
Khi bạn chạy chương trình này, thay thế bằng thông tin đăng nhập máy chủ SMTP của bạn, một email sẽ được gửi. Bạn vừa viết một chương trình để gửi email.
Kết luận
Gửi email bằng Python không khó. Không cần sử dụng mẫu, việc gửi email chỉ mất một vài dòng mã. Các mô-đun email và smtplib thực hiện hầu hết các công việc nặng nhọc. Như đã nói, bạn có thể sử dụng mô-đun email một cách rộng rãi hơn để tạo các mẫu cho email của bạn có thể thay thế các giá trị.
Bạn có sẵn sàng cho một thử thách? Thay đổi chương trình từ bên trên để hỗ trợ gửi email đến nhiều người nhận. Gợi ý:Bạn sẽ muốn sử dụng vòng lặp for để gửi những email này.
Bây giờ, bạn đã sẵn sàng để bắt đầu gửi email bằng Python như một chuyên gia!