smtplib --- ứng dụng khách giao thức SMTP

Source code: Lib/smtplib.py


Mô-đun smtplib xác định một đối tượng phiên máy khách SMTP có thể được sử dụng để gửi thư đến bất kỳ máy internet nào có trình nền trình nghe SMTP hoặc ESMTP. Để biết chi tiết về hoạt động của SMTP và ESMTP, hãy tham khảo RFC 821 (Giao thức truyền thư đơn giản) và RFC 1869 (Tiện ích mở rộng dịch vụ SMTP).

sẵn có: not WASI.

Mô-đun này không hoạt động hoặc không có trên WebAssembly. Xem Nền tảng WebAssugging để biết thêm thông tin.

class smtplib.SMTP(host='', port=0, local_hostname=None, [timeout, ]source_address=None)

Một phiên bản SMTP đóng gói kết nối SMTP. Nó có các phương thức hỗ trợ đầy đủ các thao tác SMTP và ESMTP. Nếu các tham số hostport tùy chọn được cung cấp, phương thức SMTP connect() sẽ được gọi với các tham số đó trong quá trình khởi tạo. Nếu được chỉ định, local_hostname được sử dụng làm FQDN của máy chủ cục bộ trong lệnh HELO/EHLO. Nếu không, tên máy chủ cục bộ sẽ được tìm thấy bằng socket.getfqdn(). Nếu lệnh gọi connect() trả về bất cứ thứ gì ngoài mã thành công, thì SMTPConnectError sẽ được đưa ra. Tham số timeout tùy chọn chỉ định thời gian chờ tính bằng giây cho các hoạt động chặn như nỗ lực kết nối (nếu không được chỉ định, cài đặt thời gian chờ mặc định chung sẽ được sử dụng). Nếu hết thời gian chờ, TimeoutError sẽ được nâng lên. Tham số source_address tùy chọn cho phép liên kết với một số địa chỉ nguồn cụ thể trong máy có nhiều giao diện mạng và/hoặc với một số cổng TCP nguồn cụ thể. Phải mất 2 bộ (host, port) để ổ cắm liên kết làm địa chỉ nguồn trước khi kết nối. Nếu bị bỏ qua (hoặc nếu host hoặc port lần lượt là '' và/hoặc 0), hành vi mặc định của hệ điều hành sẽ được sử dụng.

Để sử dụng bình thường, bạn chỉ cần yêu cầu các phương thức khởi tạo/kết nối, sendmail()SMTP.quit(). Một ví dụ được bao gồm dưới đây.

Lớp SMTP hỗ trợ câu lệnh with. Khi được sử dụng như thế này, lệnh SMTP QUIT sẽ tự động được đưa ra khi câu lệnh with thoát. Ví dụ:

>>> từ smtplib nhập SMTP
>>> với SMTP("domain.org")  smtp:
... smtp.noop()
...
(250, b'Ok')
>>>

Tất cả các lệnh sẽ đưa ra một auditing event smtplib.SMTP.send với các đối số selfdata, trong đó data là các byte sắp được gửi đến máy chủ từ xa.

Thay đổi trong phiên bản 3.3: Hỗ trợ cho câu lệnh with đã được thêm vào.

Thay đổi trong phiên bản 3.3: đối số source_address đã được thêm vào.

Added in version 3.5: Tiện ích mở rộng SMTPUTF8 (RFC 6531) hiện được hỗ trợ.

Thay đổi trong phiên bản 3.9: Nếu tham số timeout được đặt thành 0, nó sẽ tăng ValueError để ngăn việc tạo ổ cắm không chặn.

class smtplib.SMTP_SSL(host='', port=0, local_hostname=None, *, [timeout, ]context=None, source_address=None)

Phiên bản SMTP_SSL hoạt động giống hệt như phiên bản SMTP. Nên sử dụng SMTP_SSL cho những trường hợp cần có SSL ngay từ đầu kết nối và việc sử dụng starttls() là không phù hợp. Nếu host không được chỉ định, máy chủ cục bộ sẽ được sử dụng. Nếu port bằng 0, cổng SMTP-over-SSL tiêu chuẩn (465) sẽ được sử dụng. Các đối số tùy chọn local_hostname, timeoutsource_address có cùng ý nghĩa như trong lớp SMTP. context, cũng là tùy chọn, có thể chứa SSLContext và cho phép định cấu hình các khía cạnh khác nhau của kết nối an toàn. Vui lòng đọc Cân nhắc về bảo mật để biết cách thực hành tốt nhất.

Thay đổi trong phiên bản 3.3: context đã được thêm vào.

Thay đổi trong phiên bản 3.3: Đối số source_address đã được thêm vào.

Thay đổi trong phiên bản 3.4: Lớp hiện hỗ trợ kiểm tra tên máy chủ bằng ssl.SSLContext.check_hostnameServer Name Indication (xem ssl.HAS_SNI).

Thay đổi trong phiên bản 3.9: Nếu tham số timeout được đặt thành 0, nó sẽ tăng ValueError để ngăn việc tạo ổ cắm không chặn

Thay đổi trong phiên bản 3.12: Các tham số keyfilecertfile không được dùng nữa đã bị xóa.

class smtplib.LMTP(host='', port=LMTP_PORT, local_hostname=None, source_address=None[, timeout])

Giao thức LMTP, rất giống với ESMTP, chủ yếu dựa trên ứng dụng khách SMTP tiêu chuẩn. Việc sử dụng ổ cắm Unix cho LMTP là điều bình thường, vì vậy phương pháp connect() của chúng tôi phải hỗ trợ điều đó cũng như máy chủ lưu trữ: cổng thông thường. Các đối số tùy chọn local_hostnamesource_address có cùng ý nghĩa như trong lớp SMTP. Để chỉ định ổ cắm Unix, bạn phải sử dụng đường dẫn tuyệt đối cho host, bắt đầu bằng '/'.

Hỗ trợ xác thực bằng cơ chế SMTP thông thường. Khi sử dụng ổ cắm Unix, LMTP thường không hỗ trợ hoặc yêu cầu bất kỳ xác thực nào, nhưng số dặm của bạn có thể thay đổi.

Thay đổi trong phiên bản 3.9: Tham số timeout tùy chọn đã được thêm vào.

Một lựa chọn tốt về các trường hợp ngoại lệ cũng được xác định:

exception smtplib.SMTPException

Lớp con của OSError là lớp ngoại lệ cơ sở cho tất cả các ngoại lệ khác do mô-đun này cung cấp.

Thay đổi trong phiên bản 3.4: SMTPException trở thành lớp con của OSError

exception smtplib.SMTPServerDisconnected

Ngoại lệ này xảy ra khi máy chủ ngắt kết nối đột ngột hoặc khi cố gắng sử dụng phiên bản SMTP trước khi kết nối nó với máy chủ.

exception smtplib.SMTPResponseException

Lớp cơ sở cho tất cả các trường hợp ngoại lệ bao gồm mã lỗi SMTP. Những ngoại lệ này được tạo ra trong một số trường hợp khi máy chủ SMTP trả về mã lỗi.

smtp_code

Mã lỗi.

smtp_error

Thông báo lỗi.

exception smtplib.SMTPSenderRefused

Địa chỉ người gửi bị từ chối. Ngoài các thuộc tính được đặt bởi tất cả các ngoại lệ của SMTPResponseException, điều này còn đặt 'người gửi' thành chuỗi mà máy chủ SMTP từ chối.

exception smtplib.SMTPRecipientsRefused

Tất cả địa chỉ người nhận đều bị từ chối.

recipients

Một từ điển có cùng loại được trả về bởi SMTP.sendmail() chứa các lỗi cho mỗi người nhận.

exception smtplib.SMTPDataError

Máy chủ SMTP từ chối chấp nhận dữ liệu tin nhắn.

exception smtplib.SMTPConnectError

Đã xảy ra lỗi trong quá trình thiết lập kết nối với máy chủ.

exception smtplib.SMTPHeloError

Máy chủ đã từ chối tin nhắn HELO của chúng tôi.

exception smtplib.SMTPNotSupportedError

Lệnh hoặc tùy chọn đã thử không được máy chủ hỗ trợ.

Added in version 3.5.

exception smtplib.SMTPAuthenticationError

Xác thực SMTP không thành công. Rất có thể máy chủ không chấp nhận kết hợp tên người dùng/mật khẩu được cung cấp.

Xem thêm

RFC 821 - Giao thức chuyển thư đơn giản

Định nghĩa giao thức cho SMTP. Tài liệu này bao gồm chi tiết về mô hình, quy trình vận hành và giao thức cho SMTP.

RFC 1869 - Tiện ích mở rộng dịch vụ SMTP

Định nghĩa phần mở rộng ESMTP cho SMTP. Phần này mô tả một khung để mở rộng SMTP bằng các lệnh mới, hỗ trợ khám phá động các lệnh do máy chủ cung cấp và xác định một số lệnh bổ sung.

Đối tượng SMTP

Một phiên bản SMTP có các phương thức sau:

SMTP.set_debuglevel(level)

Đặt mức đầu ra gỡ lỗi. Giá trị 1 hoặc True cho level dẫn đến thông báo gỡ lỗi cho kết nối và cho tất cả các thông báo được gửi đến và nhận từ máy chủ. Giá trị 2 cho level dẫn đến những tin nhắn này được đánh dấu thời gian.

Thay đổi trong phiên bản 3.5: Đã thêm mức gỡ lỗi 2.

SMTP.docmd(cmd, args='')

Gửi lệnh cmd đến máy chủ. Đối số tùy chọn args chỉ được nối với lệnh, cách nhau bằng dấu cách.

Điều này trả về một bộ 2 bao gồm mã phản hồi số và dòng phản hồi thực tế (các phản hồi nhiều dòng được nối thành một dòng dài.)

Trong hoạt động bình thường không cần thiết phải gọi phương thức này một cách rõ ràng. Nó được sử dụng để triển khai các phương pháp khác và có thể hữu ích cho việc thử nghiệm các tiện ích mở rộng riêng tư.

Nếu mất kết nối với máy chủ trong khi chờ phản hồi, SMTPServerDisconnected sẽ được nâng lên.

SMTP.connect(host='localhost', port=0)

Kết nối với máy chủ trên một cổng nhất định. Giá trị mặc định là kết nối với máy chủ cục bộ tại cổng SMTP tiêu chuẩn (25). Nếu tên máy chủ kết thúc bằng dấu hai chấm (':') theo sau là một số thì hậu tố đó sẽ bị loại bỏ và số đó được hiểu là số cổng sẽ sử dụng. Phương thức này được hàm tạo tự động gọi nếu máy chủ được chỉ định trong quá trình khởi tạo. Trả về 2 bộ mã phản hồi và tin nhắn được máy chủ gửi trong phản hồi kết nối của nó.

Tăng một auditing event smtplib.connect với các đối số self, host, port.

SMTP.helo(name='')

Xác định chính bạn với máy chủ SMTP bằng HELO. Đối số tên máy chủ mặc định là tên miền đủ điều kiện của máy chủ cục bộ. Tin nhắn được máy chủ trả về được lưu trữ dưới dạng thuộc tính helo_resp của đối tượng.

Trong hoạt động bình thường không cần thiết phải gọi phương thức này một cách rõ ràng. Nó sẽ được sendmail() ngầm gọi khi cần thiết.

SMTP.ehlo(name='')

Xác định chính bạn với máy chủ ESMTP bằng EHLO. Đối số tên máy chủ mặc định là tên miền đủ điều kiện của máy chủ cục bộ. Kiểm tra phản hồi cho tùy chọn ESMTP và lưu trữ chúng để has_extn() sử dụng. Đồng thời đặt một số thuộc tính thông tin: thông báo được máy chủ trả về được lưu trữ dưới dạng thuộc tính ehlo_resp, does_esmtp được đặt thành True hoặc False tùy thuộc vào việc máy chủ có hỗ trợ ESMTP hay không và esmtp_features sẽ là một từ điển chứa tên của các tiện ích mở rộng dịch vụ SMTP mà máy chủ này hỗ trợ và các thông số của chúng (nếu có).

Trừ khi bạn muốn sử dụng has_extn() trước khi gửi thư, không cần thiết phải gọi phương thức này một cách rõ ràng. Nó sẽ được sendmail() ngầm gọi khi cần thiết.

SMTP.ehlo_or_helo_if_needed()

Phương thức này gọi ehlo() và/hoặc helo() nếu không có lệnh EHLO hoặc HELO trước đó trong phiên này. Nó thử ESMTP EHLO trước.

SMTPHeloError

Máy chủ không phản hồi chính xác lời chào HELO.

SMTP.has_extn(name)

Trả về True nếu name nằm trong bộ tiện ích mở rộng dịch vụ SMTP được máy chủ trả về, False nếu không. Trường hợp được bỏ qua.

SMTP.verify(address)

Kiểm tra tính hợp lệ của địa chỉ trên máy chủ này bằng SMTP VRFY. Trả về một bộ dữ liệu bao gồm mã 250 và địa chỉ RFC 822 đầy đủ (bao gồm cả tên người) nếu địa chỉ người dùng hợp lệ. Nếu không thì trả về mã lỗi SMTP từ 400 trở lên và một chuỗi lỗi.

Ghi chú

Nhiều trang web vô hiệu hóa SMTP VRFY để ngăn chặn những kẻ gửi thư rác.

SMTP.login(user, password, *, initial_response_ok=True)

Đăng nhập vào máy chủ SMTP yêu cầu xác thực. Các đối số là tên người dùng và mật khẩu để xác thực. Nếu không có lệnh EHLO hoặc HELO trước đó trong phiên này thì phương pháp này sẽ thử ESMTP EHLO trước. Phương thức này sẽ trả về bình thường nếu xác thực thành công hoặc có thể đưa ra các ngoại lệ sau:

SMTPHeloError

Máy chủ không phản hồi chính xác lời chào HELO.

SMTPAuthenticationError

Máy chủ không chấp nhận kết hợp tên người dùng/mật khẩu.

SMTPNotSupportedError

Lệnh AUTH không được máy chủ hỗ trợ.

SMTPException

Không tìm thấy phương pháp xác thực phù hợp.

Lần lượt từng phương thức xác thực được smtplib hỗ trợ sẽ được thử nếu chúng được máy chủ quảng cáo là hỗ trợ. Xem auth() để biết danh sách các phương thức xác thực được hỗ trợ. initial_response_ok được chuyển tới auth().

Đối số từ khóa tùy chọn initial_response_ok chỉ định xem, đối với các phương thức xác thực hỗ trợ nó, "phản hồi ban đầu" như được chỉ định trong RFC 4954 có thể được gửi cùng với lệnh AUTH hay không, thay vì yêu cầu thử thách/phản hồi.

Thay đổi trong phiên bản 3.5: SMTPNotSupportedError có thể được nâng lên và tham số initial_response_ok đã được thêm vào.

SMTP.auth(mechanism, authobject, *, initial_response_ok=True)

Đưa ra lệnh SMTP AUTH cho xác thực mechanism được chỉ định và xử lý phản hồi thử thách thông qua authobject.

mechanism chỉ định cơ chế xác thực nào sẽ được sử dụng làm đối số cho lệnh AUTH; các giá trị hợp lệ là những giá trị được liệt kê trong phần tử auth của esmtp_features.

authobject phải là một đối tượng có thể gọi được với một đối số tùy chọn

dữ liệu = authobject(thử thách=Không)

Nếu đối số từ khóa tùy chọn initial_response_ok là đúng, authobject() sẽ được gọi đầu tiên mà không có đối số. Nó có thể trả về "phản hồi ban đầu" RFC 4954 ASCII str sẽ được mã hóa và gửi bằng lệnh AUTH như bên dưới. Nếu authobject() không hỗ trợ phản hồi ban đầu (ví dụ: vì nó yêu cầu thử thách), nó sẽ trả về None khi được gọi bằng challenge=None. Nếu initial_response_ok sai thì authobject() sẽ không được gọi đầu tiên với None.

Nếu kiểm tra phản hồi ban đầu trả về None hoặc nếu initial_response_ok sai, authobject() sẽ được gọi để xử lý phản hồi thách thức của máy chủ; đối số challenge được truyền sẽ là bytes. Nó sẽ trả về ASCII str data sẽ được mã hóa base64 và gửi đến máy chủ.

Lớp SMTP cung cấp authobjects cho các cơ chế CRAM-MD5, PLAINLOGIN; chúng được đặt tên lần lượt là SMTP.auth_cram_md5, SMTP.auth_plainSMTP.auth_login. Tất cả đều yêu cầu thuộc tính userpassword của phiên bản SMTP được đặt thành giá trị phù hợp.

Mã người dùng thường không cần gọi trực tiếp auth mà thay vào đó có thể gọi phương thức login(), phương thức này sẽ thử lần lượt từng cơ chế trên theo thứ tự được liệt kê. auth được đưa ra nhằm tạo điều kiện thuận lợi cho việc triển khai các phương thức xác thực chưa được (hoặc chưa) hỗ trợ trực tiếp bởi smtplib.

Added in version 3.5.

SMTP.starttls(*, context=None)

Đặt kết nối SMTP ở chế độ TLS (Transport Layer Security). Tất cả các lệnh SMTP tiếp theo sẽ được mã hóa. Sau đó bạn nên gọi lại ehlo().

Nếu keyfilecertfile được cung cấp, chúng sẽ được sử dụng để tạo ssl.SSLContext.

Tham số context tùy chọn là một đối tượng ssl.SSLContext; Đây là một giải pháp thay thế cho việc sử dụng keyfile và certfile và nếu được chỉ định thì cả keyfilecertfile đều phải là None.

Nếu không có lệnh EHLO hoặc HELO trước đó trong phiên này thì phương pháp này sẽ thử ESMTP EHLO trước.

Thay đổi trong phiên bản 3.12: Các tham số keyfilecertfile không được dùng nữa đã bị xóa.

SMTPHeloError

Máy chủ không phản hồi chính xác lời chào HELO.

SMTPNotSupportedError

Máy chủ không hỗ trợ tiện ích mở rộng STARTTLS.

RuntimeError

Hỗ trợ SSL/TLS không có sẵn cho trình thông dịch Python của bạn.

Thay đổi trong phiên bản 3.3: context đã được thêm vào.

Thay đổi trong phiên bản 3.4: Phương pháp này hiện hỗ trợ kiểm tra tên máy chủ bằng ssl.SSLContext.check_hostnameServer Name Indicator (xem HAS_SNI).

Thay đổi trong phiên bản 3.5: Lỗi nêu ra do thiếu hỗ trợ STARTTLS hiện là lớp con SMTPNotSupportedError thay vì SMTPException cơ sở.

SMTP.sendmail(from_addr, to_addrs, msg, mail_options=(), rcpt_options=())

Gửi thư. Các đối số bắt buộc là chuỗi địa chỉ từ RFC 822, danh sách chuỗi RFC 822 đến địa chỉ (một chuỗi trần sẽ được coi là danh sách có 1 địa chỉ) và chuỗi thông báo. Người gọi có thể chuyển danh sách các tùy chọn ESMTP (chẳng hạn như "8bitmime") để sử dụng trong các lệnh MAIL FROM dưới dạng mail_options. Các tùy chọn ESMTP (chẳng hạn như lệnh DSN) nên được sử dụng với tất cả các lệnh RCPT có thể được chuyển dưới dạng rcpt_options. Mỗi tùy chọn phải được chuyển dưới dạng một chuỗi chứa toàn bộ văn bản của tùy chọn, bao gồm mọi khóa tiềm năng (ví dụ: "NOTIFY=SUCCESS,FAILURE"). (Nếu bạn cần sử dụng các tùy chọn ESMTP khác nhau cho những người nhận khác nhau, bạn phải sử dụng các phương thức cấp thấp như mail(), rcpt()data() để gửi tin nhắn.)

Ghi chú

Các tham số from_addrto_addrs được sử dụng để xây dựng phong bì thông báo được sử dụng bởi các tác nhân vận chuyển. sendmail không sửa đổi tiêu đề thư dưới bất kỳ hình thức nào.

msg có thể là một chuỗi chứa các ký tự trong phạm vi ASCII hoặc một chuỗi byte. Một chuỗi được mã hóa thành byte bằng cách sử dụng codec ascii và các ký tự \r\n đơn độc được chuyển đổi thành các ký tự \r\n. Một chuỗi byte không được sửa đổi.

Nếu không có lệnh EHLO hoặc HELO trước đó trong phiên này thì phương pháp này sẽ thử ESMTP EHLO trước. Nếu máy chủ thực hiện ESMTP, kích thước tin nhắn và từng tùy chọn được chỉ định sẽ được chuyển đến nó (nếu tùy chọn này nằm trong bộ tính năng mà máy chủ quảng cáo). Nếu EHLO không thành công, HELO sẽ được thử và các tùy chọn ESMTP sẽ bị chặn.

Phương thức này sẽ trở lại bình thường nếu thư được chấp nhận bởi ít nhất một người nhận. Nếu không nó sẽ đưa ra một ngoại lệ. Nghĩa là, nếu phương pháp này không đưa ra ngoại lệ thì ai đó sẽ nhận được thư của bạn. Nếu phương pháp này không đưa ra ngoại lệ, nó sẽ trả về một từ điển, với một mục nhập cho mỗi người nhận bị từ chối. Mỗi mục nhập chứa một bộ mã lỗi SMTP và thông báo lỗi kèm theo được gửi bởi máy chủ.

Nếu SMTPUTF8 được bao gồm trong mail_options và máy chủ hỗ trợ nó thì from_addrto_addrs có thể chứa các ký tự không phải ASCII.

Phương pháp này có thể đưa ra các ngoại lệ sau:

SMTPRecipientsRefused

Tất cả người nhận đều bị từ chối. Không ai nhận được thư.

SMTPHeloError

Máy chủ không phản hồi chính xác lời chào HELO.

SMTPSenderRefused

Máy chủ không chấp nhận from_addr.

SMTPDataError

Máy chủ đã trả lời bằng một mã lỗi không mong muốn (không phải là sự từ chối của người nhận).

SMTPNotSupportedError

SMTPUTF8 đã được cung cấp trong mail_options nhưng không được máy chủ hỗ trợ.

Trừ khi có ghi chú khác, kết nối sẽ được mở ngay cả sau khi có ngoại lệ được đưa ra.

Thay đổi trong phiên bản 3.2: msg có thể là một chuỗi byte.

Thay đổi trong phiên bản 3.5: Đã thêm hỗ trợ SMTPUTF8SMTPNotSupportedError có thể được tăng lên nếu SMTPUTF8 được chỉ định nhưng máy chủ không hỗ trợ.

SMTP.send_message(msg, from_addr=None, to_addrs=None, mail_options=(), rcpt_options=())

Đây là một phương pháp thuận tiện để gọi sendmail() với thông báo được biểu thị bằng đối tượng email.message.Message. Các đối số có ý nghĩa tương tự như đối với sendmail(), ngoại trừ msg là đối tượng Message.

Nếu from_addrNone hoặc to_addrsNone, thì send_message sẽ điền vào các đối số đó bằng các địa chỉ được trích xuất từ tiêu đề của msg như được chỉ định trong RFC 5322: from_addr được đặt thành trường Sender nếu nó hiện diện và nếu không thì thành trường From. to_addrs kết hợp các giá trị (nếu có) của các trường To, CcBcc từ msg. Nếu chính xác một bộ tiêu đề Resent-* xuất hiện trong tin nhắn thì các tiêu đề thông thường sẽ bị bỏ qua và thay vào đó, các tiêu đề Resent-* sẽ được sử dụng. Nếu thông báo chứa nhiều hơn một bộ tiêu đề Resent-*, thì ValueError sẽ được đưa ra vì không có cách nào để phát hiện rõ ràng bộ tiêu đề Resent- gần đây nhất.

send_message tuần tự hóa msg bằng cách sử dụng BytesGenerator với \r\nlinesep và gọi sendmail() để truyền thông báo kết quả. Bất kể giá trị của from_addrto_addrs, send_message không truyền bất kỳ tiêu đề Bcc hoặc Resent-Bcc nào có thể xuất hiện trong msg. Nếu bất kỳ địa chỉ nào trong from_addrto_addrs chứa các ký tự không phải ASCII và máy chủ không quảng cáo hỗ trợ SMTPUTF8 thì SMTPNotSupportedError sẽ được đưa ra. Nếu không, Message sẽ được tuần tự hóa với một bản sao của policy với thuộc tính utf8 được đặt thành True, đồng thời SMTPUTF8BODY=8BITMIME được thêm vào mail_options.

Added in version 3.2.

Added in version 3.5: Hỗ trợ các địa chỉ quốc tế hóa (SMTPUTF8).

SMTP.quit()

Chấm dứt phiên SMTP và đóng kết nối. Trả về kết quả của lệnh SMTP QUIT.

Các phương thức cấp thấp tương ứng với các lệnh SMTP/ESMTP tiêu chuẩn HELP, RSET, NOOP, MAIL, RCPTDATA cũng được hỗ trợ. Thông thường những thứ này không cần phải gọi trực tiếp nên chúng không được ghi lại ở đây. Để biết chi tiết, hãy tham khảo mã mô-đun.

Ngoài ra, phiên bản SMTP có các thuộc tính sau:

SMTP.helo_resp

Phản hồi cho lệnh HELO, xem helo().

SMTP.ehlo_resp

Phản hồi cho lệnh EHLO, xem ehlo().

SMTP.does_esmtp

Giá trị boolean cho biết máy chủ có hỗ trợ ESMTP hay không, xem ehlo().

SMTP.esmtp_features

Từ điển tên của các tiện ích mở rộng dịch vụ SMTP được máy chủ hỗ trợ, xem ehlo().

SMTP Ví dụ

Ví dụ này nhắc người dùng về các địa chỉ cần thiết trong phong bì thư (địa chỉ 'Tới' và 'Từ') và thư sẽ được gửi. Lưu ý rằng các tiêu đề đi kèm với tin nhắn phải được đưa vào tin nhắn như đã nhập; ví dụ này không thực hiện bất kỳ xử lý nào đối với tiêu đề RFC 822. Đặc biệt, địa chỉ 'Tới' và 'Từ' phải được đưa vào tiêu đề thư một cách rõ ràng:

nhập smtplib

dấu nhắc def (tiêu đề):
    trả về đầu vào(title).strip()

from_addr = nhắc ("Từ:")
to_addrs = nhắc ("Tới:").split()
print("Nhập tin nhắn, kết thúc bằng ^D (Unix) hoặc ^Z (Windows):")

# Add các tiêu đề From: và To: ở đầu!
dòng = [f"Từ: {from_addr}", f"Tới: {', '.join(to_addrs)}", ""]
trong khi Đúng:
    thử:
        dòng = đầu vào()
    ngoại trừ EOFError:
        phá vỡ
    khác:
        dòng.append(dòng)

msg = "\r\n".join(dòng)
print("Độ dài tin nhắn là", len(msg))

máy chủ = smtplib.SMTP("localhost")
server.set_debuglevel(1)
server.sendmail(from_addr, to_addrs, msg)
máy chủ.quit()

Ghi chú

Nói chung, bạn sẽ muốn sử dụng các tính năng của gói email để tạo một email mà sau đó bạn có thể gửi qua send_message(); xem email: Ví dụ.