我需要创建一个.Net应用程序,它将发送邮件消息(带附件和可能的html格式),但不使用System.Net.Mail(我们不能要求用户SMTP详细信息)或Outlook(这适用于没有安装Outlook的PC。
我今天一直在研究MAPI,但它似乎只能通过创建一个C/C++ library and then using a .NET wrapper来实现,这在一个陌生的领域是很多工作。大多数示例代码和项目都很老,有些人一旦开始探索就依赖于SMTP服务器的详细信息。
是否有.net友好的解决方案,无需SMTP,Outlook或深入研究C ++和MAPI即可发送电子邮件?也许是第三方MAPI库?
答案 0 :(得分:2)
我找到了一种方法来避免上面提到的所有陷阱,但它并不精彩。这个article涵盖了所需要的内容,但根据您系统的设置,它似乎有点受损。
基本上,您必须使用System.Runtime.InteropServices来装饰StructLayout属性所需的各种类,以便在内存中正确处理它们。这允许您使用MAPI32.DLL SendMail函数:
<DllImport("MAPI32.DLL")> _
Private Shared Function MAPISendMail(ByVal sess As IntPtr,
ByVal hwnd As IntPtr, ByVal message As MapiMessage,
ByVal flg As Integer, ByVal rsv As Integer) As Integer
End Function
我已经开发了一些基于此的.NET代码,其中主要是有效,但从长远来看,managed code is simply not compatible with MAPI存在问题导致this follow up question。< / p>
答案 1 :(得分:0)
你好像是smtp http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol 这是THE EMAIL协议。
你必须使用smtp服务器。
答案 2 :(得分:0)
如果要发送邮件,则必须使用SMTP或其他邮件服务器 。您使用Outlook等电子邮件应用程序重定向邮件消息,后者又与最终使用SMTP传递邮件的Exchange进行通信,但是忽略了最终使用SMTP的事实。
您希望做到不可能:您不想依赖已安装的邮件应用程序(Outlook,Thunderbird),也不想连接到邮件服务器:那么您就无法发送邮件。
至于问题描述的这一部分:
我们不能要求用户SMTP详细信息
然后,您可以编写您托管的Web服务,这是您控制下的SMTP或Exchange服务器上的一个层。您编写此服务以接受来自应用程序的邮件消息,因此客户端可以在不知道底层传输或服务器配置的情况下调用它;他们需要知道的只是您服务的地址。
然后,您的应用程序可以向服务发送SendEmail()
请求,而无需在客户端配置SMTP服务器或Outlook连接。