如何发送带有全局附件的邮件?

Posted

技术标签:

【中文标题】如何发送带有全局附件的邮件?【英文标题】:How to send a mail with global attachments? 【发布时间】:2018-07-30 02:38:34 【问题描述】:
    using System;
    using System.IO;
    using System.Net;
    using System.Net.Mail;
    using System.Net.Mime;
    using System.Text;

    namespace AzureSendGridDemo
    
        class Program
        
            static void Main(string[] args)
            
                MailMessage msg = new MailMessage();
                msg.From = new MailAddress("FromAddress", "Name");
                msg.To.Add(new MailAddress("ToAddress", "Name"));
                msg.Subject = "Mail from Azure and SendGrid!";
                msg.Body = "This is just a simple test message!";
                msg.IsBodyhtml = true;
                msg.Attachments.Add("D:\image.jpg"); // if i put local path, it works.
                msg.Attachments.Add(new Attachment(@"https://images-na.ssl-images-amazon.com/images/I/71nTxKhiqrL._UL1500_.jpg")); // if i put global path it doesn't works. It shows some errors are shown below:  
//Sendgrid credentials for sending mail using smtpclient wrapper class.
                SmtpClient client = new SmtpClient("smtp.sendgrid.net", 587);
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.EnableSsl = true;
                client.UseDefaultCredentials = false;
                client.Credentials = new System.Net.NetworkCredential("Username", "Password");
                client.Send(msg);
                Console.Read();
            
        
    

如果我使用全局路径,它会在我的控制台应用程序中显示如下错误:

未处理的异常:System.NotSupportedException:不支持给定路径的格式。 在 System.IO.Path.GetFullPath(字符串路径) 在 System.IO.FileStream..ctor(字符串路径、FileMode 模式、FileAccess 访问、FileShare 共享、Int32 bufferSize、FileOptions 选项) 在 System.IO.FileStream..ctor(字符串路径、FileMode 模式、FileAccess 访问、FileShare 共享) 在 System.Net.Mail.AttachmentBase.SetContentFromFile(字符串文件名,字符串媒体类型) 在 System.Net.Mail.AttachmentBase..ctor(字符串文件名) 在 System.Net.Mail.Attachment..ctor(字符串文件名) 在 E:\SendGrid\AzureSendGridDemo\AzureSendGridDemo\Program.cs:line 41 中的 AzureSendGridDemo.Program.Main(String[] args) 按任意键继续 。 . .

【问题讨论】:

发帖前请注意格式... 什么是“全局路径”??? URL 不是可接受的文件流路径。您将不得不对图像进行网络请求并将生成的流放入附件中。 【参考方案1】:

那是因为您不能像附件一样将 URL 传递给电子邮件。

URL 是一个链接,您可以放在邮件正文中,或者您也可以使用 C# 的 WebClient 类下载文档并将其附加到电子邮件中。

【讨论】:

谢谢 polzka90【参考方案2】:

Attachment 构造函数没有允许您传递 url 字符串的重载。虽然有一个接受Stream,所以你可以做这样的事情......

var imageRequest = HttpWebRequest.Create("https://images-na.ssl-images-amazon.com/images/I/71nTxKhiqrL._UL1500_.jpg")
using (var imageStream = imageRequest.GetResponse().GetResponseStream())

    var x = new Attachment(imageStream, "image/jpeg");

【讨论】:

抱歉,我发送了一封带有附件的邮件,但是我无法预览该文件。五月,我知道原因了,为什么我无法打开那个文件 我收到此异常:未处理的异常:System.Net.Mail.SmtpException:发送邮件失败。 ---> System.ObjectDisposedException:无法访问已处置的对象。 感谢提问,我解决了这个问题,再次感谢

以上是关于如何发送带有全局附件的邮件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SmtpClient.SendAsync 发送带有附件的电子邮件?

如何使用 JavaMail 发送带有附件的 html 电子邮件

如何使用mailgun发送带有附件的批量/批量电子邮件?

如何使用带有附件的 PEAR Mail 包使用 PHP 发送电子邮件

如何使用 Qt 发送带有图像附件的电子邮件?

如何在 Android 中发送带有文件附件的电子邮件