自动通过Microsoft Outlook发送电子邮件

时间:2015-03-25 17:42:45

标签: c# outlook interop

我是C#的新手,我正在尝试通过以下代码自动从Outlook发送电子邮件,并且它在开发环境中运行良好。我希望它使用默认用户作为发件人,即使outlook未打开。

        private void EmailMessage(string recipient, string subject, string body)
    {
        Microsoft.Office.Interop.Outlook.Application application = new Microsoft.Office.Interop.Outlook.Application();
        Microsoft.Office.Interop.Outlook.MailItem email = (Outlook.MailItem)application.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);

        try
        {
            email.Subject = subject;
            email.Body = body;
            email.To = recipient;
            ((Outlook._MailItem)email).Send();
            _emailConfirmation = true;
        }

        catch (System.Runtime.InteropServices.COMException ex)
        {
            Logging.LogError("Trip Email Failed", ExceptionHelper.GetInnerMostException(ex));
            _emailConfirmation = false;
        }

        finally
        {
            //release the objects used to send email after message has been sent\\
            if (email != null)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(email);
            if (application != null)
                System.Runtime.InteropServices.Marshal.ReleaseComObject(application);
        }
    }

为所有用户分配了一个帐户,并为Outlook安装了有效的防病毒软件。我担心的是,当它上线时,它会在创建一个新的outlook实例或其他我没看到的东西时失败。你觉得这会对我打算在它上线时要完成的事情有效吗?

代码中没有错误,但是我看到很多人说你不应该直接创建outlook.application的实例。

https://msdn.microsoft.com/en-us/library/office/bb622502.aspx

我想我可能只是偏执狂,因为我之前从未使用过PIA

1 个答案:

答案 0 :(得分:0)

您的代码失败可能有两个主要原因:

  1. 您遇到安全问题。有关问题的更多信息以及缩小差距并抑制或避免此类问题的可能方法,请参阅Outlook "Object Model Guard" Security Issues for Developers。请注意,在某些情况下,对话框窗口不会显示给用户,您只是在代码中遇到异常。

  2. Office 2010的Click2Run版本不支持自动化。有关详细信息,请参阅Office 2010 Click-to-Run compatibility with add-ins。您也可以找到How to: Verify Whether Outlook Is a Click-to-Run Application on a Computer文章。

  3. 尝试使用“收件人”属性而不是“收件人”字段。然后使用Resolve或ResolveAll方法。有关详细信息,请参阅How To: Fill TO,CC and BCC fields in Outlook programmatically

    另外,我建议在代码中添加任何日志记录机制。因此,您可以分析日志文件并了解幕后发生的情况。例如,考虑使用log4net库。