如何发送带有全局附件的邮件?
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 电子邮件