Tệp đính kèm Python-O365

Gần đây, tôi có một kịch bản đặt ra cho tôi khi một đồng nghiệp muốn tự động hóa một số khía cạnh trong quá trình thu thập dữ liệu của họ. Quy trình của họ vào thời điểm đó là họ sẽ nhận được một email tự động từ một hệ thống có chứa mật khẩu được bảo vệ. tệp đính kèm zip (an toàn phải không?). Trong đó có một. csv và vì vậy họ sẽ tải xuống tệp này theo cách thủ công và bắt đầu hoàn thành một số phân tích về tệp đó


Tôi cảm thấy rằng giải pháp tốt nhất cho vấn đề của họ sẽ liên quan đến python và sau một chút nghiên cứu, tôi đã giải quyết được mô-đun Exchangelib, có vẻ như nó có thể làm đúng những gì tôi cần (khi chúng tôi sử dụng Office 365)


Tệp đính kèm Python-O365


Tôi đã sắp xếp để gửi email được tạo tự động đến một hộp thư cụ thể mà chúng tôi trong nhóm của mình sử dụng (vì mục đích của bài đăng này, tôi sẽ gọi nó là 'team@dataandstuff. đồng. anh’) lúc 05. 00 mỗi sáng và đặt một quy tắc nhanh để tự động chuyển những email này đến một thư mục con trong Hộp thư đến (bây giờ hãy gọi thư mục này là 'Beans'). Sau đó, trong thư mục con 'Beans', tôi đã tạo một thư mục khác có tên là 'archive' (nơi chúng tôi sẽ chuyển email đã xử lý sang một khi chúng tôi đã hoàn thành những gì chúng tôi cần)

Vì vậy, hãy viết kịch bản - rõ ràng là chúng tôi cần mô-đun Exchangelib, nhưng chúng tôi không cần mọi thứ từ đó nên tôi đã bắt đầu với


from exchangelib import Credentials, Account, FileAttachment

(ghi chú. trước tiên bạn sẽ cần cài đặt mô-đun này theo cách thủ công – nếu bạn đang sử dụng pip thì đây là 'pip install exchangelib')


Bây giờ - hãy nhớ rằng. zip đã được bảo vệ bằng mật khẩu, vì vậy chúng tôi cần một cách để giải quyết vấn đề đó và đó sẽ là thông qua tệp zip mô-đun, do đó, tập lệnh của bạn bây giờ trông giống như


from exchangelib import Credentials, Account, FileAttachment
import zipfile

(như trước cài đặt mô-đun zipfile trước)


Chúng tôi cũng sẽ cần nhập mô-đun os để chúng tôi có thể chỉ định nơi lưu tệp vào sau này


from exchangelib import Credentials, Account, FileAttachment
import zipfile
import os
 


Chúng tôi sẽ bắt đầu bằng cách chỉ định một số biến cho tên người dùng và mật khẩu mà chúng tôi sử dụng để đăng nhập vào tài khoản office365 cũng như mật khẩu để mở khóa. zip - với mục đích của blog này, hãy lưu thông tin đăng nhập dưới dạng các biến (có thể bạn muốn lưu trữ những thông tin này một cách an toàn hơn bình thường)


username='[email protected]'
pwd='hello_world'
zippwd='hello_world'


Tiếp theo, chúng ta sẽ cần gán những thông tin này cho biến 'thông tin xác thực'


credentials = Credentials(username,pwd)

Và sau đó, hãy đặt biến tài khoản của chúng ta (i. e. hộp thư mà chúng tôi sẽ kết nối tới)


account = Account(team@dataandstuff.co.uk', credentials=credentials, autodiscover=True)

Bây giờ chúng tôi sẽ cần chỉ định nơi chúng tôi muốn tải xuống. zip vào và nơi chúng tôi muốn lưu nội dung đã giải nén - một lần nữa thông qua các biến


local_path=r'D:\\Email\\downloads\\'
unzip_path=r'D:\\Email\\downloads\\unzipped\\'

(Ghi chú. Chọn thư mục của riêng bạn cho việc này)


Tiếp theo, hãy chỉ định thư mục nào trong hộp thư mà chúng tôi muốn đọc (hãy nhớ rằng tôi đã tạo thư mục con 'Beans' trước đó?). Bạn có thể xem tất cả các thư mục có sẵn bằng cách in ra cây tài khoản gốc như sau


print(account.root.tree())

Nếu bạn cuộn xuống để tìm phần 'Cửa hàng thông tin hàng đầu' thì bạn có thể xem cấu trúc đường dẫn bên dưới phần đó. Vì vậy, đối với cấu trúc của chúng tôi, đây sẽ là

________số 8_______

Chúng tôi cũng muốn cho biết nơi chúng tôi sẽ chuyển email đến sau khi xử lý xong (bạn có nhớ thư mục con lưu trữ mà chúng tôi đã tạo không?)

to_folder = folder/'archive'

OK, bây giờ chúng ta có thể đưa tất cả những thứ đó vào hoạt động trong một vài dòng mã rất ngắn

from exchangelib import Credentials, Account, FileAttachment
import zipfile
0

Điều này về cơ bản đang làm là xem xét tất cả các email trong thư mục 'Beans' (được sắp xếp theo datetime_received (tăng dần)), sau đó từng cái một, xem xét tất cả các tệp đính kèm trong các email đó – nếu tệp đính kèm thực sự là một tệp đính kèm (và một. zip), sau đó tải xuống. zip và giải nén nội dung vào vị trí ‘unzip_path’ mà chúng tôi đã chỉ định trước đó (chuyển biến zippwd làm đối số). Cuối cùng, nó chuyển email đến thư mục con 'lưu trữ'


Sau đó, bạn có thể hoàn thành bất kỳ quá trình xử lý nào bạn cần đối với nội dung tệp (e. g. tải chúng vào khung dữ liệu gấu trúc)


Kịch bản hoàn thành của chúng tôi bây giờ trông như thế này


from exchangelib import Credentials, Account, FileAttachment
import zipfile
1


Đây rõ ràng là một quá trình cơ bản và bạn sẽ muốn xây dựng thêm một số điều kiện vào chương trình của mình và làm cho nó an toàn hơn, nhưng đó chỉ là nền tảng để giúp bạn tự động tải xuống các tệp đính kèm email và giải nén tệp đính kèm. tệp zip (nếu cần). Chẳng hạn, bạn có thể thiết lập tập lệnh này để chạy qua Bộ lập lịch tác vụ Windows vào một thời điểm cụ thể (trường hợp sử dụng của chúng tôi có email được nhận ngay sau 05. 00, vậy đây có thể là 05. 15), sau đó đặt dữ liệu để tải vào cơ sở dữ liệu SQL Server và bạn thậm chí không bao giờ phải xem lại email nữa

Mô-đun Exchangelib có nhiều chức năng hơn thế này rất nhiều và có thể rất hữu ích để giúp bạn tự động hóa rất nhiều công việc quản trị nhàm chán mà bạn hoàn thành từ email của mình và tất nhiên bạn có thể tìm hiểu thêm từ tài liệu có sẵn trên pypi

Python có hoạt động với Office 365 không?

Tạo ứng dụng ETL cho dữ liệu Office 365 bằng Python . Sử dụng chức năng kết nối cho Trình kết nối CData Office 365 để tạo kết nối để làm việc với dữ liệu Office 365 .

Làm cách nào để cài đặt gói Office 365 bằng Python?

O365 khả dụng trên pypi. tổ chức. Chỉ cần chạy pip install O365 để cài đặt. Phụ thuộc dự án được cài đặt bởi pip. yêu cầu.

Làm cách nào để đọc email office 365 trong python?

Cách đọc email từ triển vọng trong python .
nhập win32com. máy khách # các thư viện khác sẽ được sử dụng trong tập lệnh này nhập os từ datetime nhập datetime, timedelta. .
triển vọng = win32com. khách hàng. Công văn ('triển vọng. ứng dụng') mapi = triển vọng. GetNamespace("MAPI")