我希望能够创建带附件的电子邮件,但不能发送。 电子邮件应该在Outlook中打开,用户可以自己发送。
我一直在使用Mailto:命令来打开新邮件,但是,Outlook客户端似乎不支持使用Mailto:命令添加附件。
我不想用COM来做这件事。
有谁知道实现这个目标的方法?我认为没有COM可能是不可能的。
答案 0 :(得分:5)
如果要在Outlook中打开邮件,那么我很确定需要使用COM 。是否有任何特殊原因要与Outlook交互而不是使用SMTP和System.Net.Mail
命名空间自动发送?
编辑:顺便说一句,您似乎可以使用 mailto 链接指定附件。例如:
mailto:foo@bar.com?subject=foo&body=bar&attachment="C:/foo/bar.txt"
您是否尝试使用Outlook?但是,我仍然建议使用COM,因为它可以让您更好地控制使用Outlook和邮件进行操作。
答案 1 :(得分:4)
我能想到的围绕COM(或VSTO)的唯一方法是使用Outlook的命令行选项。使用Process.Start
,您可以使用 this answer (VonC)中描述的选项启动Outlook:
打开新邮件:
outlook.exe /c ipm.note
打开新邮件并填充 发件人:
outlook.exe /c ipm.note /m someone@example.com
使用打开新邮件 附件:
outlook.exe /c ipm.note /a filename
组合:
outlook.exe /c ipm.note /m someone@example.com&subject=test%20subject&body=test%20body
您可以从以下注册表项中检索Outlook的安装文件夹:
Outlook 2007:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Outlook\InstallRoot
Outlook 2003:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Outlook\InstallRoot
Outlook XP:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\10.0\Outlook\InstallRoot
答案 2 :(得分:1)
你已经在那里回答了 - 你可以通过COM(通过主互操作程序集)来完成,也可以直接通过SMTP发送(根本不会触及用户的电子邮件客户端)
答案 3 :(得分:0)
我不确定你是否可以将它链接到Outlook(我猜你必须使用MAPI),但System.Net.Mail很棒。
答案 4 :(得分:0)
您也可以将邮件保存到文件夹,而不是仅通过配置smtp设置发送
<system.net>
<mailSettings>
<smtp deliveryMethod="SpecifiedPickupDirectory">
<specifiedPickupDirectory pickupDirectoryLocation="c:\pickup-smtp\"/>
</smtp>
</mailSettings>
答案 5 :(得分:0)
易:
using Microsoft.Office.Interop.Outlook;
private void CreateMailItem()
{
Outlook.MailItem mailItem = (Outlook.MailItem)
this.CreateItem(Outlook.OlItemType.olMailItem);
mailItem.Subject = "This is the subject";
mailItem.To = Environment.UserName + "@example.com";
mailItem.Body = "This is the message.";
mailItem.Importance = Outlook.OlImportance.olImportanceLow;
mailItem.Display(false);
}