如何在asp.net中将图片显示在邮件中
如何在asp.net中将图片显示在邮件中
遇到了通过电子邮件将图像作为嵌入式图像发送到正文中的问题。
图像文件显示为附件,这是可以的,但内嵌图像部分只显示为红色的 X。
以下是我目前的代码:
LinkedResource inline = new LinkedResource(filePath); inline.ContentId = Guid.NewGuid().ToString(); MailMessage mail = new MailMessage(); Attachment att = new Attachment(filePath); att.ContentDisposition.Inline = true; mail.From = from_email; mail.To.Add(data.email); mail.Subject = "客户:" + data.client_id + " 发送了一张截图"; mail.Body = String.Format( "客户:" + data.client_id + " 发送了一张截图
" + @"", inline.ContentId); mail.IsBodyHtml = true; mail.Attachments.Add(att);
如何在ASP.NET中将图像显示在邮件中
有时,我们需要在发送的电子邮件中显示图像。在ASP.NET中,我们可以使用以下代码将图像嵌入邮件中:
MailMessage mailWithImg = GetMailWithImg(); MySMTPClient.Send(mailWithImg); private MailMessage GetMailWithImg() { MailMessage mail = new MailMessage(); mail.IsBodyHtml = true; mail.AlternateViews.Add(GetEmbeddedImage("c:/image.png")); mail.From = new MailAddress("yourAddress"); mail.To.Add("recipient"); mail.Subject = "yourSubject"; return mail; } private AlternateView GetEmbeddedImage(String filePath) { LinkedResource res = new LinkedResource(filePath); res.ContentId = Guid.NewGuid().ToString(); string htmlBody = @""; AlternateView alternateView = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html); alternateView.LinkedResources.Add(res); return alternateView; }
在上述代码中,我们首先创建一个`MailMessage`对象,并设置`IsBodyHtml`属性为`true`,以确保邮件内容可以解析为HTML。然后,我们调用`GetEmbeddedImage`方法来获取嵌入的图像。在`GetEmbeddedImage`方法中,我们创建了一个`LinkedResource`对象,并将其添加到`AlternateView`对象中。然后,我们将`AlternateView`对象添加到`MailMessage`对象的`AlternateViews`集合中。最后,我们使用`MySMTPClient`发送邮件。
然而,有一些问题可能会出现,我们可以通过以下方法解决它们:
1. 为了在Hotmail/Outlook.com的Web客户端中正常工作,我们需要为`LinkedResource`添加MIME类型。可以使用以下代码:`LinkedResource inline = new LinkedResource(filePath, MediaTypeNames.Image.Jpeg);`
2. 如果不想将图像作为附件接收,可以将`LinkedResource`的ContentType设置为"image/bmp"。
3. 如果多次引用相同的资源,不需要手动释放资源,垃圾回收器会自动处理。
4. 为了避免在不同的邮件客户端中出现特殊字符的问题,可以通过定义HTML `AlternateView`的编码来解决。例如:`AlternateView.CreateAlternateViewFromString(htmlBody, Encoding.UTF8, MediaTypeNames.Text.Html);`
通过以上解决方法,我们可以在邮件中成功显示图像。这对于在ASP.NET中发送带有图像的邮件非常有用。
问题的原因是在发送邮件时,将图片作为附件添加到邮件中,但在邮件的内容中通过标签来引用图片时,图片无法正常显示。
解决方法是通过将图片以链接资源(LinkedResource)的形式添加到邮件中,并在邮件的内容中使用标签的src属性来引用该链接资源的ContentId。这样,当收件人打开邮件时,图片就可以正常显示了。
具体实现方法如下所示:
1. 在代码中创建一个LinkedResource对象,将图片的路径作为参数传入,并设置ContentId属性为一个唯一的标识符,例如"myImageID"。
2. 将该LinkedResource对象添加到AlternateView对象中。
3. 将AlternateView对象添加到MailMessage对象的AlternateViews集合中。
4. 在邮件的内容中使用标签,将src属性设置为cid:myImageID,其中"myImageID"即为步骤1中设置的ContentId的值。
5. 最后,通过SmtpClient对象发送邮件。
通过以上步骤,就可以在邮件中正常显示图片了。
完整的代码如下所示:
protected void Page_Load(object sender, EventArgs e) { string Themessage = @"<html> <body> <table width=""100%""> <tr> <td style=""font-style:arial; color:maroon; font-weight:bold""> Hi! <br> <img src=cid:myImageID> </td> </tr> </table> </body> </html>"; sendHtmlEmail("from.com", "tomailaccount", Themessage, "Scoutfoto", "Test HTML Email", "smtp.gmail.com", 25); } protected void sendHtmlEmail(string from_Email, string to_Email, string body, string from_Name, string Subject, string SMTP_IP, Int32 SMTP_Server_Port) { //create an instance of new mail message MailMessage mail = new MailMessage(); //set the HTML format to true mail.IsBodyHtml = true; //create Alrternative HTML view AlternateView htmlView = AlternateView.CreateAlternateViewFromString(body, null, "text/html"); //Add Image LinkedResource theEmailImage = new LinkedResource("E:\\IMG_3332.jpg"); theEmailImage.ContentId = "myImageID"; //Add the Image to the Alternate view htmlView.LinkedResources.Add(theEmailImage); //Add view to the Email Message mail.AlternateViews.Add(htmlView); //set the "from email" address and specify a friendly 'from' name mail.From = new MailAddress(from_Email, from_Name); //set the "to" email address mail.To.Add(to_Email); //set the Email subject mail.Subject = Subject; //set the SMTP info System.Net.NetworkCredential cred = new System.Net.NetworkCredential("fromEmail.com", "fromEmail password"); SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); smtp.EnableSsl = true; smtp.DeliveryMethod = SmtpDeliveryMethod.Network; smtp.UseDefaultCredentials = false; smtp.Credentials = cred; //send the email smtp.Send(mail); }
通过以上方法,可以在ASP.NET中将图片显示在邮件中。