Đây là một chủ đề rất thú vị về triển khai thuần túy của mạng máy tính. Ở đây chúng ta thấy cách chúng ta sử dụng các lớp mạng máy tính khác nhau để liên lạc bằng các giao thức khác nhau như HTTP, TCP/IP, UDP, v.v. Ở đây chúng tôi sẽ áp dụng giao thức SMTP để gửi nội dung như dữ liệu động, PDF, áp phích, hình ảnh, v.v. , sử dụng kiến trúc máy chủ khách hàng
Ở đây chúng ta thấy vai trò, trách nhiệm và đặc điểm của tất cả các lớp, như dữ liệu bit để chuyển đổi tín hiệu, phát hiện lỗi, định tuyến, đồng bộ hóa, giải mã mã hóa, v.v.
Bây giờ tin nhắn của chúng tôi chuyển sang lớp mạng. Ở đó, chúng tôi sử dụng các khái niệm về định tuyến và phân mảnh thông điệp của mình thành các gói dữ liệu nhỏ, sau đó được gửi đến lớp liên kết dữ liệu. Ở đây chúng tôi kiểm tra sửa lỗi và lấy địa chỉ Mac của thiết bị và các chi tiết khác. Cuối cùng nó được gửi đến lớp vật lý. Ở đây, chúng tôi sử dụng phương tiện có hướng dẫn hoặc không có hướng dẫn để gửi thông điệp của mình đến người nhận. Đối với phương tiện được hướng dẫn, chúng tôi sử dụng mạng có dây và đối với phương tiện không được hướng dẫn, chúng tôi sử dụng mạng không dây. Chúng tôi làm tương tự cho đầu thu, từ dưới lên trên.
Bây giờ chúng ta thấy một số giao thức mà chúng ta sử dụng trong việc gửi email bằng Python.
SMTP
SMTP được sử dụng để gửi thư đến bất kỳ người dùng nào từ máy chủ. Ở đây chúng tôi thường gửi mã ASCII bảy bit.
Lệnh SMTP
HELO VÀ EHLO
THƯ ĐẾN TỪ
RCPT
ĐẶT LẠI
Từ bỏ
Đang tải thư viện và tạo kết nối
Ở bước này chúng ta tạo kết nối giữa 2 bên gửi và nhận. Đối với điều này, chúng ta phải biết tên máy chủ SMTP, địa chỉ cổng và ID thư của người gửi và người nhận
1 2 3 4 5 6 7 8 9 10
import smtplib sever_name = ”smtp.gmail.com” port = 465 server = smtplib.SMTP_SSL[server_name, port] senders_emailid = ”senderid @gmail.com” receivers_emailid = ”receivers @gmail.com” message_content = ”Hello How are you!” password = ”xxxxxxxx” server.login[sender_emailid, password] server.sendmail[senders_emailid, receivers_emailid, message_content]
Ở trên, chúng ta có thể thấy cách đơn giản để gửi thư tới bất kỳ ID Gmail nào. Nếu bạn đang sử dụng tài khoản Gmail, bạn phải tắt xác minh hai yếu tố, nếu không nó sẽ báo lỗi.
Nếu bạn muốn gửi thư ở dạng tiêu đề, nội dung, chủ đề hoặc đính kèm các tệp như PDF hoặc hình ảnh, bạn sẽ sử dụng thêm một số tập lệnh Python và nhiều thư viện Python hơn cho việc đó.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import smtplib import os import imghdr from email.message import EmailMessage EMAIL_ADDRESS = ”senderid @gmail.com” EMAIL_PASSWORD = ”xxxxxxxx” msg = EmailMessage[] msg['Subject'] = 'Lets us Learn The smtp protocol' msg['From'] = EMAIL_ADDRESS msg['To'] = ”receivers @gmail.com” msg.set_content['How about dinner at 6pm this saturday'] with open['image.jpg', 'rb'] as f: file_data = f.read[] file_type = imghdr.what[f.name] file_name = f.name msg.add_attchment[file_data, maintype = 'image', subtype = file_type, filename = file_name] with smtplib.SMTP_SSL['smtp.gmail.com', 465] as smtp: smtp.login[EMAIL_ADDRESS, EMAIL_PASSWORD] smtp.send_message[msg]
Gửi dữ liệu động HTML bằng SMTP
Ở trên, chúng ta thấy dữ liệu tĩnh và đơn giản được gửi qua email bằng giao thức SMTP như thế nào. Bây giờ chúng ta sẽ thấy dữ liệu HTML và động của mình được gửi qua thư bằng cách sử dụng các tập lệnh HTML và CSS của Python
Trong các kịch bản dữ liệu lớn, Tự động hóa email là giai đoạn quan trọng nhất sau bất kỳ đường dẫn dữ liệu lớn nào để gửi nhật ký, tệp lỗi, tập kết quả tới các bên liên quan trong doanh nghiệp để họ phân tích dữ liệu. Nó cho phép bạn nâng cao chức năng email của mình mà không cần gửi từng email riêng lẻ theo cách thủ công bất cứ khi nào một tác vụ trong đường dẫn dữ liệu lớn chạy hoặc không thành công. Sử dụng email tự động trong chiến dịch email của bạn giúp tăng mức độ tương tác và cung cấp trải nghiệm email phù hợp hơn cho người nhận của bạn. Ví dụ: một người có thể gửi email có tệp nhật ký, tập kết quả, dữ liệu xác thực cho các thành viên khác trong nhóm bằng chức năng email trong python
Yêu cầu hệ thống
- Cài đặt mô-đun python như sau
pip install pyzmail36
pip install smtplib
pip install pandas
pip install imapclient
- Các mã dưới đây có thể được chạy trong sổ ghi chép Jupyter hoặc bất kỳ bảng điều khiển python nào
Bước 1. Kết nối với Gmail và đăng nhập
- Trước khi sử dụng Python để truy cập email của bạn, chúng tôi cần thay đổi cài đặt tài khoản google của mình để cho phép truy cập vào các ứng dụng kém an toàn hơn
- Nếu không, Google sẽ không thể cấp quyền truy cập vào mã của bạn để đăng nhập vào tài khoản gmail. Bây giờ, vì lý do bảo mật, chúng tôi khuyên bạn nên thay đổi cài đặt này về trạng thái mặc định sau khi bạn chạy mã xong
- Bật Cho phép các ứng dụng kém an toàn hơn thành BẬT. Xin lưu ý rằng điều này giúp người khác dễ dàng truy cập vào tài khoản của bạn hơn. Trong danh mục "Bảo mật", tìm "Truy cập ứng dụng kém an toàn hơn" và bật tính năng này
- 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
- SMTP là viết tắt của Giao thức chuyển thư đơn giản
- Mô-đun smtplib rất hữu ích để giao tiếp với các máy chủ thư để gửi thư
Bước 2. Gửi Email văn bản thuần túy thông qua Mã
import smtplib, ssl port = 587 # For starttls smtp_server = "smtp.gmail.com" sender_email = "xxxxxxxxxx@gmail.com" receiver_email = "xxxxxxxxxcv@gmail.com" password = input["Type your password and press enter:"] message = """\ Subject: Hi there Im sending an email through python code.""" context = ssl.create_default_context[] with smtplib.SMTP[smtp_server, port] as server: server.ehlo[] server.starttls[context=context] server.ehlo[] server.login[sender_email, password] server.sendmail[sender_email, receiver_email, message]
Đầu ra của mã trên
Bước 3. Gửi Email có tệp đính kèm thông qua Mã
- Gói email của Python chứa nhiều lớp và chức năng để soạn và phân tích cú pháp email, phần này chỉ đề cập đến một nhóm nhỏ hữu ích cho việc gửi email
- Có khá nhiều cách để đính kèm tệp vào email, nhưng đây là một trong những cách đơn giản hơn. Lần này chúng tôi sẽ sử dụng bộ mã hóa và MIMEMultipart từ mô-đun email và hệ điều hành. đường dẫn để chỉ cần lấy tên tệp từ đường dẫn được cung cấp
- Phương pháp này hỗ trợ các tệp văn bản, hình ảnh, video, âm thanh và pdf
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders import os.path email = 'your@gmail.com' password = '***********' send_to_email = 'others@gmail.com' subject = 'Sending Email with an attachment' message = 'Please find the attachment to email, thanks' file_location = 'C:\\Users\\DELL E7440\\Desktop\\pyspark - Copy.txt' msg = MIMEMultipart[] msg['From'] = email msg['To'] = send_to_email msg['Subject'] = subject msg.attach[MIMEText[message, 'plain']] # Setup the attachment filename = os.path.basename[file_location] attachment = open[file_location, "rb"] part = MIMEBase['application', 'octet-stream'] part.set_payload[attachment.read[]] encoders.encode_base64[part] part.add_header['Content-Disposition', "attachment; filename= %s" % filename] # Attach the attachment to the MIMEMultipart object msg.attach[part] server = smtplib.SMTP['smtp.gmail.com', 587] server.starttls[] server.login[email, password] text = msg.as_string[] server.sendmail[email, send_to_email, text] server.quit[]
Đầu ra của mã trên
Thư viện Pyzmail
- pyzmail là một thư viện thư cấp cao
- Nó cung cấp các hàm và lớp giúp phân tích cú pháp, soạn và gửi email. pyzmail che giấu những khó khăn trong việc quản lý cấu trúc MIME và mã hóa/giải mã cho các email được quốc tế hóa
Để cài đặt
pip install pyzmail36
Đang kết nối với imap_server
import imapclient import smtplib import datetime import pyzmail imap_server = 'imap.gmail.com' smtp_server = 'smtp.gmail.com' username = '******@gmail.com' password = '******' imapobj = imapclient.IMAPClient[imap_server, ssl=True] imapobj.login[username, password] smtpobj = smtplib.SMTP[smtp_server, 587] smtpobj.ehlo[] smtpobj.starttls[] smtpobj.login[username, password]
Tìm kiếm và truy xuất email
01 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import smtplib import os import imghdr from email.message import EmailMessage EMAIL_ADDRESS = ”senderid @gmail.com” EMAIL_PASSWORD = ”xxxxxxxx” msg = EmailMessage[] msg['Subject'] = 'Lets us Learn The smtp protocol' msg['From'] = EMAIL_ADDRESS msg['To'] = ”receivers @gmail.com” msg.set_content['How about dinner at 6pm this saturday'] with open['image.jpg', 'rb'] as f: file_data = f.read[] file_type = imghdr.what[f.name] file_name = f.name msg.add_attchment[file_data, maintype = 'image', subtype = file_type, filename = file_name] with smtplib.SMTP_SSL['smtp.gmail.com', 465] as smtp: smtp.login[EMAIL_ADDRESS, EMAIL_PASSWORD] smtp.send_message[msg]
Bước 4. Viết chi tiết email hộp thư đến vào csv bằng thư viện pyzmail
11 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import smtplib import os import imghdr from email.message import EmailMessage EMAIL_ADDRESS = ”senderid @gmail.com” EMAIL_PASSWORD = ”xxxxxxxx” msg = EmailMessage[] msg['Subject'] = 'Lets us Learn The smtp protocol' msg['From'] = EMAIL_ADDRESS msg['To'] = ”receivers @gmail.com” msg.set_content['How about dinner at 6pm this saturday'] with open['image.jpg', 'rb'] as f: file_data = f.read[] file_type = imghdr.what[f.name] file_name = f.name msg.add_attchment[file_data, maintype = 'image', subtype = file_type, filename = file_name] with smtplib.SMTP_SSL['smtp.gmail.com', 465] as smtp: smtp.login[EMAIL_ADDRESS, EMAIL_PASSWORD] smtp.send_message[msg]
Đầu ra của đoạn mã trên
Nó sẽ tạo một tệp csv với Id email, từ email, to-email và dữ liệu chủ đề và nó sẽ ghi tệp csv vào vị trí hiện tại nơi python đang được chạy
Đọc tệp csv được viết ở bước trên và sử dụng pandas in 5 dòng đầu tiên
pip install smtplib
0
Đầu ra của mã trên
Thêm tên cột vào khung dữ liệu mà chúng tôi đã tạo từ tệp csv
pip install smtplib
1
Đầu ra của mã trên. Sau khi thêm các cột in 5 dòng đầu tiên
Lấy các email duy nhất của người gửi và tạo một khung dữ liệu khác từ tệp csv
pip install smtplib
2
Sau khi tạo khung dữ liệu email duy nhất, hãy ghi và mã hóa khung dữ liệu thành tệp csv vào e-mail bằng gấu trúc