c++ - 使用客户的电子邮件应用程序发送带附件的电子邮件

标签 c++ qt email attachment mailto

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

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

我已经试过了:

  • 使用带有 attach(或 attachment)的 QDesktopServices::openUrl() 打开 mailto: 链接范围。但这些参数并不是协议(protocol)的正式组成部分,一些客户端(尤其是 Outlook)会忽略它们。
  • 使用 Base64 编码文件并将其添加为 mailto: 链接的 body 参数的一部分。但是 mailto 链接的长度会被一些电子邮件客户端(同样,尤其是 Outlook)截断,所以这不起作用。

当您从应用程序中发送图片时,Google Picasa 实现了这一点(至少在 Windows 上;尚未检查其他操作系统)。它创建带有附件和一些预填充文本的消息。然后,您可以编辑消息并在方便时发送。有什么想法他们是如何做到的吗?

最佳答案

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

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

Since EML files are created to comply with the industry RFC 822 standard, they can be used with most e-mail clients, servers and applications. Besides the Microsoft Outlook Express, EML files can be opened using most e-mail clients, such as Microsoft Outlook, Microsoft Entourage, Mozilla Thunderbird, Apple Mail, and IncrediMail.

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

关于c++ - 使用客户的电子邮件应用程序发送带附件的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4751953/

相关文章:

c++ - __stdcall 的优点/用途是什么?

c++ - 不稳定类型特征背后的原因是什么?

c++ - qwt plot曲线轴不可见

email - 从文本文件中提取电子邮件地址

c++ - QSqlQueryModel 使用和性能

c++ - 使用 libsodium 构建一个简单的项目

c++ - Qt中如何编辑XML文档的结尾(writeEndDocument)?

c++ - 读取文本文件的值并将值写入 QDoubleSpinBox

android - 在 android 中注册新的 mime 类型

c# - 使用 ELMAH 发送每日摘要电子邮件