【问题标题】:Starting a new Outlook 2007 Message from C# .NET从 C# .NET 启动新的 Outlook 2007 消息
【发布时间】:2023-04-05 10:08:01
【问题描述】:

我正在寻找最简单的完整示例,启动 Outlook 2007 并通过 C# .NET 启动一条新消息(我碰巧使用的是 VS2008 .NET 3.0)

这是我正在尝试的:

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Interop.Outlook;

namespace CreateMessage {

    class Program {

        static void Main ( string[] args ) {

            // Create outlook application object.
            var outlookApplication = new Microsoft.Office.Interop.Outlook.Application();

            // Create mail message.
            var newMail = (Microsoft.Office.Interop.Outlook.MailItem)outlookApplication.CreateItem( Microsoft.Office.Interop.Outlook.OlItemType.olMailItem );
            newMail.To = "example@exam.ple";
            newMail.Subject = "Example";
            newMail.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatHTML;
            newMail.HTMLBody = "<p>Dear Example,</p><p>Example example.</p>";
            newMail.Display( false );

        }

    }
}

这是我的项目参考:

alt text http://img4.imageshack.us/img4/9350/referencesi.jpg

这是我得到的间歇性异常(大约是我运行程序的一半时间):

System.Runtime.InteropServices.COMException 未处理 Message="消息过滤器指示应用程序正忙。(来自 HRESULT 的异常:0x8001010A (RPC_E_SERVERCALL_RETRYLATER))" 来源="Interop.Microsoft.Office.Interop.Outlook" 错误代码=-2147417846 堆栈跟踪: 在 Microsoft.Office.Interop.Outlook._MailItem.set_To(字符串到) 在 C:\Users\Adam\Projects\GGS\CreateMessage\Program.cs:line 17 中的 CreateMessage.Program.Main(String[] args) 在 System.AppDomain._nExecuteAssembly(程序集程序集,字符串 [] 参数) 在 System.AppDomain.ExecuteAssembly(字符串 assemblyFile,证据 assemblySecurity,String [] args) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ThreadHelper.ThreadStart_Context(对象状态) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态) 在 System.Threading.ThreadHelper.ThreadStart() 内部异常:

注意:我找到了许多关于通过 Interop 使用 Outlook 的答案和示例,但大多数答案都没有显示 using 语句,或者试图在我所追求的下一个层次上做事.我只是想让 Outlook 打开,并开始一条新消息,并且可能填写了一些信息(即主题、收件人等)。复制和粘贴到目前为止我发现的任何示例都不会编译,因为它们是 sn-ps,而不是可以编译的功能齐全的准系统示例。

谢谢!

【问题讨论】:

    标签: c# .net visual-studio-2008 interop outlook


    【解决方案1】:

    我不确定您的问题,但您显示的错误消息表明您尚未添加程序集。为此,请展开您的项目,然后右键单击 References,然后选择“Add Reference...”。然后转到“COM”选项卡(无论如何在 VS2008 上)并找到“Microsoft Outlook 12.0 对象库”(具体版本在您的机器上可能会有所不同,具体取决于安装的 Outlook 版本。)突出显示它,然后单击确定。我认为这应该可以清除您的错误,并使您走上正确的道路。

    【讨论】:

    • 谢谢迈克尔。我添加了“Microsoft Outlook 12.0 对象库”,但仍然收到相同的编译错误消息:“找不到类型或命名空间名称‘Outlook’(您是否缺少 using 指令或程序集引用?)”跨度>
    • 好吧,我从您的编辑中推测您解决了编译问题...至于您的问题,当我使用您的代码创建一个新的 C# 项目时(我所做的只是剪切/粘贴)它可以正常工作很好...应用程序加载并在其后面打开一封带有指定参数的 Outlook 电子邮件。也许你应该重新开始,以防你在之前的尝试中搞砸了。
    • 感谢您的帮助迈克尔。我确实有 Interop 引用,但是使用完全限定的命名空间克服了我最初的错误。我现在遇到的问题是我更新的问题中显示的异常。新消息似乎在 Outlook 准备好之前就开始了,并引发了“应用程序忙”异常。 (这只发生在大约一半的时间,另一半的时间,样本成功执行并生成邮件。)
    猜你喜欢
    • 2011-06-06
    • 2010-10-08
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多