C# 如何在MVC.Net中通过邮件发送文件(URL)作为附件
我有一个API,它给我一个文件的路径C# 如何在MVC.Net中通过邮件发送文件(URL)作为附件,c#,file,email,pdf,model-view-controller,C#,File,Email,Pdf,Model View Controller,我有一个API,它给我一个文件的路径http://bts.myurl.com/ThisIsMyPdf.pdf。 现在,我有一个按钮,点击“通过邮件向用户共享此文件”。这是我用来发送报告的代码: var filePath = "http://bts.myurl.com/ThisIsMyPdf.pdf"; Utilities.SendEmail("MyId@gmail.com", "subject", "To@gmail.com", "", "", "body", filePath); 但这是
http://bts.myurl.com/ThisIsMyPdf.pdf
。
现在,我有一个按钮,点击“通过邮件向用户共享此文件”。这是我用来发送报告的代码:
var filePath = "http://bts.myurl.com/ThisIsMyPdf.pdf";
Utilities.SendEmail("MyId@gmail.com", "subject", "To@gmail.com", "", "", "body", filePath);
但这是一个例外,因为不支持URI格式。
其他一些方法包括先下载文件,然后再作为附件发送,但我不希望它被下载
我相信还有其他方法可以实现这一点,如果有的话,请分享。正如@dlatikay所建议的,特此分享上述问题的工作代码
//This is the code get byte stream from the URL
WebClient myClient = new WebClient();
byte[] bytes = myClient.DownloadData("http://www.examle.com/mypdf.pdf");
System.IO.MemoryStream webPdf = new MemoryStream(bytes);
//To Create the Attachment for sending mail.
System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Application.Pdf);
Attachment attach = new Attachment(webPdf, ct);
attach.ContentDisposition.FileName = "myFile.pdf";
var smtp = new SmtpClient
{
Host = "email.domainName.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
})
{
//Here webpdf is the bytestream which is going to attach in the mail
message.Attachments.Add(new Attachment(webPdf, "sample.pdf"));
smtp.Send(message);
}
webPdf.Dispose();
webPdf.Close();
如果您不想在发送之前下载,最好的选择是将链接包含在邮件正文中,并让收件人用户自己下载。当然,只有当资源的使用寿命相当长,并且他们可以访问此URL时,这才有意义。是的,这是我的第一个回答,但正如您正确地提到的,该链接仅供内部使用,其他人无权访问。这就是我寻找附件的原因。那时你将无法绕过下载它,但至少应该可以在运行时这样做,而无需在磁盘上持久保存临时文件(流式传输,结合使用)。经过一些小的修改后,上述方法解决了我的问题。应该有一个选项将评论标记为接受答案。:)