はじめに
Outlookでいろいろビジネスメールのやり取りをすることが多い中、pdfが頻繁に送られてくることも増えました。
そこでいちいち全部のメールに対して、自分ルールの命名規則にしたがって抜けなく保存するのがめんどくさくなったので、特定の相手からのメールのみを抜き出して、一気に保存するPythonコードを書きました。
簡単なコードの説明
特に難しいことはなく、win32comを使った操作です。outlookがひらっきぱなしだと最初はエラーを起こしました。
(再起動したら治ったので原因はわからないです。)
基本的にwin32の公式サイトを見ながら実装しました。
このサイトのリンクなどをたどりながらやったので参考になれば【Python】win32comを使ったOutlook操作のすべて
Pythonでの実装
以下にコードを示します。
中には名前がこちらからわからないメールがあり、エラーの原因となったのでexceptで無理やりコードを動かしています。
何かうまい解決策をご存じの方がいらっしゃたらお知らせください。
import win32com.client
import os
# Outlookアプリケーションを起動
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
# 受信トレイを取得
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
# 保存先のフォルダを指定
save_folder = r"絶対DIRを指定"
# フィルタリングして送信者が"(名前)"のメッセージのみ取得
messages = messages.Restrict("[SenderName] = '(名前)'")
for message in messages:
try:
attached_files = message.Attachments # メッセージの添付ファイルを取得
if attached_files.Count > 0:
for attachment in attached_files:
if attachment.FileName.lower().endswith('.pdf'): # PDFファイルのみを抽出
print('Subject: ' + message.Subject)
day = message.ReceivedTime.strftime("%Y%m%d_") # 日付情報を取得し、"YYYYMMDD_"形式に
pdf_name = attachment.FileName
print('ReceivedTime: ' + day)
print(pdf_name)
# (日にち)+(file名)のルールに従って再命名&保存
attachment.SaveAsFile(os.path.join(save_folder, f"{day}{pdf_name}"))
print(f"Saved: {day}{pdf_name}")
except Exception as e:
print(f"Error processing message: {e}")
continue
最後に
ほかの投稿も見てやってください;;
たこ焼き食べたい
コメント