C#学习教程:从C#启动电子邮件应用程序(MAPI)(带附件)任何所需的MAPI电子邮件应用程序)。(类似于MicrosoftWord的发送电子邮件功能)。我需要在C#应用程序中做同样的事情,并让它在XP、Vista、Server2008(我认为是Windows7)上运行时运行。MAPISendMail在Vista/2008下是不可取的,因为它在Outlook运行时总是返回MAPI_E_FAILURE,并且托管代码不支持MAPI。即使检查了此修复程序:http://support.microsoft.com/kb/939718,我也无法让它可靠地工作。我知道MicrosoftWord和Adob??eReader9都可以在Vista下启动带附件的Outlook。一个AC#兼容的解决方案将是首选,但我会对任何有效的解决方案感到满意(不必使用MAPI)。我似乎找不到当前的“解决方案”。StackOverflow上的现有答案似乎也没有涵盖这一点。编辑:我知道MAPI和C#不能一起工作,所以我将使用在Vista和Server2008中运行的C/C++解决方案,而不是以管理员身份运行。请参阅Adob??eReader9和MicrosoftWord作为工作示例。在工作中,我们已经使用VSTO成功地做到了这一点。以下是我们使用Outlook2007在VISTA上运行的一些行的代码:(代码在VB.net中)。请注意,在对outlook对象执行某些操作时,使用会被安全锁定。(地址、文本和其他标记为安全风险的财产)。我们使用第三方组件(Redemption)来绕过此安全性。如果你不使用某种类型的安全管理器,outlook会弹出一些外部正在尝试访问它的弹出窗口,你可以暂时授予它访问权限。导入Outlook界面。ImportsOutlook=Microsoft.Office.Interop.Outlook这个例子是给你一些指导,而不是一个完整的工作例子。dimMailItemAsMicrosoft.Office.Interop.Outlook.MailItem'让我们初始化outlook对象'MailItem=OutlookSession.Application.CreateItem(Outlook.OlItemType.olMailItem)MailItem.To=mailtoMailItem.Subject=communication.SubjectMailItem.BodyFormat=Outlook.OlBodyFormat.olFormatHTMLMailItem.HTMLBody=htmlBodyMailItem.Attachments.Add(filename,Outlook.OlAttachmentType.olByValue)'如果将True提供给Display,它将作为模态并按顺序执行。'上述示例中的SafeMail.Display(True)OutlookSession来自此属性:PublicReadOnlyPropertyOutlookSession()AsOutlook.NameSpaceGetIfNotOutlookApplicationIsNothingThenReturnOutlookApplication.GetNamespace("MAPI")ElseReturnNothingEndIfEndGet结束属性如您所见,它正在使用MAPI。祝你好运。只要您只是在电子邮件中设置属性而不是阅读它们,您就不需要按照上面的建议兑换VB。这是一个简单的VB函数,用于在outlook中显示/发送带附件的电子邮件。(此代码引用MicrosoftOutlook12.0对象库,例如“C:\ProgramFiles\MicrosoftOffice\Office12\MSOUTL.OLB”)。SubDoMail()SetobjOL=CreateObject("Outlook.Application")SetobjNewMail=objOL.CreateItem(olMailItem)DimfilenameAsStringfilename="C:\temp\example.txt"WithobjNewMail.To="cjoy@spam_me_not。com".Subject="test".Body="TestBody".Attachments.Addfilename,Outlook.OlAttachmentType.olByValueEndWithobjNewMail.Display'objNewMail.SendEndSubBit技术含量低的方法,但是使用mailto处理程序你可以这样做System.Diagnostics.Process.Start("mailto:something@somewhere.com?subject=hello&attachment=c:\chicken.xls");注意:如前所述,这可能不适用于所有客户端,因为它不是mailtoURL规范的一部分。底线(至少在我看来)是Outlook2007不支持它,而旧版本支持。我不确定您是否需要在outlook中打开电子邮件,或者您是否只想发送一封带有c#附件的电子邮件。我知道您写了openinoutlook,但您可能认为这是唯一的方法。如果您只想发送带附件的电子邮件,您可以执行以下操作。#usingSystem.Net.Mail;SmtpClientsmtpClient=newSmtpClient(主机,端口);MailMessagemessage=newMailMessage(from,to,subject,body);附件attachment=newAttachment(@"H:attachment.jpg");message.Attachments.Add(附件);System.Net.NetworkCredentialSMTPUserInfo=newSystem.Net.NetworkCredential(用户名,密码);smtpClient.UseDefaultCredentials=false;smtpClient.Credentials=SMTPUserInfo;smtpClient.发送(消息);电子邮件服务器,您还可以执行C#代码通过Outlook发送电子邮件而无需身份验证位;没有安全警告。以上就是《C#学习教程:C#启动邮件应用程序(MAPI)》分享的全部内容(附附件)。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——varoutlook=newApplicationClass();MailItemmailItem=(MailItem)outlook.Session.Application.CreateItem(Outlook.OlItemType.olMailItem);mailItem.Display(false);本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理会员删除。如需转载请注明出处:
