gpt4 book ai didi

c# - 在MailMessage中添加Attachment base64图片,并在html body中读取

转载 作者:太空狗 更新时间:2023-10-29 19:59:25 24 4
gpt4 key购买 nike

目前我必须使用 MailMessageSmtpClient 发送电子邮件,但我需要发送一张当前在 base64 string 中的图片MailAddress 正文中。

我明白了需要把它放在Attachment中,但是我不知道如何把base64放在MailMessage中类,然后阅读它以可视化电子邮件正文中的图像。我没有 url 图片路径。

最佳答案

将正文 HTML 转换为 AlternateView 的完整方法

bodyHtml 示例(您可以将其传递到下面的MailMessage 代码块中)

<p>example</p>
<p><img src=\ "data:image/jpeg;base64,---base64string---"></p>
<p>example</p>
<p><img src=\ "data:image/png;base64,---base64string---"></p>
<p>something</p>

使用此方法,您可以通过许多 ESP(gmail、outlook 等)可视化多个图像

private static AlternateView ContentToAlternateView(string content)
{
var imgCount = 0;
List<LinkedResource> resourceCollection = new List<LinkedResource>();
foreach (Match m in Regex.Matches(content, "<img(?<value>.*?)>"))
{
imgCount++;
var imgContent = m.Groups["value"].Value;
string type = Regex.Match(imgContent, ":(?<type>.*?);base64,").Groups["type"].Value;
string base64 = Regex.Match(imgContent, "base64,(?<base64>.*?)\"").Groups["base64"].Value;
if (String.IsNullOrEmpty(type) || String.IsNullOrEmpty(base64))
{
//ignore replacement when match normal <img> tag
continue;
}
var replacement = " src=\"cid:" + imgCount + "\"";
content = content.Replace(imgContent, replacement);
var tempResource = new LinkedResource(Base64ToImageStream(base64), new ContentType(type))
{
ContentId = imgCount.ToString()
};
resourceCollection.Add(tempResource);
}

AlternateView alternateView = AlternateView.CreateAlternateViewFromString(content, null, MediaTypeNames.Text.Html);
foreach (var item in resourceCollection)
{
alternateView.LinkedResources.Add(item);
}

return alternateView;
}

将 Base64 转换为流:

public static Stream Base64ToImageStream(string base64String)
{
byte[] imageBytes = Convert.FromBase64String(base64String);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);
return ms;
}

设置邮件消息:

MailMessage mail = new MailMessage();
mail.IsBodyHtml = true;
AlternateView alterView = ContentToAlternateView(bodyHtml);
mail.AlternateViews.Add(alterView);
//more settings
//...
//////////////
SmtpClient smtp = new SmtpClient(Host, Port) { EnableSsl = false };
smtp.Send(mail);

关于c# - 在MailMessage中添加Attachment base64图片,并在html body中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39407474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com