2016-08-09 101 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"/> `

相關問題