private static void Application_ItemSend(object item, ref bool cancel) { var confirmationWindow = new ConfirmationWindow(item as Outlook._MailItem); var dialogResult = confirmationWindow.ShowDialog(); confirmationWindow.Dispose(); if (dialogResult == DialogResult.OK) { //メールを送信。 } else { cancel = true; } }
private void Application_ItemSend(object item, ref bool cancel) { //MailItemにキャストできないものは会議招待などメールではないものなので、何もしない。 if (!(item is Outlook._MailItem)) { return; } //何らかの問題で確認画面が表示されないと、意図せずメールが送られてしまう恐れがあるため、念のための処理を入れておく。 try { var generateCheckList = new GenerateCheckList(); var checklist = generateCheckList.GenerateCheckListFromMail((Outlook._MailItem)item); //Outlook起動後にユーザが設定を変更する可能性があるため、毎回ユーザ設定をロード LoadSetting(); if (_language != "NotSet") { ResourceService.Instance.ChangeCulture(_language); } //送信先と同一のドメインはあらかじめチェックを入れるオプションが有効な場合、それをする。 if (_isAutoCheckIfAllRecipientsAreSameDomain) { foreach (var to in checklist.ToAddresses) { if (to.IsExternal) { continue; } to.IsChecked = true; } foreach (var cc in checklist.CcAddresses) { if (cc.IsExternal) { continue; } cc.IsChecked = true; } foreach (var bcc in checklist.BccAddresses) { if (bcc.IsExternal) { continue; } bcc.IsChecked = true; } } //送信禁止フラグの確認 if (checklist.IsCanNotSendMail) { //送信禁止条件に該当するため、確認画面を表示するのではなく、送信禁止画面を表示する。 //このタイミングで落ちると、メールが送信されてしまうので、念のためのTry Catch. try { MessageBox.Show(checklist.CanNotSendMailMessage, Properties.Resources.SendingForbid, MessageBoxButton.OK, MessageBoxImage.Error); } catch (Exception) { //Do Noting. } finally { cancel = true; } cancel = true; } //確認画面の表示条件に合致していたら else if (IsShowConfirmationWindow(checklist)) { //OutlookのWindowを親として確認画面をモーダル表示。 var confirmationWindow = new ConfirmationWindow(checklist, (Outlook._MailItem)item); var activeWindow = Globals.ThisAddIn.Application.ActiveWindow(); var outlookHandle = new NativeMethods(activeWindow).Handle; _ = new WindowInteropHelper(confirmationWindow) { Owner = outlookHandle }; var dialogResult = confirmationWindow.ShowDialog(); if (dialogResult == true) { //Send Mail. } else { cancel = true; } } else { //Send Mail. } } catch (Exception e) { var dialogResult = MessageBox.Show(Properties.Resources.IsCanNotShowConfirmation + Environment.NewLine + Properties.Resources.SendMailConfirmation + Environment.NewLine + Environment.NewLine + e.Message, Properties.Resources.IsCanNotShowConfirmation, MessageBoxButton.YesNo, MessageBoxImage.Warning); if (dialogResult == MessageBoxResult.Yes) { //SendMail } else { cancel = true; } } }