質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

2回答

2587閲覧

Python Outlookで会議開催通知を含むメール仕分けについて

BluePi85

総合スコア22

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

2クリップ

投稿2020/02/10 10:35

Windows10 64bit PCにて、Python3.6.8 64bit を用いて、Outlook2016のメールを仕分けしたく、
以下のサイトを参考にプログラミングを作成いたしました。
リンク内容

しかし、受信トレイにある会議開催通知にて、必須出席者と任意出席者が全て「受信者」となり、
それぞれの仕分けが行えません。
また、「cc」の部分でエラーが生じてしまいます。

python

1#ステップ1|ライブラリ 2from openpyxl import load_workbook 3import win32com.client 4import datetime 5import os 6 7#ステップ2|所定フォルダ内の「Book1.xlsm」を指定して読み込む 8filepath = 'C:/Users/user/Outlook_Book1.xlsx' 9wb = load_workbook(filename=filepath) 10ws1 = wb['データ'] 11 12#ステップ3|集計範囲の取得 13startdate=ws1['B2'].value 14enddate=ws1['B3'].value 15 16#ステップ4|Outlookの情報を取得 17outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") 18inbox = outlook.GetDefaultFolder(6) 19messages=inbox.Items 20 21#ステップ5|Outlookのt添付ファイル保管用フォルダの作成 22now=datetime.datetime.now() 23foldermake=now.strftime("%Y/%m/%d %H:%M:%S") 24foldermake = foldermake.replace("/","-") 25foldermake = foldermake.replace(":","-") 26foldermake = foldermake.replace(" ","-") 27newfolder_path = 'C:/Users/---/Outlook_'+foldermake 28os.makedirs(newfolder_path) 29 30#ステップ6|Outlookの情報を取得 31a=0 32for message in messages: 33 RT=message.ReceivedTime 34 hiduketime = datetime.datetime(RT.year ,RT.month, RT.day, RT.hour, RT.minute, RT.second) 35 if startdate <= hiduketime <= enddate: 36 # カウント 37 ws1.cell(row=7+a, column=1).value = a+1 38 # 件名 39 ws1.cell(row=7+a, column=2).value = str(message.Subject) 40 # 日時 41 ws1.cell(row=7+a, column=3).value = hiduketime 42 # 送信者 43 ws1.cell(row=7+a, column=4).value = str(message.Sender) 44 # 受信者 45 ws1.cell(row=7+a, column=5).value = str(message.Recipients) 46 # cc 47 ws1.cell(row=7+a, column=6).value = str(message.CC) 48 # 本文 49 ws1.cell(row=7+a, column=7).value = str(message.body) 50 # 添付ファイル 51 if message.Attachments.Count > 0: 52 myDate = RT.strftime("%Y/%m/%d %H:%M:%S") 53 myDate = myDate.replace("/","-") 54 myDate = myDate.replace(":","-") 55 myDate = myDate.replace(" ","-") 56 datefolder_path = newfolder_path + '\' + myDate 57 os.makedirs(datefolder_path) 58 for myAttachment in message.Attachments: 59 print(myAttachment.FileName) 60 myAttachment.SaveAsFile(datefolder_path + '\' + myAttachment.FileName) 61 ws1.cell(row=7+a, column=8).value = '有' 62 else: 63 ws1.cell(row=7+a, column=8).value = '無' 64 a=a+1 65 66#ステップ7|所定フォルダ内の「Book1.xlsm」で保存する 67wb.save(filepath) 68print('保存しました')

申し訳ありませんが、
どのように対処したら良いかアドバイスを頂けないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2020/02/11 10:22

どういう機能を持ったプログラムを作りたいのでしょうか? 具体的に書いてください。
guest

回答2

0

ベストアンサー

ちょっと作ってみました
ExcelVBAですが、参考になれば。

Public Sub 受信メール() '画面更新停止 Application.ScreenUpdating = False ' 定義 Dim objOL As Object Dim sht As Worksheet Dim rowCnt As Long Dim To_Addr As String Dim CC_Addr As String Dim optAtt As String Dim reqAtt As String ' 読み込むシート(シート名リスト)をshtと命名 Set sht = Worksheets("Sheet3") ' シート名 ' A列一番下のセルをrowCntと命名 rowCnt = Cells(Rows.Count, "A").End(xlUp).Row ' 「Outlookから取得する」をobjOLと命名 Set objOL = CreateObject("Outlook.Application") Set InboxFolder = objOL.GetNamespace("MAPI").GetDefaultFolder(6) '受信トレイ Set subfolder = InboxFolder.Folders("tes") 'サブフォルダーの指定 ' Outlookの受信ボックスのメールを最終行の1行下に取得・件数分繰り返す For Each itms In subfolder.Items ' olFolderInbox:6 Select Case itms.Class Case Is = 43 ' olMail sht.Cells(rowCnt + 1, 1).Value = itms.Subject ' A列・件名 sht.Cells(rowCnt + 1, 2).Value = itms.ReceivedTime ' B列・受信日時 sht.Cells(rowCnt + 1, 3).Value = itms.SenderEmailAddress ' C列・差出人アドレス sht.Cells(rowCnt + 1, 6).Value = itms.Body ' F列・本文 To_Addr = "" CC_Addr = "" For Each R_itms In itms.Recipients Select Case R_itms.Type Case Is = 1 'To To_Addr = To_Addr + R_itms.Address & vbCrLf Case Is = 2 'CC CC_Addr = CC_Addr + R_itms.Address & vbCrLf Case Is = 3 'BCC '? End Select Next sht.Cells(rowCnt + 1, 4).Value = To_Addr ' D列・To sht.Cells(rowCnt + 1, 5).Value = CC_Addr ' E列・CC Case Is = 53 ' olMeetingRequest sht.Cells(rowCnt + 1, 1).Value = itms.Subject ' A列・件名 sht.Cells(rowCnt + 1, 2).Value = itms.ReceivedTime ' B列・受信日時 sht.Cells(rowCnt + 1, 3).Value = itms.SenderEmailAddress ' C列・差出人アドレス sht.Cells(rowCnt + 1, 6).Value = itms.Body ' F列・本文 optAtt = "" reqAtt = "" For Each R_itms In itms.Recipients Select Case R_itms.Type Case Is = 1 'requiredAttendees optAtt = optAtt + R_itms.Address & vbCrLf Case Is = 2 'optionalAttendees reqAtt = reqAtt + R_itms.Address & vbCrLf End Select Next sht.Cells(rowCnt + 1, 7).Value = optAtt ' G列・必須出席者 sht.Cells(rowCnt + 1, 8).Value = reqAtt ' H列・任意出席者 End Select rowCnt = rowCnt + 1 Next Set objOL = Nothing Range("A1").Select ' 画面更新停止を解除 Application.ScreenUpdating = True ' 終了メッセージ MsgBox "終了しました。" End Sub

投稿2020/02/12 05:13

sinzou

総合スコア392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BluePi85

2020/02/16 19:48

メールと会議開催通知の区別が分からなかったところ、 分かりやすい参考のプログラムを載せて頂き、ありがとうございました
guest

0

https://docs.microsoft.com/ja-jp/outlook/add-ins/get-and-set-item-data-in-a-compose-form
より

optionalAttendees 任意出席者
requiredAttendees 必須出席者
だそうです。

追記
Outlookの新しいアイテム、会議を選んだ時、ccの枠ありませんでした。
会議に対しては、cc取得をスキップでよいのではないでしょうか。

投稿2020/02/11 11:39

編集2020/02/12 00:50
sinzou

総合スコア392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問