Как я могу предотвратить отображение содержимого вложения в теле сообщения? - PullRequest
1 голос
/ 06 октября 2010

Я работаю над приложением asp.net c #, которое отправляет электронное письмо с одним вложением.Вложение - это файл vCalendar.Вот код:

            StringBuilder sbCalendar = new StringBuilder();
            DateTime dtStart = eventDate;
            DateTime dtEnd = eventDate;

            sbCalendar.AppendLine("METHOD: REQUEST");
            sbCalendar.AppendLine("BEGIN:VCALENDAR");
            sbCalendar.AppendLine("PRODID:-//DP//NET");
            sbCalendar.AppendLine("MIMEDIR//ENVERSION:1.0");
            sbCalendar.AppendLine("METHOD:REQUEST");
            sbCalendar.AppendLine("BEGIN:VEVENT");
            sbCalendar.AppendLine("DTSTAMP:" + dtStart.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"));
            sbCalendar.AppendLine("DTSTART:" + dtStart.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"));
            sbCalendar.AppendLine("DTEND:" + dtEnd.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z"));
            sbCalendar.AppendLine("LOCATION:" + eventLocation);
            sbCalendar.AppendLine("DESCRIPTION;ENCODING=QUOTED-PRINTABLE:" + eventBody);
            sbCalendar.AppendLine("SUMMARY:" + eventSubject);
            sbCalendar.AppendLine("PRIORITY:3");
            sbCalendar.AppendLine("UID:" + Guid.NewGuid().ToString());
            sbCalendar.AppendLine("ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION:MAILTO:required@participant.foo");
            sbCalendar.AppendLine("ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:MAILTO:chair@foo.foo");
            sbCalendar.AppendLine("CLASS:PUBLIC");
            sbCalendar.AppendLine("ORGANIZER:MAILTO:organizer@foo.foo");
            sbCalendar.AppendLine("SEQUENCE:0");
            sbCalendar.AppendLine("STATUS:TENTATIVE");
            sbCalendar.AppendLine("END:VEVENT");
            sbCalendar.AppendLine("END:VCALENDAR");

            byte[] byteArray = Encoding.UTF8.GetBytes(sbCalendar.ToString());

            Stream contentStream = new MemoryStream(byteArray);

            SmtpClient smtp = new SmtpClient("localhost");

            MailMessage memo = new MailMessage();

            memo.IsBodyHtml = true;

            memo.From = new MailAddress("from@ddress.foo");

            foreach (string emailAddress in emailAddresses)
            {
                memo.To.Add(emailAddress);
            }

            memo.Body = messageBody;
            memo.Subject = messageSubject;

            Attachment attachment = new Attachment(contentStream, "termenLitigiu.ics", "text/calendar");
            attachment.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
            memo.Attachments.Add(attachment);
            smtp.Send(memo);

Это работает и делает то, что должно делать, отправляет рабочий (распознаваемый outlook) файл vcalendar.

Проблема в том, что в телеmail, кроме содержимого параметра messageBody, также отображается содержимое вложенного файла, что-то вроде этого:

От: отправитель Отправлено: вторник, 5 октября 2010 г. 16:59 Кому: someemail

message Здесь содержится содержимое

МЕТОД: НАЧАТЬ ЗАПРОС: VCALENDAR PRODID: - // DP // NET MIMEDIR // ENVERSION: 1.0 МЕТОД: ЗАПРОС НАЧАТЬ: VEVENT DTSTAMP: 20101006T135934Z DTSTART: 20101006T13520101006T135934Z РАСПОЛОЖЕНИЕ: Minstead ОПИСАНИЕ; КОДИРОВАНИЕ = ЗАПИСАНО-ПЕЧАТАЮЩАЯ: Моя первая встреча РЕЗЮМЕ: Обучение календарному планированию и составлению расписаний ПРИОРИТЕТ: 3 UID: 721d9e3c-9010-47f5-9ad0-83c38cb0cETT-RETENT-REETENT-RESETT-PARTE;: someemail ATTENDEE; ROLE = CHAIR; PARTSTAT = ACCEPTED: MAILTO: someemail CLASS: PUBLIC ORGANIZER: MAILTO: someemail ПОСЛЕДОВАТЕЛЬНОСТЬ: 0 СОСТОЯНИЕ: TENTATIVE END: VEVENT END: VCALENDAR

Я хочу избавиться от этого текста и отображать только содержимое моего параметра messageBody, а файл vCalendar просто присоединяется к почтовому сообщению.Как я могу это сделать?Это проблема внешнего вида или проблема кодирования?

Редактировать: меня интересует только отображение сообщения в Microsoft Outlook.Я посмотрел на источник сообщения (в Outlook щелкните правой кнопкой мыши> Просмотр источника), и текст, от которого я хочу избавиться, находится в <body> </body> html-тегах сообщения)

1 Ответ

1 голос
/ 06 октября 2010

Нашли решение:

http://msdn.microsoft.com/en-us/library/system.net.mime.dispositiontypenames.attachment.aspx

В конструкторе Вложения я заменил "text/calendar" на MediaTypeNames.Application.Octet и установил DispositionType в Attachment вместо Inline, который, вероятно, был значением по умолчанию.

            Attachment attachment = new Attachment(contentStream, "termenLitigiu.ics", MediaTypeNames.Application.Octet);
            attachment.ContentDisposition.DispositionType = DispositionTypeNames.Attachment;

Теперь он дает мне чистое почтовое сообщение с телом сообщения, содержащим то, что должно, и рабочим вложением .ics.

...