使用 mailto 发送带有附件的电子邮件

using mailto to send email with an attachment

提问人:Benchik 提问时间:3/8/2011 最后编辑:BalusCBenchik 更新时间:10/26/2023 访问量:168568

问:

如何使用 Outlook 2010 发送带有附件(本地文件或 Intranet 中的文件)的电子邮件?

<a href="mailto:[email protected]?subject=my report&body=see attachment&attachment=c:\myfolder\myfile.txt">

似乎不起作用。

[html]

评论


答:

116赞 Pekka 3/8/2011 #1

不,这根本不可能。协议中没有对此作出规定,如果可能的话,这将是一个巨大的安全漏洞。mailto:

发送文件,但让客户发送我能想到的电子邮件的最佳想法是:

  • 让用户选择一个文件
  • 将文件上传到服务器
  • 让服务器在上传后返回一个随机文件名
  • 在邮件正文中构建一个链接,其中包含指向已上传文件的 URLmailto:

评论

0赞 Benchik 3/8/2011
在这种情况下,我认为我可以使用apache commons。
1赞 ejectamenta 11/26/2014
不错,但是服务器上会有一个所有用户文件所在的位置,需要不时以某种方式进行清理。也许这种方法可以做到这一点
7赞 jpa 8/18/2020
显然,Thunderbird 和其他一些客户在 2019 年 12 月之前一直支持:nds.ruhr-uni-bochum.de/media/nds/veroeffentlichungen/2020/08/15/......但现在它被删除了,原因很明显。?attach=...
0赞 RokeJulianLockhart 9/24/2023
@jpa,相关:bugzilla.mozilla.org/show_bug.cgi?id=1613425#c0
0赞 david_adler 11/23/2023
安全漏洞是什么?假设文件数据必须进行 URI 编码
-16赞 John Smith 6/14/2013 #2

这个呢

<FORM METHOD="post" ACTION="mailto:[email protected]" ENCTYPE="multipart/form-data">
Attachment: <INPUT TYPE="file" NAME="attachedfile" MAXLENGTH=50 ALLOW="text/*" >
 <input type="submit" name="submit" id="submit" value="Email"/>
</FORM>

评论

8赞 Dan Fox 6/4/2014
在jsfiddle上尝试过...它只是打开一个电子邮件对话框,并用 .它不附加任何数据。attachedfile=filename.ext&submit=Email
0赞 esdebon 11/13/2019
作品,引用的文件将文件附加到客户端中
2赞 Boopathi.Indotnet 3/2/2017 #3

这在“mailto”功能中是不可能的。

请使用服务器端编码(C#).make sure open vs in administrative permission.

Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.MailItem oMsg = (Microsoft.Office.Interop.Outlook.MailItem)oApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);

oMsg.Subject = "emailSubject";
oMsg.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatHTML;
oMsg.BCC = "emailBcc";
oMsg.To = "emailRecipient";

string body = "emailMessage";

oMsg.HTMLBody = "body";              
oMsg.Attachments.Add(Convert.ToString(@"/my_location_virtual_path/myfile.txt"), Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue, Type.Missing, Type.Missing);

oMsg.Display(false); //In order to displ

评论

0赞 Boopathi.Indotnet 3/2/2017
我尝试过使用mailto功能,但是不可能的,所以我尝试了上面的代码来实现这一点。
2赞 Zack 9/5/2019
在服务器上使用 Microsoft Office 自动化不是有问题吗?
-2赞 AlexDev 9/5/2019 #4

如果您在桌面上使用 c#,则可以使用 SimpleMapi。这样,它将使用默认邮件客户端发送,并且用户可以选择在发送之前查看邮件,就像 .mailto:

若要使用它,请添加 Simple-MAPI.NET 包(13Kb),然后运行:

var mapi = new SimpleMapi();
mapi.AddRecipient(null, address, false);
mapi.Attach(path);
//mapi.Logon(ParentForm.Handle);    //not really necessary
mapi.Send(subject, body, true);

评论

4赞 Dov Miller 2/2/2020
问题被标记为 HTML。据我所知,Mapi 不能从网页中使用。请参阅此链接 stackoverflow.com/questions/12234916/...
1赞 AlexDev 2/3/2020
@DovMiller 是的,它仅适用于桌面应用程序。如果您确实需要从 Web 应用程序打开 Outlook,您可以尝试 stackoverflow.com/questions/35229240/...但是,如果您只需要发送电子邮件,那么您发送的链接就有更好的解决方案。