我正在尝试从我的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属性。有什么想法吗?
答案 0 :(得分:3)
您需要调用MailItem.Send
方法:
mailItem.Send();
答案 1 :(得分:0)
尝试使用Namespace.SyncObjects集合或Namespace.SendAndReceive方法来启动同步。
请注意,邮件提交是一个异步过程,因此您需要保留对Namespace对象和SyncObject(如果您使用它)的引用,直到实际发送邮件为止。
答案 2 :(得分:0)
检查this answer是否有类似问题 - 它包含您不必使用
的解决方案Thread.Sleep(5000)