Outlook 外接程序开发:阻止转发邮件'As Attatchment'



如何在c# Outlook插件开发中检测'转发为附件'事件。

我想在消息框中显示"您不能将此邮件作为附件转发"的消息。

请注意,这不是VSTO应用程序。

在Outlook中没有直接的场景或简单的方法来处理这种情况。有几种方法可以作为可能的变通方法来处理这种情况。

第一个可能的解决方案是处理MailItem。Forward事件,当用户为项目选择Forward动作时触发,或者当为项目调用Forward方法时触发,这是父对象的一个实例。在事件处理程序中,您可以检查附加文件,显示消息框并根据需要取消操作。要处理项目级事件,你可以考虑创建一个检查器包装器(或项目包装器),在那里你可以正确地设置事件处理程序,更多信息请参见实现检查器包装器并跟踪每个检查器中的项目级事件。

第二个可能的解决方案是处理Outlook中Application类的ItemSend事件,您可以处理所有传出的电子邮件,而不仅仅是转发。

第三个解决方案是重新使用负责Outlook操作的UI控件。因此,您可以用自己的操作替换默认操作,或者只是在它前面加上自定义逻辑。有关详细信息,请参阅Office Fluent功能区中的临时重新使用命令。

Outlook Object Model没有显式地(通过它的类型库/互操作,可以导入到Visual Studio中使用)暴露OnForwardAsAttachment事件(仅Reply/ReplyAll/Forward事件),即使(在IDispatch::Invoke级别)当用户单击"转发为附件"时,它会触发一个具有0xF618dispid的事件。

如果使用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}'.";
}
}

最新更新