如何在asp.net中将图片显示在邮件中

7 浏览
0 Comments

如何在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);

0
0 Comments

如何在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中发送带有图像的邮件非常有用。

0
0 Comments

问题的原因是在发送邮件时,将图片作为附件添加到邮件中,但在邮件的内容中通过标签来引用图片时,图片无法正常显示。

解决方法是通过将图片以链接资源(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中将图片显示在邮件中。

0