1

私は、1 つの添付ファイルを含む電子メールを送信する 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 ファイルを送信します。

問題は、メールの本文に、messageBody パラメータの内容に加えて、次のような添付ファイルの内容も表示されることです。

差出人: 差出人 送信日: 2010 年 10 月 5 日火曜日午後 4 時 59 分 宛先: someemail

messageBody 内容はこちら

METHOD: REQUEST BEGIN:VCALENDAR PRODID:-//DP//NET MIMEDIR//ENVERSION:1.0 METHOD:REQUEST BEGIN:VEVENT DTSTAMP:20101006T135934Z DTSTART:20101006T135934Z DTEND:20101006T135934Z LOCATION:Minstead DESCRIPTION;ENCODING=first meetingPRINTUABLE概要:カレンダーとスケジューリングの学習 優先度:3 UID:721d9e3c-9010-47f5-9ad0-83c38cb0cbb7 ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION:MAILTO:someemail ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:MAILTO:someemail CLASS:PUBLIC ORGANIZER:MAILTO:someemail SEQUENCE:0 STATUS:TENTATIVE END:VEVENT END:VCALENDAR

そのテキストを取り除き、messageBody パラメーターの内容のみを表示し、vCalendar ファイルをメール メッセージに添付したいと考えています。これどうやってするの?これは見通しの問題ですか、それともコーディングの問題ですか?

編集: Microsoft Outlook でメッセージを表示することにのみ関心があります。メッセージのソースを調べました (Outlook で右クリック > ソースを表示)。削除したいテキストはメッセージの<body> </body> html タグ内にあります)

4

1 に答える 1

1

解決策を見つけました:

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

Attachment のコンストラクターで、おそらくデフォルト値であるのとは対照的に、に置き換え"text/calendar"MediaTypeNames.Application.Octet設定しDispositionTypeました。AttachmentInline

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

これで、本来あるべき内容を含むメッセージの本文と、動作する .ics 添付ファイルを含むクリーンなメール メッセージが得られます。

于 2010-10-06T09:21:32.363 に答える