C# 发送带有内联图像的电子邮件时出现问题
我正试图在我的电子邮件中发送一个内联图像,它显示得很好,但我收到的不是仅仅显示图像,而是与附件相同的图像。我如何让它只是有一个内联的电子邮件,而不是有一个单独的附件 这是我的密码:C# 发送带有内联图像的电子邮件时出现问题,c#,email-attachments,C#,Email Attachments,我正试图在我的电子邮件中发送一个内联图像,它显示得很好,但我收到的不是仅仅显示图像,而是与附件相同的图像。我如何让它只是有一个内联的电子邮件,而不是有一个单独的附件 这是我的密码: public async static Task SendMail(string emailAccount, string sendTo, string message, string subject, string imgpath) { try {
public async static Task SendMail(string emailAccount, string sendTo, string message, string subject, string imgpath)
{
try
{
string internalEmail = emailAccount;
string emailPassword = ConfigurationManager.AppSettings["EmailPassword"];
string displayName = "Church Musician Team";
MailMessage myMessage = new MailMessage();
myMessage.To.Add(sendTo);
myMessage.From = new MailAddress(internalEmail, displayName);
myMessage.Subject = subject;
string attachmentPath = imgpath;
Attachment inline = new Attachment(attachmentPath);
inline.ContentDisposition.Inline = true;
inline.ContentId = "id1";
inline.ContentType.MediaType = "image/png";
myMessage.Attachments.Add(inline);
myMessage.Body = message;
myMessage.IsBodyHtml = true;
using (SmtpClient smtp = new SmtpClient())
{
smtp.EnableSsl = false;
smtp.Host = ConfigurationManager.AppSettings["EmailHost"];
smtp.Port = Convert.ToInt32(ConfigurationManager.AppSettings["EmailPort"]);
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential(internalEmail, emailPassword);
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.SendCompleted += (s, e) => { smtp.Dispose(); };
await smtp.SendMailAsync(myMessage);
}
}
catch (Exception ex)
{
throw ex;
}
}
您可以使用以下方法将位图数据嵌入到主体中:
public static string BmpToUrl(Bitmap source)
{
return $"data:image/png;base64,{Convert.ToBase64String((byte[]) (new ImageConverter()).ConvertTo(source, typeof(byte[])))}";
}
然后,无论你想把它放在身体的什么地方,使用:
...
body += $"<img src='{BmpToUrl(myBitmap)} />"
...
。。。
正文+=$“”
...
这样你就不需要有一个单独的附件
诚然,我从来没有在电子邮件中这样做过,但我相信它应该会起作用。您可以使用以下方法将位图数据嵌入到身体中:
public static string BmpToUrl(Bitmap source)
{
return $"data:image/png;base64,{Convert.ToBase64String((byte[]) (new ImageConverter()).ConvertTo(source, typeof(byte[])))}";
}
然后,无论你想把它放在身体的什么地方,使用:
...
body += $"<img src='{BmpToUrl(myBitmap)} />"
...
。。。
正文+=$“”
...
这样你就不需要有一个单独的附件
诚然,我从来没有在电子邮件中这样做过,但我相信它应该会起作用。这确实帮助了我。非常感谢你!这真的帮助了我。非常感谢你!谢谢你的详细回复!如果你有一个电子邮件模板,你怎么能做到这一点?是否要将其放入模板中,还是必须放入方法中?这就是为什么我试着用我的问题中的另一种方式做它的原因,因为它允许我直接将它放在我的模板中。你可以将它直接放在模板中。你只需要捕获位图的Base64编码字符串表示形式,这样你就可以将它嵌入模板中。我刚刚实现了你的答案,并意识到了这一点已经有一个名为LinkedResource的类为您执行此操作。Chetan Ranpariya为此发布了一个很好的链接。您的答案是正确的,但它实际上是链接资源的一部分。谢谢你的帮助:)谢谢你的详细回复!如果你有一个电子邮件模板,你怎么能做到这一点?是否要将其放入模板中,还是必须放入方法中?这就是为什么我试着用我的问题中的另一种方式做它的原因,因为它允许我直接将它放在我的模板中。你可以将它直接放在模板中。你只需要捕获位图的Base64编码字符串表示形式,这样你就可以将它嵌入模板中。我刚刚实现了你的答案,并意识到了这一点已经有一个名为LinkedResource的类为您执行此操作。Chetan Ranpariya为此发布了一个很好的链接。您的答案是正确的,但它实际上是链接资源的一部分。谢谢你的帮助:)