このC#プログラムは、Microsoft Outlookのアドイン(追加機能)として機能し、Outlookのメール送信イベントにフックして特定の処理を行うように設計されています。この記事では、プログラムの主要な部分について詳しく説明し、その機能と使用方法について解説します。
このOutlookアドインは、Outlookが送信する各メールを検査し、特定の条件(コマンドライン引数で指定された文字列)に基づいて警告を表示するか、メールの送信をキャンセルすることができます。このプログラムは、企業や個人が特定のメールアドレスへのメール送信を間違って行うのを防ぐために役立つ可能性があります。
using System;
using System.Windows.Forms;
using Outlook = Microsoft.Office.Interop.Outlook;
using System.Threading;
using System.Runtime.InteropServices;
using System.Diagnostics;
public class OutlookAddIn{
public static string[] commandLineArgs;
public static Microsoft.Office.Interop.Outlook.Application outlookApp; // Outlookアプリケーションの静的フィールド
public static void Main(string[] args){
try{
commandLineArgs = args;
Process outlookProcess = null;
try{
outlookApp = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application;
Process[] outlookProcesses = Process.GetProcessesByName("OUTLOOK");
if (outlookProcesses.Length == 0) {
Console.WriteLine("Outlookが実行されていません。");
return;
}
outlookProcess = outlookProcesses[0];
}catch{
outlookApp = null;
}
if (outlookApp == null){
Console.WriteLine("Outlookアプリケーションの初期化に失敗しました。");
Console.ReadLine();
return;
}
outlookApp.ItemSend += new Outlook.ApplicationEvents_11_ItemSendEventHandler(OutlookAddIn_ItemSend);
// Outlookのプロセスが終了するまで待機
outlookProcess.WaitForExit();
Console.WriteLine("Outlookアドインを終了します。");
}catch (System.Exception ex){
Console.WriteLine("例外: " + ex.Message);
Console.ReadLine();
}
}
// ContainsExclusionメソッド: 対象文字列に除外対象文字列が含まれているか確認するメソッド
static bool ContainsExclusion(string target, string exclusion){
// 対象文字列に除外対象文字列が含まれている場合はtrueを返す
return target.Contains(exclusion);
}
private static void OutlookAddIn_ItemSend(object Item, ref bool Cancel){
try{
Microsoft.Office.Interop.Outlook.MailItem mailItem = Item as Microsoft.Office.Interop.Outlook.MailItem;
if (mailItem == null){
Console.WriteLine("ItemはMailItemではありません。");
return;
}
if (commandLineArgs == null){
commandLineArgs = null;
Console.WriteLine("コマンドライン引数が提供されていません。");
}
string mailTo = mailItem.To;
string mailCc = mailItem.CC;
string mailBCc = mailItem.BCC;
string deriverAddress;
if (mailTo == null){
mailTo = "";
}else{
mailTo = mailTo.Replace(";", "rn");
}
if (mailCc == null){
mailCc = "";
}else{
mailCc = mailCc.Replace(";", "rn");
}
if (mailBCc == null){
mailBCc = "";
}else{
mailBCc = mailBCc.Replace(";", "rn");
}
deriverAddress= mailTo + ";" + mailCc + ";" + mailBCc;
deriverAddress = deriverAddress.Replace(";", "rn");
Console.WriteLine (deriverAddress);
foreach (var recAddress in deriverAddress.Split(new[] { "rn" }, StringSplitOptions.RemoveEmptyEntries)){
foreach (var arg in commandLineArgs){
// 対象文字列
string targetString = recAddress.ToString();
// 除外対象文字列
string exclusionString = arg.ToString();
// 対象文字列に除外対象文字列が含まれているか確認
if (ContainsExclusion(targetString, exclusionString)){
MessageBox.Show("対象文字列に除外対象文字列が含まれています。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
Cancel = false;
return ;
}
}
}
}catch(System.Exception ex){
Console.WriteLine("例外: " + ex.Message);
Console.WriteLine("スタックトレース: " + ex.StackTrace); // スタックトレースを出力
Console.ReadLine();
}
}
Marshal.GetActiveObjectを使用して既に実行中のOutlookアプリケーションのインスタンスを取得します。これにより、アドインは既存のOutlookセッションに統合されます。ItemSend イベントは、Outlookがメールを送信する際にトリガーされます。このイベントは、送信されるメールアイテムを検査し、特定のロジックに基づいて処理を行います。MessageBoxを使用しています。したがって、GUI環境での実行が必要です。このOutlookアドインは、メール送信の過程で特定の条件に基づいてチェックを行い、誤ったメール送信を防ぐための有用なツールです。企業環境や個人のデータ保護において、このようなカスタムアドインは重要な役割を果たす可能性があります。