NuGet MailKit - 将 MemoryStream 中的图像嵌入到正文中。不是文件位置

问题描述 投票:0回答:1

问题 - 我正在使用 MailKit 实用程序,需要将图像嵌入到我的 MailKit 消息的正文中。我还没有看到关于如何通过内存流完成此操作的示例或参考。我在资源文件中保存了一个文件,我想将其显示在电子邮件正文中而不是作为附件。

下面的工作如图所示,尽管有一个不需要的硬编码路径

using MailKit.Net.Smtp;
using MailKit;

public static List<MessageSet> MessageList = new List<MessageSet>();
    public static void SendErrorNotification(MONMessage message)  
    {
        var email = new MimeMessage();

        try
        {
            var supportImage = GetImageByName("support_image.jpg");

            var byteArray = BitmapToByteArray(supportImage);

            MemoryStream imageMemoryStream = new MemoryStream(byteArray);

            var validateMessage = MessageList.Where(m => m.MessageTime == message.MessageTime && m.MessageSetVal == message.MessageSet && m.MessageStatus == message.Status);

            if (validateMessage.Count() == 0)
            {
                email.From.Add(new MailboxAddress("Monitor", "[email protected]"));
                email.To.Add(new MailboxAddress("Lancair", "[email protected]"));

                email.Subject = "Environment Error Found - Please Review";

                var Name = message.Name == string.Empty ? message.Name : "N/A";

                var emailText = "<br><br>" + "The following error has occurred within the Data Environment" + "<br>"
                + "Time: " + message.MessageTime + "<br>"
                + " Database: " + message.DBName + "<br>"
                + " Name: " + Name + "<br>"
                + " Event Id: " + message.EventID + "<br>"
                + " Message: " + message.Text + "</b>";


                email.Body = new TextPart(MimeKit.Text.TextFormat.Html)
                {
                    Text = emailText
                };

                BodyBuilder _body = new BodyBuilder
                {
                    HtmlBody = email.Body.ToString(),
                };

                var image = _body.LinkedResources.Add("C:\\Personal\\support_image.png");
                image.ContentId = MimeUtils.GenerateMessageId();

                _body.HtmlBody = string.Format(@"<p>Hello Support</p><br><img src=""cid:{0}"">", image.ContentId) + _body.HtmlBody;

                email.Body = _body.ToMessageBody();

                // Add Message to Sent List
                MessageList.Add(new MessageSet { MessageTime = message.MessageTime, MessageSetVal = message.MessageSet, MessageStatus = message.Status });


                using (var smtp = new MailKit.Net.Smtp.SmtpClient())
                {
                    smtp.Connect("mymail.home.com", 0, false);

                    smtp.Send(email);
                    smtp.Disconnect(true);
                }

            }

                // Save Message   

            } catch (Exception ex) 
            { Debug.WriteLine(ex.Message); }                        

    }


public static Bitmap GetImageByName(string imageName)
{
    System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
    string resourceName = asm.GetName().Name + ".Properties.Resources";
    var rm = new System.Resources.ResourceManager(resourceName, asm);
    return (Bitmap)rm.GetObject(imageName);

}


public static byte[] BitmapToByteArray(Bitmap bitmap)
{

    BitmapData bmpdata = null;

    try
    {
        bmpdata = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, bitmap.PixelFormat);
        int numbytes = bmpdata.Stride * bitmap.Height;
        byte[] bytedata = new byte[numbytes];
        IntPtr ptr = bmpdata.Scan0;

        Marshal.Copy(ptr, bytedata, 0, numbytes);

        return bytedata;
    }
    finally
    {
        if (bmpdata != null)
            bitmap.UnlockBits(bmpdata);
    }

}
c# email smtp mailkit
1个回答
0
投票

替换此行:

var image = _body.LinkedResources.Add("C:\\Personal\\support_image.png");

这样:

var image = _body.LinkedResources.Add("support_image.png", imageMemoryStream);
© www.soinside.com 2019 - 2024. All rights reserved.