Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C#程序读取Outlook邮件时如何避免Outlook安全警报_C#_Outlook - Fatal编程技术网

从C#程序读取Outlook邮件时如何避免Outlook安全警报

从C#程序读取Outlook邮件时如何避免Outlook安全警报,c#,outlook,C#,Outlook,我需要阅读C#程序中Outlook收件箱中新邮件的主题、发件人地址和邮件正文。但我收到了安全警报“一个程序正试图访问您存储在Outlook中的电子邮件地址。你想允许这样做吗 通过谷歌搜索,我发现几乎没有第三方COM库可以避免这种情况。但我正在寻找一种不需要任何第三方COM库的解决方案。对不起,我在Outlook 2003和Outlook 2007加载项中都遇到了这个恼人的问题,唯一有效的解决方案是购买许可证。在Outlook 2007中,仅当防火墙已关闭或防病毒软件已过时时,才会显示讨厌的弹出窗

我需要阅读C#程序中Outlook收件箱中新邮件的主题、发件人地址和邮件正文。但我收到了安全警报“一个程序正试图访问您存储在Outlook中的电子邮件地址。你想允许这样做吗


通过谷歌搜索,我发现几乎没有第三方COM库可以避免这种情况。但我正在寻找一种不需要任何第三方COM库的解决方案。

对不起,我在Outlook 2003和Outlook 2007加载项中都遇到了这个恼人的问题,唯一有效的解决方案是购买许可证。在Outlook 2007中,仅当防火墙已关闭或防病毒软件已过时时,才会显示讨厌的弹出窗口。

如果您的应用程序不是Outlook插件,您可以查看以从收件箱读取数据

工具-->宏-->安全-->编程访问

然后选择从不警告我可疑活动。

“但我正在寻找不需要任何第三方COM库的解决方案。”


你不会找到的。卡斯珀已经指出了我所知道的唯一解决办法。赎回是Outlook插件和代码能够正常工作的唯一原因。我为Franklin Covey制作了商业Outlook插件。我们探索了很多东西,但赎回是唯一让我们克服这一障碍的东西。

我在访问outlook邮件的发件人电子邮件地址时遇到了同样的问题。为避免“安全警报”,请不要创建新的应用程序对象,而是使用Globals.ThisAddIn.Application创建新的邮件项

string GetSenderEmail(Outlook.MailItem item)
    {
        string emailAddress = "";
        if (item.SenderEmailType == "EX")
        {
            Outlook.MailItem tempItem = (Outlook.MailItem)Globals.ThisAddIn.Application.CreateItem(Outlook.OlItemType.olMailItem);
            tempItem.To = item.SenderEmailAddress;
            emailAddress = tempItem.Recipients[1].AddressEntry.GetExchangeUser().PrimarySmtpAddress.Trim();

        }
        else
        {
            emailAddress = item.SenderEmailAddress.Trim();

        }

        return emailAddress;
    }

我们使用Mapilab中的。它是免费的,也可用于商业用途,并且仍然保持Outlook的安全性(只允许从已批准的应用程序进行访问)。仅适用于前面提到的解决方案,这些解决方案要么花钱,要么可能危及安全性

您可以使用Outlook的信任中心禁用安全弹出窗口。
检查。

不幸的事实是,Outlook有太多的滥用,微软将其锁定,并且没有提供解决方法。我想你可以尝试自己复制Redemption的功能,但我怀疑它的成本/收益能否超过200美元的许可证。事实上,与你需要提出类似Redemption的东西的时间相比,200美元算不了什么。我不知道你们的情况,但我在下面尝试了Kumar的答案(使用
oOutlookApp=Globals.ThisAddIn.Application
,而不是创建一个新的Outlook对象,它对我非常有效,你应该完全支持他的答案!:-)我支持亲吻原则。我找到了这根线,我们叫它吧。阅读所有关于奇特解决方案的文章。读这个。试过了,你知道什么。成功了。这就是我喜欢的那种简单的解决方案。我很幸运,我的客户使用了Outlook2007。并非所有早期的Outlook都有此选项。所有这些选项在my Outlook 2007中都被禁用。是因为我们有一台Exchange服务器吗?是否可以通过组策略或类似的方式进行设置?我在2003年没有看到编程访问。实际上,我已经能够自动“单击”此消息,以便用户不会注意到它(2003年和2007年)。在一个商业应用程序中。@Danbystrom:你是怎么做到的?@Jeff:骗Outlook相信“确定”按钮是由人按下的…@Danbystrom:你使用了SendKeys~之类的东西吗?因为Outlook中的对话框挂起了我的应用程序,所以我看不出它是否正常工作。我对你说的很感兴趣did@Jeff当前位置我不想透露太多:对话框出现是有原因的。我只是想指出,“你不会找到它”的答案是完全错误的。不要停止寻找。:-)以下是一些线索:对于Outlook挂起你的应用程序,在开始与Outlook对话之前,你需要启动一个后台线程来为你完成这项工作。至于SendKeys——不,Outlook比这更聪明,它会知道发生了什么。但是,还有其他一些常见的、有很好文档记录的API函数可以结合使用。如果您正在创建一个实际的outlook加载项(而不是正在访问outlook的外部应用程序),那么这就是正确的答案。进程内加载项不会触发警告对话框,只要它们只使用Outlook在启动时提供的应用程序对象(即,不创建新的应用程序对象)。回答非常好!我发现的绝大多数示例外接程序代码总是创建一个新的
应用程序
对象。这解决了很多问题D