链接的资源图片没有显示在Android电子邮件中的C#生成的电子邮件



我一直在与带有图像的HTML电子邮件作斗争。我让他们在桌面Thunderbird和Outlook上工作,但Android电子邮件显示了一个破碎的图像。

我知道它可以工作,因为用Outlook创建的电子邮件可以工作,并且与我正在创建的电子邮件结构非常相似。很明显,这不一样(否则我的就行了!(,但我看不出我缺少了什么。

我没有削减太多的代码,因为我希望有人会看到LinkedResource或AlternateResource的问题,但它可能会更大。

HTML视图中有一个图像标记,它可以在桌面上正常工作。它显示了Android上的替代文本,带有一个破损的图像图标。

如有任何帮助,我们将不胜感激。

bool SendEmail()
{
string fullBody = GenerateHeader() + Body + GenerateFooter();
string textBody = RemoveHTML(Body);
AlternateView avHtml = AlternateView.CreateAlternateViewFromString(fullBody, Encoding.UTF8, MediaTypeNames.Text.Html);
avHtml.TransferEncoding = TransferEncoding.QuotedPrintable;
MailMessage message = new MailMessage();
message.IsBodyHtml = true;
message.Subject = BaseSubject + Subject;
message.Body = textBody;
message.AlternateViews.Add(avHtml);
message.AlternateViews.Add(avText);
message.Headers.Add("Message-Id",
String.Format("<{0}@{1}>",
Guid.NewGuid().ToString(),
"company.com.au"));
var assembly = Assembly.GetExecutingAssembly();
string resourceName = "app.UI.EmbeddedItems.logo.png";
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
{
LinkedResource inline = new LinkedResource(stream, "image/png");
inline.ContentId = LogoId;
inline.ContentType.Name = "logo.png";
inline.ContentLink = new Uri("cid:" + inline.ContentId);
inline.TransferEncoding = TransferEncoding.Base64;
inline.ContentType.MediaType = "image/png";
avHtml.LinkedResources.Add(inline);

foreach (var addr in ToAddresses)
{
try
{
message.To.Add(addr);
}
catch (FormatException ex) // invalid email
{
error = ex.Message;
}
}
foreach (var att in Attachments)
{
message.Attachments.Add(att.ToAttachment());
}
if (message.To.Count > 0) // we actually added something
{
SmtpClient client = new SmtpClient();
try
{
client.Send(message);
return true;
}
catch (Exception exception)
{
error = exception.Message;
return false;
}
}
else
{
return true;
}
}
}
}
private string GenerateHeader()
{
var header = new StringBuilder();
header.Append("<html xmlns = 'http://www.w3.org/1999/xhtml'>n");
header.Append("<head>n");
header.Append("<meta content='en-au' http-equiv='Content-Language' />n");
header.Append("<meta content='text/html; charset=utf-8' http-equiv='Content-Type' />n");
header.Append("<title>Email Notification</title>n");
header.Append("</head>n");
header.Append("<body>n");
header.Append("<img id='").Append(LogoName).Append("' alt='Logo' src='cid:").Append(LogoId).Append("' />n");
return header.ToString();
}

问题不在于电子邮件的构造,而在于HTML本身。图像标签看起来像这样:

<img id='Logo.png' alt='Logo' src='cid:LogoId' />

这在桌面邮件客户端上运行良好,但不会在安卓邮件应用程序或安卓版谷歌邮件应用程序上显示图像。为了使它发挥作用,单引号需要替换为双引号。

这项工作:

<img id="Logo.png" alt="Logo" src="cid:LogoId" />

将GenerateHeader更改为在img标记中使用双引号而不是单引号解决了问题。对我来说毫无意义,但它有效。

最新更新