Python có thể tương tác với triển vọng không?

Tiết lộ. Bài đăng này có thể chứa các liên kết liên kết, nghĩa là khi bạn nhấp vào liên kết và mua hàng, chúng tôi sẽ nhận được hoa hồng

Tạo một ứng dụng có thể đọc email của bạn và tự động tải xuống các tệp đính kèm là một công cụ hữu ích. Trong hướng dẫn này, bạn sẽ học cách sử dụng mô-đun imaplib tích hợp sẵn để liệt kê và đọc email của mình bằng Python;

IMAP là một giao thức chuẩn Internet được các ứng dụng email khách sử dụng để truy xuất thư email từ máy chủ thư. Không giống như giao thức POP3 tải xuống email và xóa chúng khỏi máy chủ [sau đó đọc ngoại tuyến], với IMAP, thư không còn trên máy tính cục bộ;

Nếu bạn muốn đọc email bằng Python bằng một số loại API thay vì

status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
5 tiêu chuẩn, bạn có thể xem hướng dẫn sử dụng Gmail API, nơi chúng tôi đề cập đến điều đó

học cũng được. Cách trích xuất dữ liệu Google Xu hướng bằng Python

Để bắt đầu, chúng tôi không phải cài đặt bất cứ thứ gì. Tất cả các mô-đun được sử dụng trong hướng dẫn này là những mô-đun tích hợp sẵn

import imaplib
import email
from email.header import decode_header
import webbrowser
import os

# account credentials
username = "youremailaddress@provider.com"
password = "yourpassword"
# use your email provider's IMAP server, you can look for your provider's IMAP server on Google
# or check this page: //www.systoolsgroup.com/imap/
# for office 365, it's this:
imap_server = "outlook.office365.com"

def clean[text]:
    # clean text for creating a folder
    return "".join[c if c.isalnum[] else "_" for c in text]

Chúng tôi đã nhập các mô-đun cần thiết và sau đó chỉ định thông tin đăng nhập tài khoản email của chúng tôi. Vì tôi đang thử nghiệm tính năng này trên tài khoản Office 365 nên tôi đã sử dụng

status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
6 làm máy chủ IMAP, bạn hãy kiểm tra liên kết này có chứa danh sách máy chủ IMAP cho các nhà cung cấp dịch vụ email được sử dụng phổ biến nhất

Sau này chúng ta cần hàm

status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
7 để tạo thư mục không có dấu cách và ký tự đặc biệt

Trước tiên, chúng tôi sẽ cần kết nối với máy chủ IMAP

# create an IMAP4 class with SSL 
imap = imaplib.IMAP4_SSL[imap_server]
# authenticate
imap.login[username, password]

Ghi chú. Từ ngày 30 tháng 5 năm 2022, Google không còn hỗ trợ việc sử dụng các ứng dụng hoặc thiết bị của bên thứ ba yêu cầu bạn đăng nhập vào Tài khoản Google của mình chỉ bằng tên người dùng và mật khẩu của bạn. Do đó, mã này sẽ không hoạt động đối với tài khoản Gmail. Nếu bạn muốn tương tác với tài khoản Gmail của mình bằng Python, tôi thực sự khuyến khích bạn sử dụng hướng dẫn API Gmail để thay thế

Nếu mọi thứ đều ổn, thì bạn đã đăng nhập thành công vào tài khoản của mình. Hãy bắt đầu nhận email

status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]

Chúng tôi đã sử dụng phương pháp

status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
8 để chọn hộp thư [Hộp thư đến, thư rác, v.v. ], chúng tôi đã chọn thư mục INBOX. Bạn có thể sử dụng phương pháp
status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
9 để xem các hộp thư có sẵn

Biến

# create an IMAP4 class with SSL 
imap = imaplib.IMAP4_SSL[imap_server]
# authenticate
imap.login[username, password]
0 chứa tổng số thư trong thư mục đó [thư mục hộp thư đến] và biến
# create an IMAP4 class with SSL 
imap = imaplib.IMAP4_SSL[imap_server]
# authenticate
imap.login[username, password]
1 chỉ là thư cho biết chúng ta có nhận thư thành công hay không. Sau đó, chúng tôi đã chuyển đổi
# create an IMAP4 class with SSL 
imap = imaplib.IMAP4_SSL[imap_server]
# authenticate
imap.login[username, password]
0 thành một số nguyên để có thể tạo vòng lặp
# create an IMAP4 class with SSL 
imap = imaplib.IMAP4_SSL[imap_server]
# authenticate
imap.login[username, password]
3

Biến

# create an IMAP4 class with SSL 
imap = imaplib.IMAP4_SSL[imap_server]
# authenticate
imap.login[username, password]
4 là số lượng email hàng đầu mà bạn muốn truy xuất; . Hãy lặp lại từng email, trích xuất mọi thứ chúng tôi cần và hoàn thành mã của chúng tôi

________số 8

Rất nhiều để trang trải ở đây. Điều đầu tiên cần lưu ý là chúng tôi đã sử dụng

# create an IMAP4 class with SSL 
imap = imaplib.IMAP4_SSL[imap_server]
# authenticate
imap.login[username, password]
5, có nghĩa là đi từ trên xuống dưới, các email mới nhất có số id cao nhất và email đầu tiên có ID là 1, vì vậy đó là lý do chính, nếu

Thứ hai, chúng tôi đã sử dụng phương pháp

# create an IMAP4 class with SSL 
imap = imaplib.IMAP4_SSL[imap_server]
# authenticate
imap.login[username, password]
7, phương thức này tìm nạp email theo ID bằng định dạng chuẩn được chỉ định trong RFC 822

Sau đó, chúng tôi phân tích cú pháp các byte được phương thức

# create an IMAP4 class with SSL 
imap = imaplib.IMAP4_SSL[imap_server]
# authenticate
imap.login[username, password]
8 trả về thành một đối tượng Thư phù hợp và sử dụng hàm
# create an IMAP4 class with SSL 
imap = imaplib.IMAP4_SSL[imap_server]
# authenticate
imap.login[username, password]
9 từ mô-đun
status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
0 để giải mã chủ đề của địa chỉ email thành Unicode mà con người có thể đọc được

Sau khi in người gửi email và chủ đề, chúng tôi muốn trích xuất nội dung thư. Chúng tôi xem liệu email có nhiều phần hay không, có nghĩa là nó chứa nhiều phần. Chẳng hạn, một email có thể chứa nội dung

status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
1 và phần
status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
2, có nghĩa là nó có phiên bản HTML và văn bản thuần túy của thư

Nó cũng có thể chứa tệp đính kèm. Chúng tôi phát hiện ra điều đó qua tiêu đề

status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
3, vì vậy chúng tôi tải xuống nó trong một thư mục mới được tạo cho mỗi email được đặt tên theo chủ đề

Đối tượng msg, là đối tượng

status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
4 của mô-đun email, có nhiều trường khác để trích xuất. Trong ví dụ này, chúng tôi chỉ sử dụng
status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
5 và
status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
6, viết
status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
7 và xem các trường có sẵn để trích xuất. Chẳng hạn, bạn có thể lấy ngày gửi tin nhắn bằng cách sử dụng msg["Date"]

Sau khi tôi chạy mã cho tài khoản email thử nghiệm của mình, tôi nhận được kết quả này

status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
2

Vì vậy, mã sẽ chỉ in các thư nội dung của

status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
2, nó sẽ tạo một thư mục cho mỗi email, chứa tệp đính kèm và phiên bản HTML của email. Nó cũng mở email HTML trong trình duyệt mặc định của bạn cho mỗi email được trích xuất có nội dung HTML

Truy cập email của tôi, tôi thấy các email tương tự được in bằng Python

Tuyệt vời, tôi cũng nhận thấy các thư mục được tạo cho mỗi email

Mỗi thư mục có thông báo HTML [nếu có] và tất cả các tệp được đính kèm trong email

Sự kết luận

Tuyệt vời, bây giờ bạn có thể xây dựng ứng dụng email của riêng mình bằng cách sử dụng công thức này. Ví dụ: thay vì mở từng email trên tab trình duyệt mới, bạn có thể xây dựng chương trình GUI đọc và phân tích cú pháp HTML giống như trình duyệt thông thường hoặc có thể bạn muốn gửi thông báo bất cứ khi nào có email mới được gửi cho bạn;

Tuy nhiên, một lưu ý là chúng tôi chưa đề cập đến mọi thứ mà mô-đun

status, messages = imap.select["INBOX"]
# number of top emails to fetch
N = 3
# total number of emails
messages = int[messages[0]]
5 cung cấp. Ví dụ: bạn có thể tìm kiếm email và lọc theo địa chỉ người gửi, chủ đề, ngày gửi, v.v. bằng phương pháp
for i in range[messages, messages-N, -1]:
    # fetch the email message by ID
    res, msg = imap.fetch[str[i], "[RFC822]"]
    for response in msg:
        if isinstance[response, tuple]:
            # parse a bytes email into a message object
            msg = email.message_from_bytes[response[1]]
            # decode the email subject
            subject, encoding = decode_header[msg["Subject"]][0]
            if isinstance[subject, bytes]:
                # if it's a bytes, decode to str
                subject = subject.decode[encoding]
            # decode email sender
            From, encoding = decode_header[msg.get["From"]][0]
            if isinstance[From, bytes]:
                From = From.decode[encoding]
            print["Subject:", subject]
            print["From:", From]
            # if the email message is multipart
            if msg.is_multipart[]:
                # iterate over email parts
                for part in msg.walk[]:
                    # extract content type of email
                    content_type = part.get_content_type[]
                    content_disposition = str[part.get["Content-Disposition"]]
                    try:
                        # get the email body
                        body = part.get_payload[decode=True].decode[]
                    except:
                        pass
                    if content_type == "text/plain" and "attachment" not in content_disposition:
                        # print text/plain emails and skip attachments
                        print[body]
                    elif "attachment" in content_disposition:
                        # download attachment
                        filename = part.get_filename[]
                        if filename:
                            folder_name = clean[subject]
                            if not os.path.isdir[folder_name]:
                                # make a folder for this email [named after the subject]
                                os.mkdir[folder_name]
                            filepath = os.path.join[folder_name, filename]
                            # download attachment and save it
                            open[filepath, "wb"].write[part.get_payload[decode=True]]
            else:
                # extract content type of email
                content_type = msg.get_content_type[]
                # get the email body
                body = msg.get_payload[decode=True].decode[]
                if content_type == "text/plain":
                    # print only text email parts
                    print[body]
            if content_type == "text/html":
                # if it's HTML, create a new HTML file and open it in browser
                folder_name = clean[subject]
                if not os.path.isdir[folder_name]:
                    # make a folder for this email [named after the subject]
                    os.mkdir[folder_name]
                filename = "index.html"
                filepath = os.path.join[folder_name, filename]
                # write the file
                open[filepath, "w"].write[body]
                # open in the default browser
                webbrowser.open[filepath]
            print["="*100]
# close the connection and logout
imap.close[]
imap.logout[]
0

Dưới đây là các hướng dẫn email Python khác

Đây là tài liệu chính thức về các mô-đun được sử dụng cho hướng dẫn này

Cuối cùng, nếu bạn là người mới bắt đầu và muốn học Python, tôi khuyên bạn nên tham gia khóa học Python For Everyone Coursera, trong đó bạn sẽ học được nhiều điều về Python. Bạn cũng có thể kiểm tra trang tài nguyên và khóa học của chúng tôi để xem các tài nguyên Python mà tôi khuyên dùng

Có thể sử dụng Python với Outlook không?

Gửi email từ Python bằng Outlook. Vì các điều kiện tiên quyết đã được quan tâm, đã đến lúc bắt đầu viết mã. Để bắt đầu, bạn cần nhập win32com. thư viện máy khách bằng cách sử dụng câu lệnh nhập. Giờ đây, bạn có thể viết mã để kết nối Python và ứng dụng email của Microsoft, Outlook .

Python có thể được sử dụng để 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.

Chủ Đề