2016-08-09 54 views
2

我正在使用SendGrid v3 API和C#库(v7)发送电子邮件。 在我的电子邮件中,我有一个标题,这是一个PNG。头部被嵌入这样的:SendGrid - 图像未显示在HTML电子邮件中

<img src="cid:emailheader"/> 

在C#代码我将图像作为附件与具有相同内容识别

变种邮件=新邮件(来自,主题,到,内容);

var headerPath = HttpContext.Current.Server.MapPath("~/Resources/email-header.png"); 

var attachment = new SendGrid.Helpers.Mail.Attachment(); 
attachment.ContentId = "emailheader"; 
attachment.Content = Convert.ToBase64String(File.ReadAllBytes(headerPath)); 
attachment.Type = "image/png"; 
attachment.Filename = "email-header.png"; 
mail.AddAttachment(attachment); 

var send = sg.client.mail.send.post(requestBody: mail.Get()); 

然而,当我打开它说的源文件未找到的电子邮件,即使图像正确显示在附件

enter image description here

+0

我认为你需要嵌入在HTML中邮件正文的图像,而不是做它作为附件。 –

+0

我想你需要设置内联处置'inline'时,附加它来与'cid'一起使用它。看到这里:https://github.com/sendgrid/sendgrid-csharp/blob/master/SendGrid/SendGrid/Helpers/Mail/Mail.cs#L990 –

回答

1

我不是为Sendgrid专家,但我在那里发现blog post ,这表明直接在你的html中进行内联编码。这样你就不需要添加附件。 (我用了很多)

<img alt="My Image" src="data:image/jpeg;base64,/9j/4S/+RXhpZgAATU0AKgA...more encoding" /> 

也许这是一个适合你的工作。

作为第二选择: 用于发送带有照片的电子邮件我使用

System.Net.Mail

我在这里做一个链接的资源添加AlternateView。

AlternateView htmlView = AlternateView.CreateAlternateViewFromString(html, null, "text/html"); 
LinkedResource imageResource = new LinkedResource(Imagepath + "Monitoring.png", "image/png") 
{ 
    ContentId = "1", 
    TransferEncoding = System.Net.Mime.TransferEncoding.Base64 
}; 
htmlView.LinkedResources.Add(imageResource); 
message.AlternateViews.Add(htmlView); 

在HTML语法是一样的,你用

<img src="cid:1"> 

我希望这帮助。 Butti

0

将图像嵌入到HTML正文中。 <html> <body> <img src="cid:emailheader"/> `

相关问题