我正在使用带有Outlook对象模型的C#(由于授权,我不能使用赎回选项),并且在发送电子邮件之前,我很难以编程方式加密电子邮件。
我可以成功获得对CommandBarButton的引用,它应该代表加密按钮(根据在线示例的Id 718),但我不能以编程方式压缩它。我尝试使用CommandBarButton Execute()方法和使用SendKeys(不确定sendkeys在此上下文中是否有效)。所有debug.writeline语句都显示该按钮处于msoButtonUp状态。
我已经玩了好几天了,似乎无法让它发挥作用。任何建议将不胜感激!
Outlook.MailItem emailToSend;
...
Microsoft.Office.Core.CommandBarButton cbb = null;
cbb =(CommandBarButton)emailToSend.GetInspector.CommandBars["Standard"].FindControl(Type.Missing, 718, Type.Missing, true, false);
if (cbb != null) {
//it is not null in debugger
if (cbb.Enabled) {
//make sure digital signature is on
cbb.Visible = true;
Debug.WriteLine("State was: " + cbb.State.ToString()); //all debug calls return msoButtonUp
cbb.SetFocus();
SendKeys.SendWait("{ENTER}");
Debug.WriteLine("State was: " + cbb.State.ToString());
SendKeys.SendWait("~");
Debug.WriteLine("State was: " + cbb.State.ToString());
cbb.Execute();
Debug.WriteLine("State was: " + cbb.State.ToString());
}
}
答案 0 :(得分:2)
实际上,有一种更好的方法可以对编程进行加密,签名,加密+签名,或者两者都不保证。而且您无需显示邮件项即可完成。以下文章显示了如何使用邮件项的属性:
http://support.microsoft.com/kb/2636465?wa=wsignin1.0
例如,在C#中,如果mItem是您的邮件项目,则以下代码将关闭签名和加密:
mItem.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x6E010003", 0);
答案 1 :(得分:1)
通过反复试验弄清楚。主要问题似乎是我在显示MailItem之前使用了Inspector。在开头添加对Display的调用解决了它。对于任何感兴趣的人,这里有适合我的代码:
private static void addOutlookEncryption(ref Outlook.MailItem mItem) {
CommandBarButton encryptBtn;
mItem.Display(false);
encryptBtn = mItem.GetInspector.CommandBars.FindControl(MsoControlType.msoControlButton, 718, Type.Missing, Type.Missing) as CommandBarButton;
if (encryptBtn == null) {
//if it's null, then add the encryption button
encryptBtn = (CommandBarButton)mItem.GetInspector.CommandBars["Standard"].Controls.Add(Type.Missing, 718, Type.Missing, Type.Missing, true);
}
if (encryptBtn.Enabled) {
if (encryptBtn.State == MsoButtonState.msoButtonUp) {
encryptBtn.Execute();
}
}
mItem.Close(Outlook.OlInspectorClose.olDiscard);
}