C# 电子邮件中未呈现Base 64图像

C# 电子邮件中未呈现Base 64图像,c#,C#,下面的代码有什么问题。我正在尝试将内联图像放置到电子邮件中 public string SendEmail(SendEmail emailDetails) { var x = "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAN70lEQVR4Xu3d4XrbyA4D0OT9Hzr3c5u9cZPUc0aFRlKM/VsGBEGCHLvt9vXl5eXtpf+9vL2ZDK+vr0O1FGsINBGQ5CVYE9QuHXrrt

下面的代码有什么问题。我正在尝试将内联图像放置到电子邮件中

public string SendEmail(SendEmail emailDetails)
{
    var x =
        "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";

    var imageData = Convert.FromBase64String(x);
    var contentId = Guid.NewGuid().ToString();
    var linkedResource = new LinkedResource(new MemoryStream(imageData), "image/jpeg")
    {
        ContentId = contentId,
        TransferEncoding = TransferEncoding.Base64
    };

    var msg = string.Format("<p><label> Visitor's Name: {0}</lebel></p> " +
                            "<p><label> Person to Visit: {1} </lebel> </p>" +
                            "<p><label> Department Name: {2} </lebel> </p>" +
                            "<p><label> Schedule: {3} </lebel></p>" +
                            "<div>Present this image to the security guard <br /><img src=\"cid:{4}\" /></div>",
                            emailDetails.VisitorName, emailDetails.PersonToVisit, emailDetails.DepartmentName,
                            emailDetails.Schedule, contentId);

    string result;
    try
    {
        var htmlView = AlternateView.CreateAlternateViewFromString(msg, null, "text/html");
        htmlView.LinkedResources.Add(linkedResource);

        var mail = new MailMessage();
        var smtpServer = new SmtpClient("smtp.gmail.com");

        mail.From = new MailAddress("somename@gmail.com");
        mail.To.Add(emailDetails.EmailUsed);
        mail.Subject = "Itinerary Gate Pass";
        mail.Body = msg;
        //mail.IsBodyHtml = true;

        smtpServer.Port = 587;
        smtpServer.Credentials = new NetworkCredential("somename@sommail.com", "soemthing");
        smtpServer.EnableSsl = true;

        smtpServer.Send(mail);
        result = "Message was sent";
    }
    catch (Exception )
    {
        result = "Failed sending Email";
    }
    return result;
}

如果我在mail.Body=msg中放置断点;然后将msg的值复制到plnkr中,我得到带图像的格式化html。你能告诉我怎么做吗。谢谢。

电子邮件客户端将不会显示基本64幅图像

您必须通过将src设置为可通过internet访问的联机图像来显示图像

比如说

<img src="http://someurl/someimage.jpg" />
因此,如果你说,例如,在电子邮件中添加了一个名为logo.jpg的附件,你会这样做

<img src="cid:logo" />
现在您可以创建附件了

mail.Attachments.Add(New Attachment(New MemoryStream(bytes),attachmentName))

电子邮件客户端将不显示基本64图像

您必须通过将src设置为可通过internet访问的联机图像来显示图像

比如说

<img src="http://someurl/someimage.jpg" />
因此,如果你说,例如,在电子邮件中添加了一个名为logo.jpg的附件,你会这样做

<img src="cid:logo" />
现在您可以创建附件了

mail.Attachments.Add(New Attachment(New MemoryStream(bytes),attachmentName))

您必须附加图像,以便使用“cid”引用图像:

embedImage = File.ReadAllBytes(imagePath)
mail.Attachments.Add(New Attachment(New MemoryStream(embedImage), imageName))
mail.Attachments(0).ContentId = contentId
编辑:如果获取图像的唯一方法是作为Base64字符串,请尝试使用此。。。我想这行得通

embedImage = Convert.FromBase64String(x)

您必须附加图像,以便使用“cid”引用图像:

embedImage = File.ReadAllBytes(imagePath)
mail.Attachments.Add(New Attachment(New MemoryStream(embedImage), imageName))
mail.Attachments(0).ContentId = contentId
编辑:如果获取图像的唯一方法是作为Base64字符串,请尝试使用此。。。我想这行得通

embedImage = Convert.FromBase64String(x)


您似乎创建了htmlView作为备用视图,但似乎没有将其附加到消息中。我该怎么做?我应该将其放置在何处?注意:打开标签标签并用lebel关闭可能不是最好的主意。您似乎创建了htmlView作为备用视图,但似乎没有将其附加到邮件中。我该如何做?我应该把它放在哪里?注意:打开标签标签并用lebel结束可能不是最好的主意。他已经发布了试图使用您提到的第二个示例的代码。OP的问题是如何真正实现它。@m.rogalski,我回答了这个问题。这不可能使用base 64字符串。您需要附加一个物理文件。关于这一点,我想我的回答非常清楚。但我想我理解你的意思,他想知道如何将base64作为物理文件附件进行实际附加是的。对。作为物理附件或内联图像。好的,我更新了我的答案。您应该能够像现在这样转换为字节数组,然后创建一个附件。非常感谢!他已经发布了试图使用您提到的第二个示例的代码。OP的问题是如何真正实现它。@m.rogalski,我回答了这个问题。这不可能使用base 64字符串。您需要附加一个物理文件。关于这一点,我想我的回答非常清楚。但我想我理解你的意思,他想知道如何将base64作为物理文件附件进行实际附加是的。对。作为物理附件或内联图像。好的,我更新了我的答案。您应该能够像现在这样转换为字节数组,然后创建一个附件。非常感谢!什么是imagePath?我没有将图像保存在我的任何目录中。我直接将其发送到电子邮件uisng Base64。您不能将其作为服务器中的本地路径发送到电子邮件吗?我试图将Base64String中的图像转换为可查看的HTML。。。正如@user65439所说的那样,我遇到的唯一解决方案就是这个——它只是一个非常简单的二维码图像。如果可以的话,我不想把它放在我的目录中,因为它会很多。作为一种解决办法,你可以把它放在你的目录中,附加它,然后在发送电子邮件后删除它。。。如果没有,请尝试最后一次编辑imagePath是什么?我没有将图像保存在我的任何目录中。我直接将其发送到电子邮件uisng Base64。您不能将其作为服务器中的本地路径发送到电子邮件吗?我试图将Base64String中的图像转换为可查看的HTML。。。正如@user65439所说的那样,我遇到的唯一解决方案就是这个——它只是一个非常简单的二维码图像。如果可以的话,我不想把它放在我的目录中,因为它会很多。作为一种解决办法,你可以把它放在你的目录中,附加它,然后在发送电子邮件后删除它。。。如果没有,请尝试最后一次编辑