【发布时间】:2023-01-31 15:30:24
【问题描述】:
如何在 C# Outlook 加载项开发中检测“Forward As Attatchment”事件。
我想在消息框中显示消息“您不能将此邮件作为附件转发”。
请注意,这不是 VSTO 应用程序。
【问题讨论】:
标签: c# outlook outlook-addin office-addins email-attachments
如何在 C# Outlook 加载项开发中检测“Forward As Attatchment”事件。
我想在消息框中显示消息“您不能将此邮件作为附件转发”。
请注意,这不是 VSTO 应用程序。
【问题讨论】:
标签: c# outlook outlook-addin office-addins email-attachments
有没有直接的场景或在 Outlook 中处理此类情况的简单方法。有几种方法可以作为可能的解决方法来处理这种情况。
这第一的可能的解决方案是处理 MailItem.Forward 事件,该事件在用户为项目选择 Forward 操作时触发,或者在为项目调用 Forward 方法时触发,该项目是父对象的实例。在事件处理程序中,您可以检查附加文件、显示消息框并在需要时取消操作。要处理项目级事件,您可以考虑创建一个检查器包装器(或项目包装器),您可以在其中正确设置事件处理程序,有关更多信息,请参阅Implement a wrapper for inspectors and track item-level events in each inspector。
这第二可能的解决方案是处理 Outlook 中 Application 类的 ItemSend 事件,您可以在其中处理所有外发电子邮件,而不仅仅是转发。
这第三解决方案是重新调整负责 Outlook 中操作的 UI 控件的用途。因此,您可以将默认操作替换为您自己的操作,或者只是在其前面添加您的自定义逻辑。有关详细信息,请参阅Temporarily Repurpose Commands on the Office Fluent Ribbon。
【讨论】:
即使(在IDispatch::Invoke 级别)当用户单击“作为附件转发”时,它会触发一个带有 0xF618 dispid 的事件。
如果使用 Redemption 是一个选项(我是它的作者),它会公开一个可取消的 SafeMailItem.OnForwardAsAttachment 事件:
private SafeMailItem _sItem;
private MailItem _oItem;
...
_oItem = _application.ActiveExplorer().Selection[1];
_sItem = new SafeMailItem();
_sItem.Item = _oItem;
_sItem.ForwardAsAttachment += OnForwardAsAttachment;
...
private void OnForwardAsAttachment(object Forward, ref bool Cancel)
{
MailItem newMessage = (MailItem)Forward;
if (OlSensitivity.olConfidential == _oItem.Sensitivity)
{
MessageBox.Show($"Confidential message '{_oItem.Subject}' cannot be forwarded");
Cancel = true;
}
else
{
newMessage.Subject = _oItem.Subject;
newMessage.Body = $"Please see the attached message '{_oItem.Subject}'.";
}
}
【讨论】: