送信されたメールの MailItem の受信者を記録する C# で簡単な Outlook プログラムを作成しています。それを構築するために、Outlook MailitemSend
イベントにフックしてRecipient
コレクションを取得します。また、Outlook のセキュリティ プロンプトを回避するために、 Redemption を使用していますSafeMailItem
。
コレクションを読むために、Recipient
私はに割り当てMailItem
てSafeMailItem
読んでいますRecipients
。ただし、変更が保存されていないRecipient
場合、コレクションは同じではありません。コレクションMailItem
をコピーするには、保存してから Redemption 経由でアクセスする必要があります。Recipient
MailItem
SafeMailItem
これが例です。
//event handler
void _MailItemSend(ref bool Cancel)
{
SafeMailItem safeMailItem = (SafeMailItem)Activator.CreateInstance(Type.GetTypeFromProgID(RDOCustomClasses.SafeMailItem));
SafeRecipients recipients = null;
safeMailItem.Item = mailItem; // Assigning original mailItem which getting sent by outlook without saving it (just compose & send email before it get autosaved by outlook or manually)
recipients = safeMailItem.Recipients
// If mailItem have unsaved changes safeMailItem.Recipients will be different.
recipients.Count != mailItem.Recipients.Count;
}
したがって、通話Save()
は理にかなっていると思いますが、何も変更しておらず、通話Save()
が別の問題を引き起こしています。Outlook を終了しようとすると、次のように表示されます。
保存されていない変更があります「変更を保存しますか」。
直接アクセスしようとしましたがMailitem.Recipients
(メールが送信される前に最新の保存されていない受信者リストがあります)、Outlook セキュリティ プロンプトが作成されます。償還を使用した場合、アクセスする前に保存するための呼び出しが必要であり、他の問題が発生します。
変更せずに安全な方法でOutlook送信メール受信者を受信するより良い方法はありますか? あなたの提案は高く評価されます。