Как удалить иероглифы из сообщения, полученного на компьютере с Windows 10? - PullRequest
0 голосов
/ 04 июня 2019

У меня есть приложение, которое отправляет сообщения электронной почты с прикрепленными фотографиями, используя класс SmtpClient.Я заметил странную вещь.После получения сообщения на каком-либо почтовом клиенте (не в браузере) на компьютере с Windows 10 - в конце тела сообщения много символов иероглифов.Представьте себе ситуацию: вы пытаетесь отправить сообщение руками (не из кода).Вы можете просто прикрепить картинку к сообщению по его путям, чтобы они были действительно простыми вложениями.Но вы также можете вырезать какое-то изображение из Paint и вставить его в тело - в этом случае обрезанное изображение будет видно в теле, и оно также будет прикреплено к сообщению.Поэтому я думаю, что класс SmtpClient работает как второй вариант.А иероглифы - это закодированное изображение, которое было обрезано и вставлено в тело.Вопрос в том, почему это происходит только в Windows 10 и только с использованием почтовых клиентских программ?

Я пытался сначала прикрепить картинки, и только после этого тело было заполнено.Вторая идея состояла в том, чтобы заполнить тело и запомнить его, назначив его временной переменной, затем прикрепив файлы, и после этого очистив текущее значение тела и присвоив ему временную переменную.Такие способы не помогли.

Создание сообщения:

    public MailMessage MakeMessage()
    {
        MailAddress from = new MailAddress("from@address.com", Name);
        MailAddress to = new MailAddress("to@address.com");


        MailMessage message = new MailMessage(from, to);

        message.Body = MessageText; // typed text           
        string temp = message.Body;

        message.BodyEncoding = Encoding.Unicode;
        message.ReplyTo = new MailAddress(Mail);            

        CreateAttachments(message);

        message.Body = null;
        message.Body = temp;

        return message;
    }

Во время использования приложения - некоторые скриншоты могут быть созданы, сохраняя динамически.Таким образом, этот метод создает физические файлы для этих снимков экрана и затем присоединяет их к сообщению:

    public void CreateAttachments(MailMessage message)
    {
        foreach (var pict in FeedBackHelper.ScreenshotsCollection)
        {
            if (pict.IsChecked)
            {
                BitmapEncoder encoder = new JpegBitmapEncoder();
                encoder.Frames.Add(BitmapFrame.Create(pict.Image));

                var pathToPicture = Path.Combine(FeedBackHelper.feedBackTempPath, $"{pict.Name}.jpg");

                using (var fileStream = new FileStream(pathToPicture, FileMode.Create))
                {
                    encoder.Save(fileStream);
                }
                message.Attachments.Add(new Attachment(pathToPicture));
            }
        }

    }

Я проверил это, отправляя сообщения на 3 компьютерах с Windows 7 и 3 компьютерах с Windows 10.В результате сообщения с вложенными изображениями выглядят так, как если бы они были в Windows 7 в каждом почтовом клиенте или браузере, но в Windows 10 сообщения состоят из простого вложения и тела с большим количеством иероглифов в конце.Есть идеи?

1 Ответ

0 голосов
/ 05 июня 2019

Да, проблема была в кодировке. Изменен Unicode на UTF-8, хотя UTF-7 тоже работает. Но это поведение действительно смутило меня.

...