Cách gửi email với ứng dụng khách SMTP tích hợp sẵn của Python và máy chủ thư MailSlurp. Cấu hình và gửi thư thành ngữ Python
Mục lục
Python là ngôn ngữ có thể làm tất cả - bao gồm cả email SMTP. Sử dụng thư viện smtplib
được xây dựng, chúng tôi có thể thiết lập gửi email đi bằng Python tới các máy chủ SMTP bên ngoài. Hãy để chúng tôi chứng minh
SMTP là gì và nó hoạt động như thế nào?
Đầu tiên, tổng quan nhanh về SMTP và cách thức hoạt động của email. SMTP [giao thức truyền thư đơn giản] mô tả việc gửi và nhận email qua TCP - thường trên các cổng 25, 2525, 465 hoặc 587. Mỗi địa chỉ email [chẳng hạn như @gmail. com] có một máy chủ SMTP cơ bản chạy trên miền [smtp. gmail. com chẳng hạn] và lắng nghe email đến. Khi chúng tôi muốn gửi email đến địa chỉ do máy chủ cung cấp, chúng tôi có thể kết nối qua SMTP bằng Python và gửi thư
Định cấu hình SMTPLib
Để sử dụng Python để gửi email SMTP, trước tiên chúng ta cần nhập và định cấu hình thư viện smtplib
pin đi kèm. Trong một tệp python mới, hãy thêm
from smtplib import SMTP
Sau khi nhập, bạn có thể mở một kết nối mới như vậy
with SMTP[host='smtp.gmail.com', port=465] as smtp:
smtp.sendmail[from_addr='from@address.com', to_addrs=['to@address.com'], msg='Your message']
smtp.quit[]
Đối với mỗi email bạn muốn gửi, bạn sẽ cần kết nối với máy chủ SMTP bên dưới hoặc sử dụng máy chủ SMTP của riêng bạn để chuyển email cho bạn. Khi sử dụng máy chủ SMTP của riêng bạn, bạn sẽ muốn tạo xác thực để chỉ bạn mới có thể gửi từ nó
Sử dụng xác thực
Giả sử bạn đã tạo máy chủ SMTP bằng MailSlurp, bạn có thể truy cập máy chủ bằng tên người dùng và mật khẩu của mình cho tài khoản được lưu trữ trên một miền và cổng
Trong mã, bạn có thể sử dụng MailSlurp SDK để có được những chi tiết này bằng phương pháp inbox_controller.get_imap_smtp_access[]
# get smtp imap access
smtp_access = inbox_controller.get_imap_smtp_access[inbox_id=inbox1.id]
msg = "Subject: Test subject\r\n\r\nThis is the body"
with SMTP[host=smtp_access.smtp_server_host, port=smtp_access.smtp_server_port] as smtp:
smtp.login[user=smtp_access.smtp_username, password=smtp_access.smtp_password]
smtp.sendmail[from_addr=inbox1.email_address, to_addrs=[inbox2.email_address], msg=msg]
smtp.quit[]
Máy chủ SMTP cung cấp một số phương thức xác thực nhưng LOGIN
và PLAIN
là hai phương thức phổ biến
Gửi nội dung email
Để gửi email SMTP bằng Python, bạn phải xây dựng và gửi email body. Nội dung của email bắt đầu bằng các dòng tiêu đề là các cặp giá trị chính và sau đó là phần nội dung được phân tách bằng một dòng mới. Ví dụ. msg = "Subject: Test subject\r\n\r\nThis is the body"
Kiểm tra email với MailSlurp
Để kiểm tra xem ứng dụng Python của bạn có gửi email chính xác hay chạy máy chủ SMTP của riêng bạn, hãy thử MailSlurp. MailSlurp cung cấp hộp thư email dùng một lần [hoặc vĩnh viễn] không giới hạn có thể được kết nối với Python và SMTP để gửi email. Hãy để chúng tôi sử dụng MailSlurp và Pytest để chứng minh
import os
# get an api key at //app.mailslurp.com/sign-up
import mailslurp_client
from smtplib import SMTP
from mailslurp_client import CreateInboxDto
api_key = os.environ.get['API_KEY']
assert api_key is not None
# create a mailslurp configuration
configuration = mailslurp_client.Configuration[]
configuration.api_key['x-api-key'] = api_key
class Test_MailSlurp_SDK:
"""
Can send email with SMTP
"""
def test_can_send_with_smtp[self]:
with mailslurp_client.ApiClient[configuration] as api_client:
inbox_controller = mailslurp_client.InboxControllerApi[api_client]
inbox1 = inbox_controller.create_inbox_with_options[CreateInboxDto[inbox_type="SMTP_INBOX"]]
inbox2 = inbox_controller.create_inbox[]
assert "@mailslurp.mx" in inbox1.email_address
# get smtp imap access
smtp_access = inbox_controller.get_imap_smtp_access[inbox_id=inbox1.id]
msg = "Subject: Test subject\r\n\r\nThis is the body"
with SMTP[host=smtp_access.smtp_server_host, port=smtp_access.smtp_server_port] as smtp:
smtp.login[user=smtp_access.smtp_username, password=smtp_access.smtp_password]
smtp.sendmail[from_addr=inbox1.email_address, to_addrs=[inbox2.email_address], msg=msg]
smtp.quit[]
wait_for_controller = mailslurp_client.WaitForControllerApi[api_client]
email = wait_for_controller.wait_for_latest_email[inbox_id=inbox2.id]
assert "Test subject" in email.subject
Thêm thông tin
Để đọc thêm về cách gửi email SMTP bằng Python, hãy tham khảo tài liệu smtplib hoặc xem trang nhà phát triển MailSlurp Python