У меня есть приложение, которое отправляет сообщения электронной почты с прикрепленными фотографиями, используя класс 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 сообщения состоят из простого вложения и тела с большим количеством иероглифов в конце.Есть идеи?