Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过C#WinForm发送邮件时出现奇怪的错误_C#_Winforms_Email - Fatal编程技术网

通过C#WinForm发送邮件时出现奇怪的错误

通过C#WinForm发送邮件时出现奇怪的错误,c#,winforms,email,C#,Winforms,Email,我有这个通过C#WinForm发送邮件的代码 我有以下参考: Microsoft.Office.Interop.Outlook (version 11.0) 我的代码: string sampleSource = System.Windows.Forms.Application.StartupPath + @"\TEST.txt"; string sampleDisplayName = "Test"; Microsoft.Office.Interop.Outlook.Application

我有这个通过C#WinForm发送邮件的代码

我有以下参考:

Microsoft.Office.Interop.Outlook (version 11.0)
我的代码:

string sampleSource = System.Windows.Forms.Application.StartupPath + @"\TEST.txt"; 
string sampleDisplayName = "Test";
Microsoft.Office.Interop.Outlook.Application sampleApp = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.MailItem sampleMessage = (Microsoft.Office.Interop.Outlook.MailItem)sampleApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
Microsoft.Office.Interop.Outlook.Recipient sampleRecipient = (Microsoft.Office.Interop.Outlook.Recipient)sampleMessage.Recipients.Add(sampleSource);
sampleRecipient.Resolve();
sampleMessage.Subject = "Test sub"
sampleMessage.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatHTML;
FinalMSG = "Test msg";
sampleMessage.HTMLBody = FinalMSG;
sampleMessage.To = "MyMail@gmail.com";
int samplePosition = (int)sampleMessage.Body.Length + 1;
int sampleType = (int)Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue;
Microsoft.Office.Interop.Outlook.Attachment sampleFile = sampleMessage.Attachments.Add(sampleSource, sampleType, samplePosition, sampleDisplayName);
sampleMessage.Save();
sampleMessage.Send();
sampleRecipient = null;
sampleFile = null;
sampleMessage = null;
sampleApp = null;
有时效果很好,有时我会出现以下错误:

正在检索具有CLSID的组件的COM类工厂 {0006F03A-0000-0000-C000-0000000000 46}由于以下原因失败 错误:80005

我用outlook 2010…2013…2016在电脑上试过了,同样的问题

找不到为什么有时有效,有时无效


谢谢

COM互操作失败有几个主要原因:

  • 应用程序未安装。这有点明显,但经常发生,值得一提。只有安装了Outlook,Outlook互操作才能工作
  • 客户端在不同的会话中运行,或在不同于主机的用户下运行。如果两者都只是简单的桌面应用程序,这应该不是问题,但您仍然可以使用任务管理器进行检查
  • COM服务器是32位的,而应用程序是64位的。同样,任务管理器很容易检查。将应用程序构建为32位,以允许正确的COM互操作。NET应用程序默认在任何CPU模式下运行—32位操作系统上为32位,64位操作系统上为64位。因此,在32位机器上一切都可以正常工作,但在64位Windows上会出现位不匹配

  • 出于好奇,您为什么要使用Outlook COM而不仅仅是
    System.Net.Mail
    库?如果您不介意使用System.Net.Mail,您可以使用以下线程作为参考:好的,我尝试一下它的工作原理。但如何将文件添加到此方法中?如何在不打开outlook的情况下发送邮件?@Gold:您可以通过SMTP发送邮件,您可以参考以下代码示例:谢谢您的帮助,我尝试了所有这些-但仍然存在相同的问题