PythonでOutlookの特定の受信メールから内容を取り出す【プログラミングで自動化】

スポンサーリンク
プログラミング

毎日15分かけていた面倒な作業がPythonプログラミングで1秒で終わるようになりました!

 

どうもヨスケです。

Pythonの勉強を続けて数か月たちましたが、

ついに趣味から仕事に活かす時が来ました。

簡単なスクリプトでしたが、一日15分かけていた作業を1秒でできてしまうので、

少しでも参考になればと思い記事にします。

 

スポンサーリンク
スポンサーリンク

ヨスケの悩み 単純作業を自動化したい

ヨスケの部署は、とにかく人が足りません。

40手前のヨスケは中間管理職ですが、いまだに単純作業を割り当てられる始末。

今、一番面倒に思っているのが、以下のような作業です。

 

① 毎日Outlookに届くメールのうち、特定の件名のメールを開く
② メールの件名や本文から テーマ、リンク、件数、配信日を抽出する
③ 抽出した内容をエクセル表に一覧化する

 

簡単なんですが、本当もう、、、

超めんどくさいんです。

 

一覧化するOutlook受信メールの内容

エクセルに転記するメールの内容は以下のようなものです。

赤マーカーを付けた部分が抽出したい部分です。

 

————————————————————————-

件名: 新着案件配信 テーマ:〇× 件数:■▽件  ←一部だけ取り出したい

本文:

ヨスケ様

~中略~

新着案件のリンクを配信します。
← 一行ある
配信日:yyyy/mm/dd       ←「配信日:」という文字列が邪魔

■リンクはこちら

https://retire-early40.com  ←先頭にスペースがある。

——————————————————————————

Pythonでこれを自動化します。

 

【ソース一気見せ!】win32comでoutlookを操作

PythonにはWin32comというライブラリが公開されており、

Outlookの操作ができるようになっていることを知りました。

 

あとは、件名や本文の文字列をうまく扱えば意外と簡単にできます。

恒例のソースコード一気見せです。

 

サンプルコード

import win32com.client
from openpyxl import Workbook


wb = Workbook()
ws = wb.active

# ひっかけたいメールの件名
SUBJECT = "新着案件配信"

# メールからデータ取得するためのおまじない
object = win32com.client.Dispatch('Outlook.Application')
mapi = object.GetNamespace('MAPI')


# 受信トレイ選択・・・「6」が受信トレイ
inbox = mapi.GetDefaultFolder(6)

# メール取得
mails = inbox.items
pnum = 0
sub_list = []
content_list = []

row = ['No.','テーマ','リンク','件数','受信日']
ws.append(row)

for mail in mails:
    # 特定の件名のメールを検索

    if SUBJECT in mail.subject:
        # メール件名から使用する箇所を特定
        sub = mail.subject
        sub_list = sub.split()
        theme = sub_list[1].strip('テーマ:')
        patents = sub_list[2].strip('件数:')


        # メール本文から使用する箇所を特定
    
     # 本文を行で分割する
        body = mail.body.splitlines()

     # 配信日は以下の文章の2行下なので、indexを2つ進める
        dateindex = body.index("新着案件のリンクを配信します。")+2

     # 文字列から「配信日:」を除去し、日付だけにする
        rcv_date = str(body[dateindex]).strip("配 信 日 : ")

     # リンクの位置を特定
        linkindex = body.index("■リンクはこちら")+1
     # 先頭のスペースを除去
        plink = str(body[linkindex].strip(' '))

        # データ抽出
        content_list = [pnum, theme, plink, patents, rcv_date]

     # エクセルへ書き込み
        ws.append(content_list)

        pnum +=1
        if pnum>700:
            break
# エクセルファイルの保存
wb.save("test.xlsx")

実行結果

実行して出力したエクセルはこんな感じです。

(仕事の内容なので、モザイクですみません)

まとめ

ついに実務でPythonを活用できました!

 

毎日行っている面倒な作業を自動化すれば、

自分が楽になるのを身をもって体感できました。

仕事につながるとやっぱり勉強のモチベーションにもなります。

 

今後もPythonで仕事が楽になることがないか探そうと思います。

 

これまで作成したPythonプログラムについても、

以下の記事でまとめていますので、そちらも参考にしてみてください。

 

 

 

もしよろしければ、ブログランキングについても

ポチっとしていただければ嬉しいです。

 


セミリタイアランキング

 

にほんブログ村 その他生活ブログ 早期リタイアへ
にほんブログ村

 

 

 

 

 

タイトルとURLをコピーしました