Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемой с кодировкой E-Mail когда прикрепляю файлы [D7, WinXP]


Inna_Z ©   (2007-06-05 12:55:00) 

Ниже приведён код функции которая отправляет почту по имейлу.

procedure TDiagReportGenerator.SendReport;
var
   Files : string;
begin
  // Формируем содержимое письма
 GenerateReport;

 MailMessage.From.Name := 'AsBase Client';
 MailMessage.Recipients.EMailAddresses := FEmail;
 MailMessage.ContentType:= 'text/html';
 MailMessage.CharSet:= 'Windows-1251';

 MailMessage.Subject := 'Информация об ошибке';
 MailMessage.Body.Add(ReportText);

 Files := DiagnosticCollector.ClientInfo.Pathscreen;
 TIdAttachment.Create(MailMessage.MessageParts, Files);

 //send mail
 try
   try
     SMTP.Connect(1000);
     SMTP.Send(MailMessage);
   except on E:Exception do
     ShowMessage('ERROR: ' + E.Message);
   end;
 finally
   if SMTP.Connected then SMTP.Disconnect;
 end;

end;


если не прикреплять файлик то письмо оправляется в нормальной кодировке, русский шрифт отображается как надо

Но только стоит добавить в писмо файлик
 Files := DiagnosticCollector.ClientInfo.Pathscreen;
 TIdAttachment.Create(MailMessage.MessageParts, Files);

(в данном случае это jpeg картинка)
то само письмо начинает приходить в неправильной кодировке. Почту принимаю аутлуком, он даже перестаёт после этого понимать что это HTML формат.

Что я тут пропустила и сделала не так?
Какие ещё параметры и настройки нужны, чтобы правильно прикрепить файлы к письму?


Inna_Z   (2007-06-05 14:52:00) [1]

Вобщем опытным путём получилось заставить работать это таким способом:

  // Формируем содержимое письма
 GenerateReport;

 MailMessage.From.Name := 'Asbase Client';
 MailMessage.Recipients.EMailAddresses := FEmail;
 MailMessage.Subject := 'Информация об ошибке';
 MailMessage.Body.Clear;
 MailMessage.CharSet:= 'Windows-1251';

 // Добавила эту часть, она себе потом благополучно исщезает (какой-то глюк видать, но зато потом остаётся то что надо)
 TextPart := TIdText.Create(MailMessage.MessageParts);
 TextPart.Body.Text := '!!!!!!!!!';
 TextPart.ContentType := 'plain/text';

 TextPart := TIdText.Create(MailMessage.MessageParts);
 TextPart.Body.Text := ReportText;
 TextPart.ContentType := 'text/html;charset=windows-1251';  // тогда получается нужная кодировка

 Att := TIdAttachment.Create(MailMessage.MessageParts, File);
 Att.ContentType := 'image/jpg';
 Att.Headers.Add('Content-ID: <'+ Files +'>'); // после этого начинает разбирать что есть картинка, и часть письма в html формате начинает нормально разбираться

 //send mail
  SendMail;


Inna_Z   (2007-06-05 13:49:00) [2]

а если так, то текст есть но всё равно не с той кодировкой:

 MailMessage.From.Name := 'Asbase Client';
 MailMessage.Recipients.EMailAddresses := FEmail;
 MailMessage.ContentType:= 'multipart/mixed';
 MailMessage.CharSet:= 'Windows-1251';
 MailMessage.Subject := 'Информация об ошибке';
 MailMessage.Body.Add(ReportText);


Inna_Z   (2007-06-05 13:47:00) [3]

Не важно что там multipart/mixed или text/html, всё равно таким способом происходит что-то по другому, так как эта текстовая часть вообще не посылается.


Inna_Z   (2007-06-05 13:47:00) [4]

Не важно что там multipart/mixed или text/html, всё равно таким способом происходит что-то по другому, так как эта текстовая часть вообще не посылается.


clickmaker   (2007-06-05 13:38:00) [5]

Content-Type multipart/mixed может надо указать?
В принципе, насколько я понял, TextPart эквиваленто Body, только в случае с боди инди сама эту текстовую часть создаст


Inna_Z   (2007-06-05 13:13:00) [6]

счётчик
 MailMessage.MessageParts.TextPartCount  
 после выполнения того кода остаётся равен 0
 Мистика


Inna_Z   (2007-06-05 13:06:00) [7]

Тогда приходит только файлик без текста письма


clickmaker   (2007-06-05 13:01:00) [8]

а если

TextPart := TIdText.Create(MailMessage.MessageParts);
TextPart.Body.Text := ReportText;
TextPart.ContentType := 'text/html';
TextPart.ContentTransfer := '8bit';

вместо

MailMessage.Body.Add(ReportText);


Наверх

Титульная страница Поиск, карта сайта Написать письмо