Smtplib có được bao gồm trong Python không?

Có khá nhiều cách để gửi email bằng Python, cho dù đó là thông qua thư viện của bên thứ 3 như với boto và SES hay thông qua giao thức email như SMTP. Mặc dù chủ đề sử dụng Python để gửi email có vẻ như đã được thực hiện xong, nhưng có rất nhiều cách khác nhau để thực hiện và rất nhiều vấn đề có thể xảy ra. Tôi nghĩ sẽ rất hữu ích nếu viết một hướng dẫn về cách gửi email bằng Gmail với tư cách là nhà cung cấp bằng Python

Giao thức SMTP

Điều này có thể không gây ngạc nhiên, nhưng tất nhiên Python đã có một thư viện cho phép bạn kết nối với máy chủ SMTP, giống như thư viện mà Gmail sử dụng. Thư viện này được gọi là smtplib và đi kèm với Python

SMTP [Giao thức truyền thư đơn giản] là giao thức cấp ứng dụng [trên TCP] được sử dụng để liên lạc với máy chủ thư từ các dịch vụ bên ngoài, chẳng hạn như ứng dụng email khách trên điện thoại của bạn. SMTP chỉ là một giao thức gửi, vì vậy bạn không thể thực sự truy xuất email với nó, bạn chỉ có thể gửi email, đó là điều chúng tôi sẽ tập trung vào trong bài viết này. Thay vào đó, nếu bạn muốn truy xuất email, thì bạn sẽ muốn kiểm tra giao thức IMAP [Giao thức truy cập thư Internet]

Tôi nên lưu ý rằng nhiều dịch vụ email, chẳng hạn như Gmail, thường không sử dụng SMTP trên máy chủ thư nội bộ của họ. SMTP thường chỉ được cung cấp dưới dạng giao diện hướng ra ngoài cho dịch vụ của họ thông qua máy chủ

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
2. Điều này chủ yếu được sử dụng bởi các ứng dụng email trên điện thoại hoặc máy tính của bạn [như Outlook, Thunderbird, v.v.]

Mở kết nối

Như đã đề cập, Python thuận tiện đi kèm với

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
3, xử lý tất cả các phần khác nhau của giao thức, như kết nối, xác thực, xác thực và tất nhiên, gửi email

Sử dụng thư viện này, có một vài cách khác nhau để bạn có thể tạo kết nối đến máy chủ thư của mình. Trong phần này, chúng ta sẽ tập trung vào việc tạo một kết nối đơn giản, không an toàn [điều này hiếm khi được sử dụng nếu có]. Kết nối này không được mã hóa và mặc định là cổng 25. Tuy nhiên, giao thức gửi thư thực sự sử dụng 587, đây là những gì chúng tôi sẽ sử dụng

Những kết nối này thực sự đơn giản để tạo với

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
3. Phiên bản không được mã hóa có thể được tạo bằng

import smtplib

try:
    server = smtplib.SMTP['smtp.gmail.com', 587]
    server.ehlo[]
except:
    print 'Something went wrong...'

Và đó là nó. Thực sự không có gì nhiều hơn là chuyển địa chỉ máy chủ, cổng và gọi

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
5, xác định bạn đến máy chủ SMTP. Sử dụng đối tượng
From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
6 này, giờ đây bạn có thể gửi email qua kết nối không an toàn

Ghi chú. Bạn có thể chưa sẵn sàng để gửi email. Gmail áp đặt một số hạn chế đối với các kết nối SMTP như thế này. Xem phần "Xác thực bằng Gmail" bên dưới để biết thêm thông tin

Sử dụng kết nối an toàn

Khi kết nối SMTP được bảo mật qua TLS/SSL, nó được thực hiện qua cổng 465 và thường được gọi là SMTPS. Không cần phải nói, bạn phải luôn sử dụng kết nối an toàn

Có một vài cách khác nhau để bạn có thể bảo mật các kết nối SMTP của mình trong thư viện

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
3. Cách đầu tiên là trước tiên hãy tạo một kết nối không an toàn và sau đó nâng cấp lên TLS. Điều này được thực hiện bằng cách sử dụng phương pháp
From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
1

Lưu ý rằng mặc dù điều này rất giống với kết nối không an toàn trước đó mà chúng tôi đã tạo, nhưng điểm khác biệt duy nhất là chúng tôi đang sử dụng phương pháp

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
1 để nâng cấp kết nối thành an toàn.

Tùy chọn khác của bạn là tạo kết nối SSL ngay từ đầu. Trong trường hợp này, bạn sẽ muốn sử dụng phương thức

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
3 để thay thế

Trong số những khác biệt nhỏ khác, chúng tôi sử dụng cổng SMTPS [465] ngay lập tức, mặc dù bạn có thể bỏ qua tham số cổng này và dù sao thì

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
3 sẽ mặc định là 465

Bây giờ chúng ta đã có kết nối, hãy tạo một email

Tạo Email

Về cốt lõi, email chỉ là các chuỗi văn bản được kết nối bằng các ký tự dòng mới. Hầu hết các email ít nhất sẽ có các trường "Từ", "Tới", "Chủ đề" và nội dung. Đây là một ví dụ đơn giản

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You

Như bạn có thể thấy, mỗi dòng chứa một trường mới với dữ liệu của nó. Không có giao thức nhị phân, không có XML, không có JSON, chỉ có các chuỗi được phân tách bằng dòng

Một cách đơn giản để tham số hóa các trường này là sử dụng định dạng chuỗi trong Python

sent_from = '[email protected]'
to = ['[email protected]', '[email protected]']
subject = 'OMG Super Important Message'
body = 'Hey, what's up?\n\n- You'

email_text = """\
From: %s
To: %s
Subject: %s

%s
""" % [sent_from, ", ".join[to], subject, body]

Bây giờ, tất cả những gì bạn phải làm là chuyển chuỗi

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
5 đến
From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
3, chúng tôi sẽ trình bày chuỗi này trong phần tiếp theo và bạn đã sẵn sàng để bắt đầu

Có một số bước bạn cần thực hiện trước khi có thể gửi email qua Gmail bằng SMTP và bước này liên quan đến xác thực. Nếu bạn đang sử dụng Gmail làm nhà cung cấp, bạn cần yêu cầu Google cho phép bạn kết nối qua SMTP, đây được coi là phương thức "kém an toàn"

Bạn thực sự không thể đổ lỗi cho Google vì đã thiết lập nó theo cách này vì ứng dụng của bạn [hoặc một số ứng dụng bên thứ 3 khác] sẽ cần có mật khẩu văn bản gốc của bạn để ứng dụng này hoạt động, điều này chắc chắn không lý tưởng. Nó không giống như giao thức OAuth nơi phát hành mã thông báo có thể hủy bỏ, vì vậy họ phải tìm một cách khác để đảm bảo không có bên trái phép nào truy cập vào dữ liệu của bạn

Đối với nhiều nhà cung cấp dịch vụ email khác, bạn sẽ không cần thực hiện bất kỳ bước bổ sung nào mà tôi mô tả ở đây

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Trước tiên, bạn sẽ muố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 của mình. Để biết hướng dẫn chi tiết về cách thực hiện việc này, bạn nên xem trang này

Cho phép các ứng dụng kém an toàn hơn truy cập vào tài khoản của bạn

Nếu bạn đã bật xác minh 2 bước trên tài khoản của mình thì bạn sẽ cần tạo mật khẩu dành riêng cho ứng dụng cho các ứng dụng kém an toàn hơn như thế này. Trong trường hợp đó, bạn sẽ cần làm theo hướng dẫn tại đây

Đăng nhập bằng mật khẩu ứng dụng

Và cuối cùng, nếu bạn vẫn nhận được

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
7 với mã lỗi là 534, thì bạn sẽ cần thực hiện thêm một bước nữa để điều này hoạt động

Hiển thị Mở khóa Captcha

Tôi không phải thực hiện bước cuối cùng này cho các tài khoản của riêng mình, nhưng tôi đã đọc được rằng nó không thực sự hoạt động ngay lập tức. Có vẻ như sau khi bật các ứng dụng kém an toàn hơn, bạn có thể phải đợi vài phút trước khi thử liên kết 'Hiển thị hình ảnh mở khóa'. Nếu bạn gặp phải vấn đề này và tìm ra cách khắc phục tốt, vui lòng cho chúng tôi biết trong phần nhận xét

Đối với mã Python thực tế, tất cả những gì bạn cần làm là gọi phương thức

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
8

import smtplib

gmail_user = '[email protected]'
gmail_password = '[email protected]!'

try:
    server = smtplib.SMTP_SSL['smtp.gmail.com', 465]
    server.ehlo[]
    server.login[gmail_user, gmail_password]
except:
    print 'Something went wrong...'

gửi thư điện tử

Bây giờ bạn đã thiết lập kết nối SMTP và ủy quyền ứng dụng của mình với Google, cuối cùng bạn có thể sử dụng Python để gửi email bằng Gmail

Sử dụng chuỗi email chúng tôi đã tạo ở trên và đối tượng

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
6 được kết nối/xác thực, bạn cần gọi phương thức
sent_from = '[email protected]'
to = ['[email protected]', '[email protected]']
subject = 'OMG Super Important Message'
body = 'Hey, what's up?\n\n- You'

email_text = """\
From: %s
To: %s
Subject: %s

%s
""" % [sent_from, ", ".join[to], subject, body]
0. Đây là mã đầy đủ, bao gồm các phương thức đóng kết nối

From: [email protected]
To: [email protected], [email protected]
Subject: OMG Super Important Message

Hey, what's up?

- You
1

Sự kết luận

Ngoài các bước ủy quyền dành riêng cho Gmail [liên quan đến các ứng dụng kém an toàn hơn, v.v.], mã này sẽ hoạt động đối với bất kỳ nhà cung cấp dịch vụ email nào khác hỗ trợ truy cập SMTP, giả sử bạn có đúng địa chỉ máy chủ và cổng. Nếu bạn thấy rằng các nhà cung cấp khác đặt ra các hạn chế đặc biệt đối với quyền truy cập SMTP giống như Google, hãy cho chúng tôi biết. Chúng tôi muốn bao gồm càng nhiều thông tin càng tốt ở đây

Bạn có lập trình gửi email bằng SMTP không?

Tài nguyên

Chỉnh sửa. Cảm ơn cropr [trong các nhận xét] đã chỉ ra rằng Gmail áp đặt một số hạn chế đối với những người gửi email bằng SMTP. Tài khoản miễn phí bị giới hạn ở 500 email mỗi ngày và bị giới hạn tốc độ ở khoảng 20 email mỗi giây

Nếu bạn cho rằng mình sẽ vượt quá các giới hạn này thì bạn có thể muốn thiết lập máy chủ SMTP của riêng mình hoặc sử dụng các dịch vụ như AWS SES hoặc Sendgrid

Python sử dụng mô-đun nào để lập trình SMTP?

Python cung cấp mô-đun smtplib, mô-đun này xác định đố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. máy chủ - Đây là máy chủ chạy máy chủ SMTP của bạn. Bạn có thể chỉ định địa chỉ IP của máy chủ hoặc tên miền như hướng dẫn. com

Python có thể gửi email không?

Python cung cấp ` thư viện để gửi email- “SMTP lib” . “smtplib” tạo đối tượng phiên máy khách Giao thức chuyển thư đơn giản được sử dụng để gửi email đến bất kỳ id email hợp lệ nào trên internet. Số Cổng được sử dụng ở đây là '587'.

Python triển khai giao thức SMTP như thế nào?

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

Làm cách nào để gửi thư từ Gmail tới Python?

Các bước để gửi thư có tệp đính kèm bằng SMTP [smtplib] .
Tạo MIME
Thêm địa chỉ người gửi, người nhận vào MIME
Thêm tiêu đề thư vào MIME
Gắn phần thân vào MIME
Bắt đầu phiên SMTP với số cổng hợp lệ với các tính năng bảo mật phù hợp
Đăng nhập vào hệ thống
Gửi thư và thoát

Chủ Đề