Как прикрепить XElement к SMTP-сообщению как вложение в C # - PullRequest
0 голосов
/ 30 октября 2011

Я пытаюсь прикрепить XElement к отправляемому SMTP-сообщению.

Мой код выглядит так:

XElement xmlMsg = new XElement("Test",new XElement("TestSon", "DummyValue"),new XElement("TestSon2","DummyValue"));
using (MemoryStream memoryStream = new MemoryStream())
    {
        byte[] contentAsBytes = Encoding.Default.GetBytes(xmlMsg.ToString());
        memoryStream.Write(contentAsBytes, 0, contentAsBytes.Length);
        // Set the position to the beginning of the stream.

        memoryStream.Seek(0, SeekOrigin.Begin);

        // Create attachment

        ContentType contentType = new ContentType();
        contentType.MediaType = MediaTypeNames.Text.Plain;
        contentType.Name = "Conversation.xml";
        Attachment attachment = new Attachment(memoryStream, contentType);
        mail.Attachments.Add(attachment);
        Server.Send(mail);
    }

Однако мое письмо получено с XMLфайл обрезан в конце, без последних 2 символов ...

Я что-то здесь упускаю?

Спасибо

1 Ответ

0 голосов
/ 30 октября 2011

Какая кодировка Encoding.Default в вашей системе?

Если это UTF-16, я ожидаю, что два байта - это спецификация, которая (по какой-то причине) не включена в число байтов.

Предложения:

  • Поместите xmlMsg.ToString() в локальную переменную и проверьте ее в отладчике.
  • Посмотрите на байты в memoryStream
  • Посмотрите на содержание сообщения электронной почты в необработанном виде, возможно, скопировав незашифрованное вложение, чтобы вы могли вручную декодировать его как двоичный файл.

Т.е.проверяйте каждый шаг с минимально возможным автоматическим повторным толкованием (например, с помощью средства просмотра XML).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...