Mặc dù ứng dụng email khách thương mại cung cấp sự tiện lợi của GUI thân thiện với người dùng, chúng thường thiếu tính linh hoạt và khả năng tùy chỉnh mà nhiều nhà phát triển hoặc người tạo nội dung mong muốn cho nhu cầu gửi email của họ.
Có thể là để gửi email cảm ơn đến người đăng ký mới trên kênh truyền thông xã hội của bạn hoặc thêm chức năng email vào dự án mới nhất của bạn, khả năng gửi tin nhắn tự động bằng SMTP trong Python là điều chắc chắn sẽ hữu ích.
Đọc tiếp để tìm hiểu cách bạn có thể tải tập lệnh Python để gửi email chạy trên máy của bạn ngay hôm nay.
SMTP là gì?
Nói một cách đơn giản, SMTP, hay Giao thức truyền thư đơn giản, là một giao thức giao tiếp dành cho các máy chủ thư để truyền email qua internet.
Nó là một phần không thể thiếu của lớp ứng dụng của bộ TCP / IP, là một tập hợp các giao thức được sử dụng để giao tiếp qua internet hoặc các mạng tương tự khác. Trong mạng mà SMTP được triển khai, một quá trình được gọi là lưu trữ và chuyển tiếp giúp di chuyển thư qua các mạng.
Tại mỗi điểm cuối, phần mềm được gọi là Tác nhân truyền thư (MTA) sử dụng lưu trữ và chuyển tiếp để tạo điều kiện giao tiếp giữa các máy chủ SMTP tham gia. Do đó, vai trò chính của SMTP chỉ đơn giản là chỉ định vị trí và cách thức mà thư di chuyển từ điểm này sang điểm khác trong mạng.
Bắt đầu
Bạn cần có tài khoản email để gửi email bằng chương trình này. Điều này là do chúng tôi sẽ sử dụng dịch vụ SMTP của ứng dụng email để gửi email. Đối với hướng dẫn này, chúng tôi sẽ sử dụng Gmail.
Bạn cũng có thể sử dụng máy chủ gỡ lỗi SMTP cục bộ để gửi email thử nghiệm, nhưng hiện tại, chúng tôi sẽ sử dụng tài khoản email để gửi email vì nó trực quan hơn.
Có thể chỉ cần sử dụng một tài khoản Gmail hiện có, nhưng khi bạn sử dụng chương trình của mình, nó có thể sớm bị lấp đầy bởi các email thử nghiệm. Đây là lý do tại sao chúng tôi khuyên bạn nên tạo một tài khoản 'bỏ túi' cho mục đích thử nghiệm.
Bây giờ, hãy bật tùy chọn cho phép các ứng dụng kém an toàn hơn truy cập vào tài khoản Gmail của bạn. Đây là một lý do khác để sử dụng email bỏ đi vì bạn không nên sử dụng cài đặt bảo mật trong email chính của mình.
Viết email bằng Python
Python 3 được cài đặt sẵn một mô-đun có tên smtplib (viết tắt của thư viện smtp), có thể được sử dụng để làm việc với các máy chủ SMTP.
Giống như bất kỳ mô-đun Python nào khác, điều đầu tiên bạn phải làm là nhập smtplib.
import smtplib
Khởi tạo Đối tượng SMTP
Bây giờ, bạn có thể sử dụng smtplib để tạo một đối tượng SMTP, đối tượng này sẽ cung cấp cho bạn hầu hết các chức năng của một ứng dụng email thông thường. Tuy nhiên, các chức năng của đối tượng SMTP chỉ có thể được sử dụng thông qua các phương thức phiên bản. Vì vậy, tự nhiên, bước tiếp theo là khai báo một thể hiện đối tượng.
mySMTP = smtplib.SMTP("smtp.google.com")
Điều này định cấu hình đối tượng SMTP để gửi email bằng máy chủ SMTP của Google.
Sau đó, chúng tôi chỉ định email người gửi và người nhận. Đây là nơi hữu ích cho tài khoản Gmail bạn đã tạo trước đó.
emailSender = “[email protected]”
myThroaway = "[email protected]"
emailRecipients = [myThroaway]
Một điều cần lưu ý ở đây là danh sách người nhận thực sự là một mảng, có nghĩa là nó được thiết kế để lưu trữ các 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ó thể cho rằng phần đơn giản nhất của quy trình, ở đây bạn phải nhập các giá trị mà bạn thường thêm khi soạn email mới. Điều này bao gồm:
- Thông tin chi tiết về người gửi
- Chi tiết của người nhận
- Chủ đề
- Nội dung thư
Các trường này được đặt cùng nhau bên trong dấu ngoặc kép ba và được phân chia như sau:
newEmail = """From: From Person <[email protected]>
To: To Person <[email protected]>
Subject: Email Test
This is the body of the email.
"""
Gửi Email
Cuối cùng, chúng tôi có thể sử dụng lệnh sendmail để gửi thư từ máy chủ SMTP của bạn đến máy chủ của người nhận.
mySMTP.sendmail(emailSender, emailRecipients, newEmail)
Bây giờ, chỉ còn một bước cuối cùng:tổ chức lại mã để ngăn chặn bất kỳ sự cố chương trình có thể thấy trước.
Khắc phục sự cố Chương trình Email Python của bạn
Đôi khi, máy chủ SMTP của bạn có thể không thiết lập được kết nối với máy chủ của người nhận hoặc có thể xảy ra sự cố khi gửi email từ cổng SMTP này sang cổng SMTP khác. Trong trường hợp như vậy, chương trình của bạn có thể bị lỗi bất ngờ.
Để giải thích các khả năng như vậy, bạn có thể sử dụng thử ngoại trừ chặn và đặt các câu lệnh dễ xảy ra lỗi bên trong try khối. Toàn bộ chương trình của bạn, cùng với khối thử ngoại trừ, sẽ trông giống như sau:
import smtplib
emailSender = “[email protected]”
myThroaway = ‘[email protected]’
emailRecipients = [myThroaway]
newEmail = """From: From Person <[email protected]>
To: To Person <[email protected]>
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 bạn định sử dụng Python trong cài đặt thế giới thực để gửi email, điều quan trọng là phải đảm bảo rằng giao tiếp được bảo mật ở cả hai đầu.
Sử dụng một máy chủ SMTP đơn giản với cổng mặc định không cung cấp bất kỳ lớp mã hóa nào cho giao tiếp. Điều này có nghĩa là nếu bất kỳ bên thứ ba nào đang nghe ngóng trên mạng của bạn, bên thứ ba đó có thể truy cập thông tin đăng nhập và thông tin có trong email của bạn.
Một cách để giải quyết vấn đề này là sử dụng giao thức TLS (Bảo mật lớp truyền tải) để mã hóa giao tiếp của bạn. Đây cũng là giao thức được sử dụng bởi các ứng dụng email lớn như Gmail và Outlook để đảm bảo rằng email của bạn không bao giờ rơi vào tay kẻ xấu.
Để làm như vậy, chúng tôi cần thực hiện một vài thay đổi nhỏ đối với chương trình chúng tôi đã tạo trước đó.
Tất nhiên, bước đầu tiên là nhập ssl thư viện cùng với smtplib . ssl thư viện cung cấp cho bạn khả năng tạo ngữ cảnh SSL an toàn và giao tiếp qua mạng được mã hóa bằng cách kết nối với các cổng cụ thể ở cả hai đầu.
Bối cảnh SSL an toàn không có gì khác ngoài tập hợp các mật mã, phiên bản giao thức, chứng chỉ đáng tin cậy, tùy chọn TLS và phần mở rộng TLS.
Sau đó, chúng tôi có thể chỉ định cổng TLS và thêm một vài ssl các chức năng của thư viện để tạo một trình gửi email an toàn.
Mã, với tất cả các thay đổi được thực hiện, trông giống như sau:
import smtplib, ssl
smtpServer = "smtp.gmail.com"
port = 587
myEmail = "[email protected]"
password = "my_password"
#email and password can also be user input fields
context = ssl.create_default_context()
newEmail = """From: From Person <[email protected]>
To: To Person <[email protected]>
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()
Như trước đây, bạn nên tạo và sử dụng phiên bản SMTP trong một khối thử ngoại trừ để ngăn chặn bất kỳ sự cố chương trình đột ngột nào.
Bạn có thể làm gì với tập lệnh Python này
Bây giờ bạn đã có được kỹ năng tuyệt vời và hữu ích đáng ngạc nhiên về việc tự động hóa email bằng mã, bạn có thể áp dụng nó cho bất kỳ nền tảng nào yêu cầu gửi email đến một danh sách gửi thư đa dạng.
Từ việc sử dụng nó trên trang web cá nhân của bạn để gửi email xác nhận tự động đến sử dụng nó để gửi thiệp Giáng sinh hoặc lời mời qua email cho gia đình và bạn bè của bạn, việc sử 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 riêng bạn.
Ngoài ra, đây chỉ là một trong nhiều điều tuyệt vời mà bạn có thể làm với Python. Với sự hỗ trợ nhà phát triển phổ biến và cú pháp dễ học, việc học một kỹ năng Python chưa bao giờ dễ dàng hơn thế.
Để tiếp tục xây dựng những điều thú vị với mã, hãy xem hướng dẫn của chúng tôi về cách tạo bot Telegram của riêng bạn với Python 3!