C# 如何在MVC.Net中通过邮件发送文件(URL)作为附件

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); 但这是

我有一个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);
但这是一个例外,因为不支持
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时,这才有意义。是的,这是我的第一个回答,但正如您正确地提到的,该链接仅供内部使用,其他人无权访问。这就是我寻找附件的原因。那时你将无法绕过下载它,但至少应该可以在运行时这样做,而无需在磁盘上持久保存临时文件(流式传输,结合使用)。经过一些小的修改后,上述方法解决了我的问题。应该有一个选项将评论标记为接受答案。:)