前提・実現したいこと
C#で自分のパソコンのOutlookにアクセスし、受信フォルダから特定のメールを取得して、取得した数を件数として出力する
プログラムを作ろうとしています。
ネットの情報から見よう見まねで作成しました。
発生している問題・エラーメッセージ
実行しても、出力はDebug1~4とmailcountの0の値しか出力されませんでした。 実行前のエラーは検出されませんでした。 "ループ"が出力されていない点から、AllFolderは受信フォルダを取得できていないと思っております。 まず、Outlookにアクセス出来ていないのではと思っております。 ネットで調べてみましたが、アクセス出来てるのか、正しいアクセスの仕方が分かりませんでした。 var logon = app.GetNamespace("MAPI");がExchangeサーバを利用している場合、機能しないという ことは分かったのですが、自分のOutlookがExchangeサーバを利用しているのか分からず、 Exchangeサーバを利用した状態でのアクセス方法を探しても見つかりませんでした。
該当のソースコード
C#
1using System; 2using System.Text.RegularExpressions; 3using System.Windows.Forms; 4using Outlook = Microsoft.Office.Interop.Outlook; 5using sc = System.Console; 6 7namespace OutlookCheck { 8 public partial class Form1 : Form { 9 10 11 //検知件数の変数を宣言 12 static int mailcount = 0; 13 14 //IsMatchインスタンスメソッド生成(文章の中身は気にしないようお願いいたします。) 15 Regex w1 = new Regex("^ORA-00060 デッドロック検知。トランザクション\b.*\bをロールバックします。$", RegexOptions.Compiled); 16 17 18 public Form1() { 19 InitializeComponent(); 20 } 21 22 23 //Formに配置したボタンで実行 24 private void Test_Click(object sender, EventArgs e) { 25 26 //Applicationクラスのインスタンスを生成 27 var app = new Outlook.Application(); 28 sc.WriteLine("Debug1"); 29 30 //ローカルの.pstファイルが無かったため、サーバに直接ログオンを試みています。 31 var logon = app.GetNamespace("MAPI"); 32 sc.WriteLine("Debug2"); 33 34 //アカウント名,パスワード, 第三、第四引数は見まねでfalseを入れています。 35 logon.Logon("xxx", "xxx", false, false); 36 sc.WriteLine("Debug3"); 37 38 //受信フォルダを取得 39 var AllFolder = app.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).Folders; 40 sc.WriteLine("Debug4"); 41 42 //ここから一つのフォルダ(Inbox)を特定し、題名と文に正規表現を用いて特定のメールを検出。 43 //mailcountの値を増やし、検知件数として出力。 44 foreach(Outlook.Folder folder in AllFolder) { 45 sc.WriteLine("ループ"); 46 47 if(folder.Name != "Inbox") { 48 continue; 49 } 50 51 sc.WriteLine("フォルダアクセス"); 52 53 foreach(Outlook.MailItem mail in folder.Items) { 54 if(mail.Subject == "^【警告】") { 55 if(w1.IsMatch(mail.Body)) { 56 mailcount++; 57 } 58 } 59 } 60 } 61 62 sc.WriteLine(mailcount); 63 64 } 65 } 66} 67
試したこと
ネットで調べる。デバッグ用メッセージの追加。
補足情報(FW/ツールのバージョンなど)
フレームワーク .NET Framework 4.7.2
説明が下手で分かりづらいとは思いますが、どうか助言の程、よろしくお願いいたします。
あなたの回答
tips
プレビュー