【问题标题】:Send email without Outlook or System.Net.Mail不使用 Outlook 或 System.Net.Mail 发送电子邮件
【发布时间】:2013-10-28 09:46:03
【问题描述】:

我需要创建一个 .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 库?

【问题讨论】:

  • 是通过网络发送 SMTP 的问题吗?因为使用 SMTP 的方法不止一种。见deliveryMethodmsdn.microsoft.com/en-us/library/ms164240(v=vs.110).aspx
  • 不,问题是我被告知不能要求用户填写任何 SMTP 详细信息。
  • 您考虑过亚马逊简单邮件服务吗?

标签: .net email


【解决方案1】:

我找到了一种避免上述所有陷阱的方法,但它并不出色。这个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

【讨论】:

  • 在阅读了一些关于它的文档后,我部分纠正了。这可能确实有效,因为用户安装了与 Mapi 兼容的客户端(Outlook、Thunderbird)。
【解决方案2】:

你被混淆了 smtp 是http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol 那就是 EMAIL 协议。

您必须使用 smtp 服务器。

Send email using System.Net.Mail through gmail

【讨论】:

  • 如果安装了 Outlook,则完全有可能使用 Outlook 发送电子邮件,而 .NET 代码中没有任何 SMTP 详细信息。因此不需要直接使用 SMTP 服务器。
【解决方案3】:

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

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

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

我们无法询问用户 SMTP 详细信息

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

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

【讨论】:

  • 如果电子邮件是内部电子邮件并且公司正在使用 Exchange,则无需 SMTP 参与。我每天收到来自同事的 10 封电子邮件,这些都是通过 MAPI 完成的。
  • 显然 SMTP 服务器在某些时候是必要的,这是给定的。我已经编辑了这个问题,以便更准确地了解确切的要求。
  • 在这方面你是正确的,我认为 OP 想要向外界发送邮件。
  • @Clara 请解释您的实际问题。您想发送电子邮件,但不想使用电子邮件发送协议。解释原因。
  • @CodeCaster 请重新阅读已编辑的问题,我想不出一种更容易理解的方法,即我需要在不使用 System.Net.Mail 我们的 Outlook 的情况下从应用程序发送电子邮件。这个问题与 SMTP 服务器无关,这只是一个错误的路径。
猜你喜欢
  • 2013-04-02
  • 2012-08-20
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
相关资源
最近更新 更多