私の会社外の電子メールアドレスが受信者リストに混在しているかどうかをチェックするOutlook 2016(Office 365の一部)用の単純なVSTOアドインを書きました。 私はコード以下のように簡略化:VSTO Outlook Addin:Application_ItemSend引数の有償Itemオブジェクト
int countExternalAddress;
string externalAddresses;
string internalDomain=“@example.com”;
//indicates the email domain of our company, we use exchange server.
private void Application_ItemSend(object Item, ref bool Cancel)
{
countExternalAddress = 0;
externalAddresses="";
Outlook.MailItem item = (Outlook.MailItem)Item;
foreach (Outlook.Recipient recp in item.Recipients)
{
ConvertExchangeAddrToSMTPAddr(recp.AddressEntry.Address);
//by access ExchangeUser.PrimarySmtpAddress
CheckTheAddress(recp.AddressEntry.Address);
}
if (countExternalAddress > 0)
{
Warn();
}
}
コードは、ほとんどの時間、問題なく動作しますが、いくつかの回は()関数は(の一部)に基づいて警告を示しLAST電子メールの受信者に警告し、ないCURRENT 1。 問題はすべての時間を再生することはできないが、それが発生した場合、手順は以下のようである:(私の同僚、為替アドレス)
- は、内部の受信者に電子メールを送信し、交換アドレスが成功し、SMTPアドレスに変換され、それらは「内部」アドレスとして予め定義されているため、警告なしにメールが送信されます。
他の内部の受信者に別の電子メールを送信すると、プログラムは「外部アドレス混在」の警告を表示し、「外部」アドレスは以前に送信された電子メール(上記1で言及されています。検出された外部アドレスは、SMTP形式に変換されるはずのExchangeアドレス形式になっています。 奇妙なことに、現在のメールの受信者リストにアドレスが見つかりません。 現在の電子メールを保存してOutlookを再起動した場合、保存した電子メールを選択して再送信しようとすると、そのような「外部」アドレスは再び検出されません。
ItemSendイベントで渡されたItemオブジェクトには、現在の電子メールに属するだけでなく、以前に送信された受信者も含まれているようですが、現在の電子メールには表示されません。送信された電子メールの受信者も同様です。 私が使用している仕事用PCにはデバッグ環境がないので、意味が不足しています。事前に感謝してください。
インストール後に.vstoファイルを削除したことに関連していますか? dllファイルはインストール後にappdata/appにコピーされるので、.vstoファイルはもう役に立たないと思います。 –