我使用SendGrid v3 API和C#库(v7)发送电子邮件。 在我的电子邮件中,我有一个标题,这是一个png。标头嵌入如下:
<img src="cid:emailheader"/>
在C#代码中,我将图像作为带有相同ContentId的附件发送
var mail = new Mail(from,subject,to,content);
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());
然而,当我打开电子邮件时,它说未找到来源,即使图像在附件中正确显示
答案 0 :(得分: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">
我希望这有帮助。 劳伦特
答案 1 :(得分:1)
将图像嵌入HTML正文中。
<html>
<body>
<img src="cid:emailheader"/>
“
`
答案 2 :(得分:1)
节点
//imageData= "data:image/png;base64,ine793nfdsf......."
imageb64 = imageData.replace('data:image/png;base64,' , '');
//remove data:image/png;base64,
const msg = {
to: 'example@gmail.com',
from: 'test@gmail.com',
subject: "image attached",
html :'<img src="cid:myimagecid"/>',
attachments: [
{
filename: "imageattachment.png",
content: imageb64,
content_id: "myimagecid",
}
]
};
sgMail.send(msg);