我正在使用 sendgrid 在邮件中发送图像,但我不确定我的代码有什么问题。 这是我的代码:
string imgPath= Server.MapPath(@"~/Images/logo-img.png");
StringBuilder sb = new StringBuilder();
sb.Append("Hi There! I am using sendgrid to send images");
sb.Append("<a href='someurl'><img src='cid:myImage.png> Login in</a>");
LinkedResource lr = new LinkedResource(imgPath, "image/png");
lr.ContentId = "myImage";
AlternateView AV = AlternateView.CreateAlternateViewFromString(sb.ToString(), null, "image/png");
AV.LinkedResources.Add(lr);
var from = new EmailAddress("[email protected]");
var subject = "Hi There!";
var to = new EmailAddress("[email protected]");
var plainTextContent = "Hello";
var htmlContent = sb.ToString();
var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);
msg.SetFrom(from, "abc");
var sendingResult = SendMail(msg);
我不知道
LinkedResource
或 AlternateView
类的用途,但它们似乎不属于 Twilio SendGrid C# 库。
库文档中有一个用于发送附件的示例,但它没有显示如何处理电子邮件中的内容。但已经很接近了。关键是您需要加载要附加的文件并将其转换为 base64,然后使用
AddAttachment
方法将其作为内联附件添加到您的邮件中,并传递内容 ID (cid
),您可以请参阅邮件正文。比如:
string imgPath= Server.MapPath(@"~/Images/logo-img.png");
StringBuilder sb = new StringBuilder();
sb.Append("Hi There! I am using sendgrid to send images");
sb.Append("<a href='someurl'><img src='cid:myImage'> Login in</a>");
var bytes = File.ReadAllBytes(imgPath);
var file = Convert.ToBase64String(bytes);
var from = new EmailAddress("[email protected]");
var subject = "Hi There!";
var to = new EmailAddress("[email protected]");
var plainTextContent = "Hello";
var htmlContent = sb.ToString();
var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);
msg.SetFrom(from, "abc");
msg.AddAttachment("logo-img.png", file, "image/png", "inline", "myImage");
var sendingResult = SendMail(msg);
在此更新的代码中,重要部分是将文件加载为 base64:
var bytes = File.ReadAllBytes(imgPath);
var file = Convert.ToBase64String(bytes);
并将文件附加到消息中:
msg.AddAttachment("logo-img.png", file, "image/png", "inline", "myImage");
AddAttachment
方法需要5个参数:文件名、文件的base64内容、mime类型、内容配置(要引用HTML中的图像,您应该使用“内联”)和cid
。另请注意,cid
是您应该用来引用图像的整个字符串,因此如果图像cid
是“myImage”,那么您应该将其称为cid:myImage
,例如:
sb.Append("<a href='someurl'><img src='cid:myImage'> Login in</a>");
您将报价放在错误的位置:
sb.Append("<a href='someurl'><img src='cid:myImage.png'> Login in</a>");