Gửi email pop3 python

Hiện nay có rất nhiều cách khác nhau để gửi email với python, có thể là thông qua các thư viện có sẵn như boto và SES, hoặc thông qua giao thức SMTP. Tuy nhiên, mặc dù bạn có thể sử dụng những thư viện này để gửi thư một cách tạm thời, nhưng bạn sẽ có thể đến khi có nhiều vấn đề khác phát sinh mà bạn không thể kiểm soát được. Mình nghĩ bài viết hướng dẫn gửi mail thông qua gmail bằng python này sẽ rất hữu ích cho bạn để thực hiện các công việc có liên quan đến gmail thông dụng

Nội dung chính

  • Giao thức SMTP là gì?
  • Create an toàn SMTP connection
  • Tạo kết nối SMTP an toàn
  • Tạo email
  • Xác thực với Gmail
  • Tiến hành gửi email
  • Kết luận

Giao thức SMTP là gì?

Python có sẵn một thư viện cho phép bạn kết nối với máy chủ SMTP – như máy chủ smtp mà gmail đang sử dụng. Thư viện này được gọi là smtplib, được tích hợp sẵn trong python

SMTP [Simple Mail Transfer Protocol] là một giao thức ở lớp ứng dụng [trên TCP] được sử dụng để giao tiếp với các máy chủ thư từ các dịch vụ bên ngoài, chẳng hạn như ứng dụng thư khách ứng dụng trên điện thoại của bạn giả định. SMTP chỉ là một giao thức chuyển giao, vì vậy bạn sẽ không thể nhận được email đã nhận được từ nó – có nghĩa là bạn chỉ có thể gửi thư thông qua SMTP bị hủy bỏ và cũng là câu chuyện mà mình sẽ tập trung trong bài viết này. Nếu bạn muốn nhận hoặc truy xuất thông tin email, bạn sẽ cần phải chạm vào giao thức IMAP [Giao thức truy cập thư Internet]

Lưu ý rằng hiện nay có rất nhiều dịch vụ email như gmail, outlook thường không sử dụng SMTP trên máy chủ của họ. SMTP thường chỉ cung cấp một giao diện hướng ra bên ngoài cho các dịch vụ của họ như smtp. gmail. máy chủ com. Chủ yếu được sử dụng bởi ứng dụng email trên điện thoại hoặc máy tính của bạn [như Outlook, thunderbird,…]

Xem thêm. Hướng dẫn cài đặt python 3. 9 trên ubuntu

Create an toàn SMTP connection

Như mình đã đề cập, Python tích hợp sẵn thư viện smtplib sẵn rồi – nên nó có thể thực hiện xử lý rất nhiều phần khác nhau của giao thức như. xác thực, tạo kết nối, xác minh và gửi email

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

Những kết nối này thực sự rất đơn giản để tạo với smtplib. Phiên bản kết nối SMTP không được mã hóa có thể được tạo bằng dòng mã sau đây

nhập smtplib thử. máy chủ = smtplib. SMTP['smtp. gmail. com', 587] máy chủ. ehlo[] ngoại trừ. print['Đã xảy ra lỗi. ']

Đoạn mã trên thực tế chỉ thực hiện việc tạo kết nối và gọi hàm ehlo[]. Từ đây bạn đã có thể gửi email tới máy chủ gmail thông qua kết nối không hoàn toàn rồi đấy

Lưu ý. Gmail áp dụng một số chế độ đối với các kết nối SMTP như thế này. Xem phần “Xác thực với gmail” ở phía bên dưới để hiểu rõ hơn

Tạo kết nối SMTP an toàn

Khi một kết nối SMTP được bảo vệ hoàn toàn thông qua SSL/TLS, nó sẽ thực hiện kết nối thông qua cổng 465 và thường được gọi là SMTPS. Không cần phải nói thì bạn sẽ biết, hiện tại hầu hết tất cả các website trên internet đều sử dụng kết nối an toàn [https khi truy cập website và google cũng khuyến cáo nên sử dụng SSL để SEO tối ưu cho website] và bạn

Xem thêm. SSL is what

Có một số cách khác nhau mà bạn có thể sử dụng để sử dụng một kênh kết nối SMTP an toàn trong thư viện smtplib. Cách đầu tiên là tạo một kết nối không an toàn và sau đó là nâng cấp lên TLS bằng cách sử dụng phương thức startls[]

nhập smtplib thử. máy chủ = smtplib. SMTP['smtp. gmail. com', 587] máy chủ. máy chủ ehlo[]. starttls[] #. gửi email ngoại trừ. in 'Đã xảy ra sự cố. '

Lưu ý là mặc dù đoạn mã trên có vẻ giống với đoạn mã tạo kết nối không an toàn, nhưng trong trường hợp này mình có sử dụng hàm starttls[] để nâng cấp thành kết nối an toàn

Cách khác là bạn có thể tạo một kết nối an toàn ngay từ đầu. Trong trường hợp này, bạn sẽ sử dụng phương thức SMTP_SSL[] ngay từ đầu

nhập smtplib thử. server_ssl = smtplib. SMTP_SSL['smtp. gmail. com', 465] server_ssl. ehlo[] # tùy chọn #. gửi email ngoại trừ. print['Đã xảy ra lỗi. ']

Đoạn mã trên chỉ có một chút khác biệt so với các đoạn mã ở trên nữa tại chỗ, đoạn mã này sử dụng SMTPS có cổng mặc định là 465 và bạn có thể bỏ tham số này trong đoạn mã

Như vậy, mình đã có thể tạo được một kênh kết nối SMTP an toàn rồi, tiếp theo sẽ tiến hành tạo một email

Tạo email

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

Từ. bạn@gmail. com Tới. tôi@gmail. com, vsudo@gmail. com Chủ đề. OMG Tin nhắn siêu quan trọng Này, có chuyện gì vậy?

Như bạn có thể thấy bên trên, mỗi dòng chứa một trường mới với dữ liệu của nó. Nó không phải là nhị phân, json, hay XML, đơn giả nó chỉ là một chuỗi chứa các dòng được phân cách

Một ví dụ đơn giản trong python khi áp dụng các trường này để gửi email

send_from = 'bạn@gmail. com' đến = ['me@gmail. com', 'vsudo@gmail. com'] subject = 'OMG Tin nhắn siêu quan trọng' body = 'Này, có chuyện gì vậy?\n\n- Bạn' email_text = """\ From. %s đến. %s Chủ đề. %s %s """ % [gửi_từ, ", ". tham gia [đến], chủ đề, cơ thể]

Ở đoạn mã trên, mình chỉ truyền giá trị để tạo chuỗi email_text rồi chuyển cho smtplib, tiếp theo mình sẽ giải thích rõ hơn

Xác thực với Gmail

Có một số bước mà bạn phải làm trước khi bạn có thể gửi thư thông qua Gmail bằng SMTP. Nếu bạn đang sử dụng Gmail làm nhà cung cấp dịch vụ email chính, bạn cần phải yêu cầu Google cho phép bạn kết nối qua SMTP – được coi là phương pháp “kém an toàn“

Bạn không thể đổ lỗi cho Google khi bạn gửi email theo cách này vì ứng dụng của bạn sẽ yêu cầu mật khẩu ở dạng văn bản thuần túy để hoạt động – nghĩa là không phải một ý tưởng hay. Nó không giống như giao thức OAuth nơi mã thông báo có thể được thu hồi, vì vậy họ phải tìm cách khác để đảm bảo không có bên thứ ba nào có thể xâm nhập trái phép vào dữ liệu của bạn

Đối với nhiều nhà cung cấp dịch vụ email trên thị trường hiện nay, bạn sẽ không cần phải thực hiện bất kỳ thủ tục nào như mình đã đề cập bên trên

Đầu tiên, bạn cần phải cho phép ít ứng dụng truy cập toàn bộ vào tài khoản của mình

Xem chi tiết. https. //nếu. tt/1rojmiS

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

Xem chi tiết. https. //nếu. tt/1ayffTi

Và cuối cùng, nếu bạn vẫn nhận được ngoại lệ SMTPAuthenticationError với mã lỗi 534, bạn cần phải thực hiện thêm một số bước nữa để đoạn mã hoạt động trơn tru

To unlock Captcha. https. //nếu. tt/1hVw7Zd

Cuối cùng, hoàn chỉnh đoạn mã để đăng nhập Gmail như sau

nhập smtplib gmail_user = 'bạn@gmail. com' gmail_password = 'P@ssword. ' thử. máy chủ = smtplib. SMTP_SSL['smtp. gmail. com', 465] máy chủ. máy chủ ehlo[]. đăng nhập [gmail_user, gmail_password] ngoại trừ. in 'Đã xảy ra sự cố. '

Tiến hành gửi email

Như vậy, bạn đã thiết lập kết nối SMTP và ủy quyền truy cập ứng dụng của mình với Google thành công rồi, cuối cùng là tiến trình gửi thư qua Gmail bằng Python

Use string email_text as at on and object server has been connect/xác thực và gọi hàm. sendmail[] để gửi thư. Dưới đây là mã đầy đủ không che hoàn chỉnh

nhập smtplib gmail_user = 'bạn@gmail. com' gmail_password = 'P@ssword. ' đã gửi_từ = gmail_user đến = ['me@gmail. com', 'bill@gmail. com'] subject = 'OMG Tin nhắn siêu quan trọng' body = 'Này, có chuyện gì vậy?\n\n- Bạn' email_text = """\ From. %s Đến. %s Chủ đề. %s %s """ % [gửi_từ, ", ". tham gia [đến], chủ đề, cơ thể] thử. máy chủ = smtplib. SMTP_SSL['smtp. gmail. com', 465] máy chủ. máy chủ ehlo[]. máy chủ đăng nhập [gmail_user, gmail_password]. máy chủ sendmail[sent_from, to, email_text]. close[] print['Email đã gửi. '] ngoại trừ. print['Đã xảy ra lỗi. ']

Kết luận

Ngoài các bước ủy quyền truy cập dành riêng cho Gmail [liên quan đến các ứng dụng kém an toàn], đoạn mã trên cũng sẽ hoạt động đối với bất kỳ nhà cung cấp dịch vụ email nào khác có hỗ trợ truy cập SMTP, kể

Lưu ý khi sử dụng gmail. Gmail áp dụng một số quy tắc hạn chế đối với những người gửi email bằng SMTP gmail. Tài khoản miễn phí sẽ chỉ có thể gửi 500 email giới hạn mỗi ngày và giới hạn tốc độ vào khoảng 20 email mỗi giây thôi

Chủ Đề