Я использую 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();
}
}