Чтобы удалить все повторяющиеся вхождения и оставить одно в списке:
test = [1, 1, 2, 3]
newlist = list(set(test))
print newlist
[1, 2, 3]
Вот функция, которую я использовал для Project Euler:
def removeOccurrences(e):
return list(set(e))
Попробуйте этот код. Это создаст приложение для excel, csv, pdf, а также встроенное вложение, т. Е. В теле письма для формата изображения png. Для формата png множественное изображение будет внедрено встроенным одно за другим методом GetEmbeddedImage . Вы можете настроить его на основе вашего требования.
SmtpClient smtpServer = new SmtpClient(smtpServerName);
smtpServer.Port = 25;
smtpServer.Credentials = new System.Net.NetworkCredential(userName, password);
//smtpServer.EnableSsl = true;
MailMessage smtpEmail = new MailMessage();
string messageBodyImage = @"<img width=1200 id=""MyContent"" src=""cid:{0}"">";
toAddressList = toAddress.Split(';');
foreach (string toEmail in toAddressList)
smtpEmail.To.Add(toEmail);
smtpEmail.From = new MailAddress(fromAddress);
smtpEmail.Body = messageBody;
smtpEmail.Subject = subject;
foreach (string format in fileExtension)
{
switch (format)
{
case "PNG":
smtpEmail.IsBodyHtml = true;
smtpEmail.AlternateViews.Add(GetEmbeddedImage(reportByteStream, messageBodyImage, format));
break;
case "CSV":
smtpEmail.Attachments.Add(new System.Net.Mail.Attachment(new MemoryStream(myStream[format][0]), "MyReport." + format, "text/csv"));
break;
case "XLS":
smtpEmail.Attachments.Add(new System.Net.Mail.Attachment(new MemoryStream(myStream[format][0]), "MyReport." + format, "application/vnd.ms-excel"));
break;
default: // For PDF
smtpEmail.Attachments.Add(new System.Net.Mail.Attachment(new MemoryStream(myStream[format][0]), "MyReport." + format, MediaTypeNames.Application.Pdf));
break;
}
}
Способ встраивания нескольких встроенных изображений.
private AlternateView GetEmbeddedImage(Dictionary<string, Byte[][]> streamAttachment, string msgTemplate, string fileFormat)
{
LinkedResource imageFile = null;
AlternateView alternateView = null;
string msgBody = string.Empty;
try
{
List<LinkedResource> imageFiles = new List<LinkedResource>();
for (int page = 0; page < streamAttachment[fileFormat].Length; page++)
{
imageFile = new LinkedResource(new MemoryStream(streamAttachment[fileFormat][page]));
imageFile.ContentId = Guid.NewGuid().ToString();
msgBody = msgBody + "<BR/>" + string.Format(msgTemplate, imageFile.ContentId);
imageFiles.Add(imageFile);
}
alternateView = AlternateView.CreateAlternateViewFromString(msgBody, null, MediaTypeNames.Text.Html);
imageFiles.ForEach(img => alternateView.LinkedResources.Add(img));
}
catch (Exception Ex)
{
}
return alternateView;
}
Вы можете прикреплять изображения к почте, а затем поместить тэг img
и использовать ContentId
вложения как src
следующим образом:
private void denMailButton_Click(object sender, EventArgs e)
{
string subject = "Subject";
string body = @"Image 1: <img src=""$CONTENTID1$""/> <br/> Image 2: <img src=""$CONTENTID2$""/> <br/> Some Other Content";
MailMessage mail = new MailMessage();
mail.From = new MailAddress("from@example.com");
mail.To.Add(new MailAddress("to@example.com"));
mail.Subject = subject;
mail.Body = body;
mail.Priority = MailPriority.Normal;
string contentID1 = Guid.NewGuid().ToString().Replace("-", "");
string contentID2 = Guid.NewGuid().ToString().Replace("-", "");
body = body.Replace("$CONTENTID1$", "cid:" + contentID1);
body = body.Replace("$CONTENTID2$", "cid:" + contentID2);
AlternateView htmlView = AlternateView.CreateAlternateViewFromString(body, null, "text/html");
//path of image or stream
LinkedResource imagelink1 = new LinkedResource(@"D:\1.png", "image/png");
imagelink1.ContentId = contentID1;
imagelink1.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
htmlView.LinkedResources.Add(imagelink1);
LinkedResource imagelink2 = new LinkedResource(@"D:\2.png", "image/png");
imagelink2.ContentId = contentID2;
imagelink2.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
htmlView.LinkedResources.Add(imagelink2);
mail.AlternateViews.Add(htmlView);
SmtpClient client = new SmtpClient();
client.Host = "mail.example.com";
client.Credentials = new NetworkCredential("from@example.com", "password");
client.Send(mail);
}
И вот снимок экрана: