Python smtplib mà không cần xác thực

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

Giao thứcHostPortTLSMô tảSMTPmx. mailslurp. com2525falseMáy chủ SMTP

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 LOGINPLAIN 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

Tôi có thể sử dụng SMTP mà không cần xác thực không?

Tên miền đủ điều kiện của dịch vụ SMTP là aspmx. l. Google. com. TLS không bắt buộc. Không cần xác thực .

Tôi có thể sử dụng chuyển tiếp Google SMTP mà không cần xác thực không?

Bạn không thể sử dụng gmail smtp-server mà không cần xác thực . Đó là chính sách của google. Bạn cần nhập mật khẩu tài khoản của mình.

Sự khác biệt giữa Smtplib an toàn và Smtplib là gì?

Sự khác biệt là smtplib. SMTP_SSL sử dụng giao thức SSL được mã hóa an toàn để kết nối với máy chủ SMTP trong khi smtplib. SMTP không . Gmail không cho phép giao tiếp qua kênh không phải SSL hoặc không phải TLS, vì vậy chúng tôi không thể sử dụng smtplib.

Làm cách nào để gửi thư bằng smtplib trong Python?

Ví dụ .
#. /usr/bin/python3
nhập smtplib
sender_mail = 'người gửi@gmail. com'
receivers_mail = ['reciever@gmail. com']
tin nhắn = """Từ. Từ Người %s
Đến. Tới Người %s
Môn học. Gửi email SMTP
Đây là một tin nhắn e-mail thử nghiệm

Chủ Đề