C # Отправка электронной почты с подписью [дубликат]

Чтобы удалить все повторяющиеся вхождения и оставить одно в списке:

test = [1, 1, 2, 3]

newlist = list(set(test))

print newlist

[1, 2, 3]

Вот функция, которую я использовал для Project Euler:

def removeOccurrences(e):
  return list(set(e))
2
задан SWeko 12 November 2015 в 07:46
поделиться

2 ответа

Попробуйте этот код. Это создаст приложение для 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;
    } 
0
ответ дан kumar chandraketu 22 August 2018 в 07:46
поделиться

Вы можете прикреплять изображения к почте, а затем поместить тэг 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);
}

И вот снимок экрана:

2
ответ дан Reza Aghaei 22 August 2018 в 07:46
поделиться
  • 1
    Это поможет добавить только одно изображение, моя проблема заключается в том, как добавить несколько изображений – sayana 12 November 2015 в 09:36
  • 2
    Вы можете просто добавить несколько любимых ресурсов. – Reza Aghaei 12 November 2015 в 09:44
  • 3
    Это я показал в приведенном выше коде, но проблема в том, что он отображает только первое изображение, другие - как вложение. – sayana 12 November 2015 в 09:53
  • 4
    @sayana Проверьте редактирование, он работает правильно с несколькими изображениями, чтобы проверить, просто скопировать его и вставить в свой код и использовать правильные адреса и учетные данные и посмотреть результат. – Reza Aghaei 12 November 2015 в 10:23
  • 5
    Спасибо, я это видел, но как написать его в цикле. У меня много изображений. – sayana 12 November 2015 в 10:28
Другие вопросы по тегам:

Похожие вопросы: