2

我需要创建一个 .Net 应用程序,它将发送邮件消息(带有附件和可能的 html 格式)但不使用 System.Net.Mail(我们不能询问用户 SMTP 详细信息)或 Outlook(这是用于 PC未安装 Outlook)。

我今天一直在研究 MAPI,但它似乎只能通过创建C/C++ 库然后使用 .NET 包装器来实现,这在一个不熟悉的领域需要做很多工作。周围的大多数示例代码和项目也相当陈旧,一旦您开始四处寻找,有些则依赖于 SMTP 服务器的详细信息。

是否有 .net 友好的解决方案可以在没有 SMTP、Outlook 或深入研究 C++ 和 MAPI 的情况下发送电子邮件?也许是第三方 MAPI 库?

4

3 回答 3

2

我找到了一种避免上述所有陷阱的方法,但它并不出色。本文介绍了所需的内容,但根据您的系统设置,它似乎有点命中注定。

基本上,您必须使用 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 代码,这些代码大部分都可以工作,但是从长远来看,托管代码与 MAPI 根本不兼容,这导致了这个后续问题

于 2013-10-28T14:39:22.663 回答
0

你很困惑 smtp 是http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol ,它是 EMAIL 协议。

您必须使用 smtp 服务器。

通过 gmail 使用 System.Net.Mail 发送电子邮件

于 2013-10-28T09:58:51.777 回答
0

如果您想发送邮件,SMTP 或其他邮件服务器是必不可少的。您使用 Outlook 等电子邮件应用程序重定向您的邮件消息,该应用程序反过来与 Exchange 对话,后者最终使用 SMTP 传递您的消息,这并没有忽略最终使用 SMTP 的事实。

你想做不可能的事:你不想依赖已经安装的邮件应用程序(Outlook、Thunderbird),也不想连接到邮件服务器:那么你就不能发送邮件。

至于你问题描述的这一部分:

我们不能询问用户 SMTP 详细信息

然后,您也许可以编写一个您托管的 Web 服务,它是您控制下的 SMTP 或 Exchange 服务器上的一个层。您编写此服务以接受来自您的应用程序的邮件消息,因此客户端可以在不知道底层传输或服务器配置的情况下调用它;他们只需要知道您的服务地址。

然后,您的应用程序可以向服务发送SendEmail()请求,而无需在客户端配置 SMTP 服务器或 Outlook 连接。

于 2013-10-28T10:05:28.867 回答