使用客户端的电子邮件应用程序发送附件附件

时间:2011-01-20 20:02:44

标签: c++ qt email attachment mailto

我需要在本地安装的胖客户端应用程序(Qt / C ++)在客户端的计算机上生成可随时发送的电子邮件:

  • 此消息必须包含相对较小(15K - 200K)二进制文件的内容。
  • 我的许多用户在生成此邮件时都会断开连接,因此电子邮件可能需要在收件箱中停留,直到稍后。
  • 此应用程序将在Windows,Mac OS X和各种Linux发行版(Ubuntu / Debian和Fedora的官方支持)上运行,并且不要求需要安装特定的电子邮件客户端。

我已经尝试过了:

  • 使用mailto:(或QDesktopServices::openUrl())参数使用attach打开attachment链接。但这些参数并不是协议的正式部分,有些客户端(尤其是Outlook)会忽略它们。
  • 使用Base64对文件进行编码,并将其作为body链接的mailto:参数的一部分添加。但mailto链接的长度被某些电子邮件客户端(再次,尤其是Outlook)截断,因此这不起作用。

当您从应用程序中发送图片时,Google Picasa可以实现此功能(至少在Windows上;未检查其他操作系统)。它会创建一个包含附件和一些预填充文本的消息。然后,您可以编辑消息并在方便时发送。他们是如何做到的?

3 个答案:

答案 0 :(得分:7)

您可以创建.eml文件并打开它,只要在系统中注册了任何电子邮件客户端来处理具有此扩展名的文件,就可以为您提供所需的效果。我确信这不像mailto:方案那样普遍,但如果mailto:不适合你,我认为这可能是第二个尝试的最佳选择。

来自http://www.coolutils.com/Formats/EML

  

因为EML文件是为了遵守而创建的   符合行业RFC 822标准,   它们可以与大多数电子邮件一起使用   客户,服务器和应用程序。   除了Microsoft Outlook Express,   可以使用大多数EML文件打开   电子邮件客户端,例如Microsoft   Outlook,Microsoft Entourage,Mozilla   Thunderbird,Apple Mail和   的IncrediMail。

旁注
当我点击Picasa中的“电子邮件”时,我会在对话框中选择要发送电子邮件的应用程序(Thunderbird或Google Mail)。这意味着Picasa知道用于发送电子邮件的特定电子邮件客户端,并且可以使用特定于所选电子邮件客户端的自定义方法发送电子邮件。这当然只是猜测,但可能是Picasa让用户选择电子邮件客户端,因为没有通用的方法可以做你所要求的。

答案 1 :(得分:4)

我不认为你正在使用正确的方法;使用MAPI / C ++。我使用MAPI / C ++在Outlook / Thunderbird中多次完成此操作。您可以通过查询注册表来选择默认的电子邮件客户端;我认为这就是所有应用程序的功能。

另请参阅此处的链接http://lists.trolltech.com/qt-interest/2006-02/thread00861-0.html

答案 2 :(得分:1)

前段时间我开始编写一个小型库,以独立于平台的方式打开“默认电子邮件客户端”。它仍然可能需要一些工作,但您可以根据需要将其用作基础:https://github.com/picaschaf/qt-email