Outlook自动化邮件应用报错:无法将object隐式转换为MailItem
问题解决:无法隐式转换object到MailItem
出现这个错误的核心原因是CreateItem方法返回的是通用object类型,而你直接将其赋值给MailItem类型变量,C#不允许这种隐式类型转换,必须显式指定转换类型。
修复方案
修改出错的代码行,添加显式类型转换:
MailItem mailItem = (MailItem)app.CreateItem(OlItemType.olMailItem);
如果希望更安全(避免转换失败引发异常),可以使用as运算符配合null检查:
MailItem mailItem = app.CreateItem(OlItemType.olMailItem) as MailItem; if (mailItem != null) { mailItem.Subject = "This is the subject"; mailItem.HTMLBody = "Body goes here"; mailItem.Display(false); }
原因说明
Outlook Interop库的CreateItem方法设计为返回object,因为它可以创建多种类型的Outlook项(邮件、日历事件、任务等),必须根据你传入的OlItemType,将返回值显式转换为对应的具体类型(比如这里的MailItem)。
修改后的完整代码
using Microsoft.Office.Interop.Outlook; using Outlookapp = Microsoft.Office.Interop.Outlook.Application; namespace Auto_Email { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Outlookapp app = new Outlookapp(); MailItem mailItem = (MailItem)app.CreateItem(OlItemType.olMailItem); mailItem.Subject = "This is the subject"; mailItem.HTMLBody = "Body goes here"; mailItem.Display(false); } } }
内容的提问来源于stack exchange,提问作者Yippiekaiaii
相关产品推荐
相关产品推荐

