使用Outlook.Application C#发送邮件

时间:2013-09-30 09:57:30

标签: c# email outlook

我正在尝试从我的c#.net应用程序发送邮件,我已经使用了这段代码:

var mailItem = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
    mailItem.Subject = "Error Report from user: " + AuthenticationManager.LoggedInUserName;
    mailItem.HTMLBody = "Test email\n"+ReadSignature();
    mailItem.To = "test@test.com";
    mailItem.Display(true);

邮件未发送,但已添加到发件箱文件夹中。我怀疑邮件没有发送,因为outlook没有启动。所以我用Google搜索并想出了这个:

        var oApp = new Outlook.Application();

        Microsoft.Office.Interop.Outlook.NameSpace ns = oApp.GetNamespace("MAPI");
        var f = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);

        Thread.Sleep(5000); // a bit of startup grace time.

        var mailItem = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
        mailItem.Subject = "Error Report from user: " + AuthenticationManager.LoggedInUserName;
        mailItem.HTMLBody = "Test email\n"+ReadSignature();
        mailItem.To = "test@test.com";

        mailItem.Display(true);

但又一次它最终出现在发件箱文件夹中。我需要启动outlook,因为我无法在每个客户端application.config中指定FromMail属性。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您需要调用MailItem.Send方法:

mailItem.Send();

答案 1 :(得分:0)

尝试使用Namespace.SyncObjects集合或Namespace.SendAndReceive方法来启动同步。

请注意,邮件提交是一个异步过程,因此您需要保留对Namespace对象和SyncObject(如果您使用它)的引用,直到实际发送邮件为止。

答案 2 :(得分:0)

检查this answer是否有类似问题 - 它包含您不必使用

的解决方案
Thread.Sleep(5000)