如果Outlook已打开,则只能通过Outlook发送电子邮件
我想使用Outlook中的发送电子邮件,如此处所述。 只要我已经打开Outlook,它就可以正常工作。 因此,例如,如果Outlook被最小化并且我执行我的代码,那么我可以发送电子邮件就好了。 但如果Outlook关闭,那么我得到一个例外:
{System.Runtime.InteropServices.COMException (0x80004004): Operation aborted (Exception from HRESULT: 0x80004004 (E_ABORT)) at Microsoft.Office.Interop.Outlook._MailItem.get_Recipients() at OutlookExample.Form1.btnSendEmail_Click(Object sender, EventArgs e) in C:UsersabcDocumentsVisual Studio 2008ProjectsOutlookExampleOutlookExampleForm1.cs:line 28}
这是代码:
using Outlook = Microsoft.Office.Interop.Outlook; ... private void btnSendEmail_Click(object sender, EventArgs e) { try { Outlook.Application oApp = new Outlook.Application(); Outlook.MailItem oMsg = Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); oMsg.HTMLBody = "Hello, here is your message!"; oMsg.Subject = "This is a test message"; Outlook.Recipients oRecips = (Outlook.Recipients)oMsg.Recipients; Outlook.Recipient oRecip = (Outlook.Recipient)oRecips.Add("rhr@sonlinc.dk"); oRecip.Resolve(); oMsg.Send(); oRecip = null; oRecips = null; oMsg = null; oApp = null; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
为什么这不起作用?
编辑:这是解决方案
using Outlook = Microsoft.Office.Interop.Outlook; ... private void btnSendEmail_Click(object sender, EventArgs e) { try { Outlook.Application oApp = new Outlook.Application(); // These 3 lines solved the problem Outlook.NameSpace ns = oApp.GetNamespace("MAPI"); Outlook.MAPIFolder f = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); System.Threading.Thread.Sleep(5000); // test Outlook.MailItem oMsg = Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); oMsg.HTMLBody = "Hello, here is your message!"; oMsg.Subject = "This is a test message"; Outlook.Recipients oRecips = (Outlook.Recipients)oMsg.Recipients; Outlook.Recipient oRecip = (Outlook.Recipient)oRecips.Add("rhr@sonlinc.dk"); oRecip.Resolve(); oMsg.Send(); oRecip = null; oRecips = null; oMsg = null; oApp = null; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
以下代码可靠地为我工作了几个月:
app = new Microsoft.Office.Interop.Outlook.Application(); Microsoft.Office.Interop.Outlook.NameSpace ns = app.GetNamespace("MAPI"); f = ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox); Thread.Sleep(5000); // a bit of startup grace time.
如果outlook是开放的,它会使用它,如果不是它打开它。 当然,如果你的前景要求你登录,你的代码就不会允许。 某些系统使您难以自动登录。
我不喜欢使用Thread.Sleep 5秒的想法,所以我找到了另一个解决方案,对我有用:
您只需获取新创建的Inspector对象即可
Outlook.Application oApp = new Outlook.Application(); Outlook.MailItem oMsg = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); Outlook.Inspector oInspector = oMsg.GetInspector;
答案最初发布在最初用于Outlook 2007的Google群组中 (但它适用于Outlook 2010)
上述就是C#学习教程:如果Outlook已打开,则只能通过Outlook发送电子邮件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1015416.html