链接资源不是作为内联图像 C#

Posted

技术标签:

【中文标题】链接资源不是作为内联图像 C#【英文标题】:linked resource does not come as inline image C# 【发布时间】:2015-08-22 19:23:44 【问题描述】:

我编写了下面的代码,将图像嵌入到从我的 c# 代码发送的邮件中。但是当我检查邮件时,我得到的图像像附件,而不是内联图像。 (Gmail)

AlternateView htmlBodyView = null;

string htmlBody = "<html><body><h1></h1><br><img src=\"cid:SampleImage\"></body></html>";

AlternateView plainTextView = AlternateView.CreateAlternateViewFromString(htmlBody, null, "text/html");

ImageConverter ic = new ImageConverter();
Byte[] ba = (Byte[])ic.ConvertTo(bitmap_obj, typeof(Byte[]));
using (MemoryStream logo = new MemoryStream(ba))

    LinkedResource sampleImage = new LinkedResource(logo, "image/jpeg");
    sampleImage.ContentId = "sampleImage";

    htmlBodyView.LinkedResources.Add(sampleImage);

    p.SendEmail(htmlBodyView);

【问题讨论】:

请在未来对代码进行格式化 - 检查预览以确保如果试图回答问题,它会显示出您想要阅读的方式。 当然......我会在我未来的所有问题/答案中这样做......非常感谢 试图找到明确的来源,所以这可能不是问题,但看起来 ContentId 区分大小写并且您使用了SampleImage / `sampleImage'。 tools.ietf.org/html/rfc2045 "参数值通常区分大小写," 对这个 SO 的回答可能会有所帮助:***.com/a/4697643/2181514 名称格式应该像电子邮件地址一样 - 但有很多示例并非如此 【参考方案1】:

作为参考,一个完整的工作简化示例:

    public void SendMail()
    
        LinkedResource logo = new LinkedResource(
            "images\\image005.png",                 //Path of file
            "image/png");                           //Mime type: Important!
        logo.ContentId = "logo";                    //ID for reference

        //Actual HTML content of the body in an 'AlternateView' object.
        AlternateView vw = AlternateView.CreateAlternateViewFromString(
            "Hello, this is <b>HTML</b> mail with embedded image: <img src=\"cid:logo\" />", 
            null, 
            MediaTypeNames.Text.Html);              //Mime type: again important!
        vw.LinkedResources.Add(logo);

        var msg = new MailMessage()  IsBodyHtml = true ;
        msg.AlternateViews.Add(vw);
        msg.From = new MailAddress("sender@domain.com");
        msg.To.Add(new MailAddress("reciever@domain.com"));
        msg.Subject = "HTML Mail!";
        using (var client = new SmtpClient("localhost", 25)) 
            client.Send(msg);
    

【讨论】:

以上是关于链接资源不是作为内联图像 C#的主要内容,如果未能解决你的问题,请参考以下文章

为网站使用内联/base64 图像比仅链接到硬文件快多少?

内联是不是确定内部链接?

Html.ActionLink 作为按钮或图像,而不是链接

模板类的方法是不是隐含内联链接?

C# 使用 SmtpClient 发送带有内联图像的邮件

C# 使用 SmtpClient 发送内联图像的邮件