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ố host và port tùy chọn được cung cấp, phương thức SMTPconnect()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ằngsocket.getfqdn(). Nếu lệnh gọiconnect()trả về bất cứ thứ gì ngoài mã thành công, thìSMTPConnectErrorsẽ đượ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ờ,TimeoutErrorsẽ đượ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ặc0), 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()vàSMTP.quit(). Một ví dụ được bao gồm dưới đây.Lớp
SMTPhỗ trợ câu lệnhwith. Khi được sử dụng như thế này, lệnh SMTPQUITsẽ tự động được đưa ra khi câu lệnhwiththoát. Ví dụ:>>> từ smtplib nhập SMTP >>> với SMTP("domain.org") là smtp: ... smtp.noop() ... (250, b'Ok') >>>
Tất cả các lệnh sẽ đưa ra một auditing event
smtplib.SMTP.sendvới các đối sốselfvàdata, trong đódatalà 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_SSLhoạt động giống hệt như phiên bảnSMTP. Nên sử dụngSMTP_SSLcho những trường hợp cần có SSL ngay từ đầu kết nối và việc sử dụngstarttls()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, timeout và source_address có cùng ý nghĩa như trong lớpSMTP. context, cũng là tùy chọn, có thể chứaSSLContextvà 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_hostnamevà Server Name Indication (xemssl.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ặnThay đổi trong phiên bản 3.12: Các tham số keyfile và certfile 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_hostname và source_address có cùng ý nghĩa như trong lớpSMTP. Để 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
OSErrorlà 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
SMTPtrướ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
HELOcủ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
Truecho 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,
SMTPServerDisconnectedsẽ đượ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.connectvớ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ínhhelo_respcủ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ínhehlo_resp,does_esmtpđược đặt thànhTruehoặcFalsetùy thuộc vào việc máy chủ có hỗ trợ ESMTP hay không vàesmtp_featuressẽ 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ẽ đượcsendmail()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ặchelo()nếu không có lệnhEHLOhoặcHELOtrước đó trong phiên này. Nó thử ESMTPEHLOtrước.SMTPHeloErrorMáy chủ không phản hồi chính xác lời chào
HELO.
- SMTP.has_extn(name)¶
Trả về
Truenếu name nằm trong bộ tiện ích mở rộng dịch vụ SMTP được máy chủ trả về,Falsenế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
EHLOhoặcHELOtrước đó trong phiên này thì phương pháp này sẽ thử ESMTPEHLOtrướ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:SMTPHeloErrorMáy chủ không phản hồi chính xác lời chào
HELO.SMTPAuthenticationErrorMáy chủ không chấp nhận kết hợp tên người dùng/mật khẩu.
SMTPNotSupportedErrorLệnh
AUTHkhông được máy chủ hỗ trợ.SMTPExceptionKhô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
smtplibhỗ trợ sẽ được thử nếu chúng được máy chủ quảng cáo là hỗ trợ. Xemauth()để 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ớiauth().Đố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
AUTHhay không, thay vì yêu cầu thử thách/phản hồi.Thay đổi trong phiên bản 3.5:
SMTPNotSupportedErrorcó 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
SMTPAUTHcho 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ửauthcủaesmtp_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 ASCIIstrsẽ được mã hóa và gửi bằng lệnhAUTHnhư bên dưới. Nếuauthobject()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ềNonekhi được gọi bằngchallenge=None. Nếu initial_response_ok sai thìauthobject()sẽ không được gọi đầu tiên vớiNone.Nếu kiểm tra phản hồi ban đầu trả về
Nonehoặ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ề ASCIIstrdata sẽ được mã hóa base64 và gửi đến máy chủ.Lớp
SMTPcung cấpauthobjectscho các cơ chếCRAM-MD5,PLAINvàLOGIN; chúng được đặt tên lần lượt làSMTP.auth_cram_md5,SMTP.auth_plainvàSMTP.auth_login. Tất cả đều yêu cầu thuộc tínhuservàpasswordcủa phiên bảnSMTPđượ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
authmà thay vào đó có thể gọi phương thứclogin(), 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ởismtplib.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 keyfile và certfile đượ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ả keyfile và certfile đều phải làNone.Nếu không có lệnh
EHLOhoặcHELOtrước đó trong phiên này thì phương pháp này sẽ thử ESMTPEHLOtrước.Thay đổi trong phiên bản 3.12: Các tham số keyfile và certfile không được dùng nữa đã bị xóa.
SMTPHeloErrorMáy chủ không phản hồi chính xác lời chào
HELO.SMTPNotSupportedErrorMáy chủ không hỗ trợ tiện ích mở rộng STARTTLS.
RuntimeErrorHỗ 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_hostnamevà Server Name Indicator (xemHAS_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
SMTPNotSupportedErrorthay vìSMTPExceptioncơ 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ệnhMAIL FROMdưới dạng mail_options. Các tùy chọn ESMTP (chẳng hạn như lệnhDSN) nên được sử dụng với tất cả các lệnhRCPTcó 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()vàdata()để gửi tin nhắn.)Ghi chú
Các tham số from_addr và to_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.
sendmailkhô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ự
\rvà\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
EHLOhoặcHELOtrước đó trong phiên này thì phương pháp này sẽ thử ESMTPEHLOtrướ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ếuEHLOkhông thành công,HELOsẽ đượ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_addr và to_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:
SMTPRecipientsRefusedTất cả người nhận đều bị từ chối. Không ai nhận được thư.
SMTPHeloErrorMáy chủ không phản hồi chính xác lời chào
HELO.SMTPSenderRefusedMáy chủ không chấp nhận from_addr.
SMTPDataErrorMá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).
SMTPNotSupportedErrorSMTPUTF8đã đượ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ợ
SMTPUTF8vàSMTPNotSupportedErrorcó thể được tăng lên nếuSMTPUTF8đượ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ượngemail.message.Message. Các đối số có ý nghĩa tương tự như đối vớisendmail(), ngoại trừ msg là đối tượngMessage.Nếu from_addr là
Nonehoặc to_addrs làNone, thìsend_messagesẽ đ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, Cc và Bcc 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ìValueErrorsẽ đượ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_messagetuần tự hóa msg bằng cách sử dụngBytesGeneratorvới\r\nlà linesep và gọisendmail()để truyền thông báo kết quả. Bất kể giá trị của from_addr và to_addrs,send_messagekhô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_addr và to_addrs chứa các ký tự không phải ASCII và máy chủ không quảng cáo hỗ trợSMTPUTF8thìSMTPNotSupportedErrorsẽ được đưa ra. Nếu không,Messagesẽ được tuần tự hóa với một bản sao củapolicyvới thuộc tínhutf8được đặt thànhTrue, đồng thờiSMTPUTF8vàBODY=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, RCPT và DATA 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 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ụ.