用例很简单。在某个时间点,我需要能够向用户展示他熟悉的撰写电子邮件对话框(Outlook 或其他)
- “发件人”、“收件人”、“主题”等字段已填充了某些应用程序确定的值。
- 该电子邮件还会附带一个附件。
除非用户明确同意,否则不应发送邮件。
我在 VB6 时代做过一次。现在不知道怎么做。我只记得这很简单。
托管应用程序、C#、.net 3.0+
Update#1:是的,似乎 mailto 删除了对附件的支持(作为安全风险?)。我试过
您需要包含 ShellExecute 签名如此处所述。我从中得到的只是 5SE_ERR_ACCESSDENIED
2 只是为了一些变化
string sMailToLink = @"mailto:[email protected]?subject=Hey&body= yeah yeah yeah";
IntPtr result = ShellExecute(IntPtr.Zero, "open", sMailToLink, "", "", ShowCommands.SW_SHOWNORMAL);
Debug.Assert(result.ToInt32() > 32, "Shell Execute failed with return code " + result.ToInt32());
相同的 MailtoLink 与 Process.Start 完美配合...但是只要你不提及附件.
System.Diagnostics.Process.Start(sMailToLink);
其他选项是使用 Outlook 对象模型来执行此操作。但我被告知,这需要您根据安装的 Outlook 的确切版本添加程序集引用。此外,如果用户不喜欢使用 MS 发送电子邮件,这种情况也会发生。
下一个选项是 Mapi 和一个叫做Mapi33.. 状态仍在进行中。仍愿意听取建议。