How to add images from resources folder as attachment and embed into outlook mail body in C#

前端 未结 2 926
难免孤独
难免孤独 2021-01-28 22:44

I have a couple of images stored in visual studio project Resources folder, and I have to load them and display on the outlook mail body. Here it is the code:

B         


        
相关标签:
2条回答
  • 2021-01-28 23:13

    Create an attachment and set the PR_ATTACH_CONTENT_ID property (DASL name "http://schemas.microsoft.com/mapi/proptag/0x3712001F") using Attachment.PropertyAccessor.

    Your HTML body (MailItem.HTMLBody property) would then need to reference that image attachment through the cid:

    img src="cid:xyz"

    where xyz is the value of the PR_ATTACH_CONTENT_ID property.

    Look at an existing message with OutlookSpy (click IMessage button).

    attachment = mailitem.Attachments.Add("c:\temp\MyPicture.jpg")
    attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001F", "MyId1")
    mailitem.HTMLBody = "<html><body>Test image <img src=""cid:MyId1""></body></html>"
    
    0 讨论(0)
  • 2021-01-28 23:23

    Maybe you can try this.

    string htmlBody = "<html><body><h1>Picture</h1><br><img src=\"cid:filename\"></body></html>";
     AlternateView avHtml = AlternateView.CreateAlternateViewFromString
        (htmlBody, null, MediaTypeNames.Text.Html);
    
    var fileName = Guid.NewGuid.ToString();
    var path = Path.Combine(
        Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)),
        fileName);
    File.WriteAllBytes(path, Properties.Resources.Pic);
    
     LinkedResource inline = new LinkedResource(path, MediaTypeNames.Image.Jpeg); //Jpeg or something
     inline.ContentId = Guid.NewGuid().ToString();
     avHtml.LinkedResources.Add(inline);
    
     MailMessage mail = new MailMessage();
     mail.AlternateViews.Add(avHtml);
    
     Attachment att = new Attachment(filePath);
     att.ContentDisposition.Inline = true;
    
     mail.From = from_email;
     mail.To.Add(data.email);
     mail.Subject = "Here is your subject;
     mail.Body = String.Format(
                "Here is the previous HTML Body" +
                @"<img src=""cid:{0}"" />", inline.ContentId);
    
     mail.IsBodyHtml = true;
     mail.Attachments.Add(att);
    
    1. No need to change your picture to memory stream
    2. For easy use, please do your content of e-mail to be HTML
    3. You can find in the code above

    You can refer to this link too

    0 讨论(0)
提交回复
热议问题