2010-08-13 83 views
1

我正在编写一个需要使用MAPI发送电子邮件的c#.net应用程序。我正在使用以下库来实现此目的:http://www.codeproject.com/KB/IP/SendFileToNET.aspx 以下是我如何使用它的示例。windows live mail mapi支持

MAPI mapi = new MAPI(); 
mapi.AddRecipientTo("[email protected]"); 
int returncode = mapi.SendMailPopup("subject", "message"); 
if(returncode==0) 
{ 
MessageBox.Show("User sent message"); 
} 
else if (returncode==1) 
{ 
MessageBox.Show("User abort"); 
} 

这段代码打开上默认的邮件程序中的新的消息对话框,并应显示如果用户决定发送或中止发送电子邮件。

当使用Outlook意味着它弹出一个新的电子邮件对话框并返回正确的错误代码,例如用户决定不通过关闭消息对话框发送消息时,此代码工作正常。

问题是,当使用Windows邮件这不能正常工作。发送邮件对话框正确打开,应用程序暂停其在mapi.SendMailPopup上的执行,直到邮件对话框关闭。然而,无论用户做什么,mapi.SendMailPopup总是返回零。如果用户例如决定关闭消息对话框而不发送消息,则当正确的响应为1(用户中止)时,mapi.SendMailPopup返回0。

我的问题是应该的Windows Live Mail都需要这种MAPI的支持,如果没有谁能告诉我一些其他免费的Windows邮件客户端,将提供所需的MAPI的支持

+0

微软正在努力摆脱MAPI。这将是一种方法... – 2010-08-13 16:02:09

+0

有什么选择?我需要使用外部邮件程序从我的应用程序发送电子邮件。 – Jargo 2010-08-13 17:18:37

+0

如果您想通过那里管理邮件并利用它们在已发送邮件中,使用签名等或SMTP,则另一种方法是Outlook对象模型。 – 2016-02-08 11:47:55

回答

1

这是confusing--是.NET解决方案是SMAPI,而不是MAPI。我不确定SMAPI的返回值有多可靠,特别是因为返回值是从默认的MUA供应商的SMAPI实现中直接返回的,并且至少有十几个这样的结果。由于浏览器不使用返回值,而且它们是SMAPI的主要客户,所以我不会依赖它。

+0

你可以指点我一些更好的.net mapi实现。 – Jargo 2010-08-13 17:15:39

+0

我不确定还有什么。再说一遍,如果它的工作原理除了返回值,只要忽略返回值;除了日志以外,我不确定它会用到什么。 – 2010-08-15 12:52:43