Как скрыть встроенные изображения из почтового вложения в c# - PullRequest
0 голосов
/ 07 мая 2020

Я использую LinkedResource для отправки встроенных изображений. Если я отправляю одно изображение, оно работает нормально, но если я отправляю два или более встроенных изображения, SMTP отправляет как встроенные изображения, так и вложение.

Если я удалю добавление вложения, изображения будут недоступны во входящих.

Как скрыть встроенное изображение из вложения, есть идея?

Вот мой код

public void SendEmailWithImageTo(string subject, string toMail, string decrypt, List<string> imageNames, Template template, List<UploadFile> UploadFiles = null)
        {

            this.FromMail = new MailAddress(this.MailUser, this.DisplayName);
            List<MailImageModel> mailImageModels = new List<MailImageModel>();
            AlternateView avHtml;
            LinkedResource inline;
            Attachment att;




            string mailBodyForInfoFormat = "";
            string tempTemplate = template.HtmlContent;
            tempTemplate = string.Format(tempTemplate, decrypt);

            foreach (var item in imageNames)
            {

                string path = $@"{HttpRuntime.AppDomainAppPath}\Image\MailingImage\{item}";

                avHtml = AlternateView.CreateAlternateViewFromString(tempTemplate, null, MediaTypeNames.Text.Html);

                if (item.Contains("png"))
                {
                    inline = new LinkedResource(path);
                    inline.ContentType =new ContentType("image/png");
                }
                else if (item.Contains("gif"))
                {
                    inline = new LinkedResource(path, MediaTypeNames.Image.Gif);
                }
                else
                {
                    inline = new LinkedResource(path, MediaTypeNames.Image.Jpeg);
                }


                inline.ContentId = "MyPic";
                avHtml.LinkedResources.Add(inline);
                att = new Attachment(path);

                att.ContentDisposition.Inline = true;


                tempTemplate = tempTemplate.Replace("{", "{{").Replace("}", "}}");
                mailBodyForInfoFormat = string.Format(tempTemplate, att.ContentId);

                MailImageModel mailImageModel = new MailImageModel
                {
                    AttachPath = path,
                    AlternateView = avHtml
                };

                mailImageModels.Add(mailImageModel);

            }


            mailBodyForInfoFormat = mailImageModels.Count > 0 ? mailBodyForInfoFormat : tempTemplate;





            using (MailMessage mm = new MailMessage())
            {
                mm.From = this.FromMail;

                mm.Subject = subject;
                mm.Body = mailBodyForInfoFormat;
                mm.IsBodyHtml = true;
                mm.To.Clear();
                mm.Bcc.Clear();
                mm.CC.Clear();

                mm.To.Add(toMail);

                SmtpClient smtp = new SmtpClient();

                smtp.EnableSsl = UseSSL == "1" ? true : false;

                if (RelayActive == "0")
                {
                    smtp.Host = MailServer;
                    NetworkCredential NetworkCred = new NetworkCredential(this.MailUser, this.MailPassword);
                    smtp.UseDefaultCredentials = true;
                    smtp.Credentials = NetworkCred;
                    smtp.Port = Convert.ToInt32(this.MailPort);
                }
                else
                {
                    smtp.Host = RelayMailServer;
                    smtp.Port = Convert.ToInt32(this.RelayPort);
                }



                if (mailImageModels.Count > 0)
                {



                    if (mailImageModels.Count != mm.Attachments.Count)
                    {
                        foreach (var item in mailImageModels)
                        {




                            mm.Attachments.Add(new Attachment(item.AttachPath));

                            mm.AlternateViews.Add(item.AlternateView);
                        }
                    }
                }

                if (UploadFiles.Count > 0)
                {
                    foreach (var item in UploadFiles)
                    {
                        System.Net.Mail.Attachment attachment = new System.Net.Mail.Attachment(item.Path);
                        attachment.Name = item.FileName;   
                        mm.Attachments.Add(attachment);

                        //mm.Attachments.Add(new Attachment(item.Path));

                    }
                }





                smtp.Send(mm);
                smtp.Dispose();

            }




        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...