Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Русский текст отправленного программно


Автор: Delphist 15.3.2007, 12:48
При отправке письма я использую два компонента: TIdSMTP и TIdMessage. Отправка осуществляется через собственный SMTP-сервер на @yandex.ru. Текст приходящего письма получается иероглифами. Как это исправить.

Автор: Matematik 15.3.2007, 17:02
Если отправляешь просто текст body
то пропиши загловок
Код

Content-type: text/plain; charset=windows-1251

у TidMessage есть соответствующее сво-во
кажется так
Код

message.ContentType: 'text/plain; charset=windows-1251';

Автор: Delphist 15.3.2007, 19:54
Цитата(Matematik @  15.3.2007,  18:02 Найти цитируемый пост)
Если отправляешь просто текст body
то пропиши загловок

Я сейчас работаю над проектом он связан с БД, но в нем мне нужно реализовать одну функцию - это отправка на e-mail (в домене yandex.ru) log-файла об ошибках программы без участия пользователя. Я использую компоненты INDY (может нужно использовать другие компоненты, посоветуйте какие?). Вообщем log-файл приходит мне на e-mail но есть, одно но, а именно тема письма отображается в иероглифах. Как с этим бороться? Облазил все форумы никто не может помочь.
Привожу примерный мой код

Переменная Msg - типа TIdMessage;
Переменная IdSMTP1 - типа TIdSMTP;


Код

procedure TfmMain.SendMail;
begin

  if not InitSMTP then
    exit;

  if IdSMTP1.Connected then
  begin
    Msg.CharSet := 'UTF-8';
    Msg.Subject := AnsiToUtf8(edtSubject.Text);
    Msg.Body.Text := AnsiToUtf8(mMailText.Text);

    Msg.Recipients.EMailAddresses := edtRecipients.Text;   //адрес получателя
    Msg.From.Address := edtFrom.Text;                      //адресс отправителя
    Msg.From.Name := AnsiToUtf8(edtUserNameFrom.Text);
    Msg.Date := now;                                       
    IdSMTP1.Send(Msg);
  end;
  IdSMTP1.Disconnect;
end;

function
  TfmMain.InitSMTP:
  boolean;
begin

  Result := True;
  IdSMTP1.AuthenticationType := atNone;
  IdSMTP1.Host := 'xxx.xxx.xxx.xxx';
  try
   IdSMTP1.Connect;
  except
    Result := False;
  end;
end;


procedure
  TfmMain.MsgInitializeISO(var VTransferHeader: TTransfer;
  var VHeaderEncoding: Char; var VCharSet: String);
begin
  {Этот код должен спасать от иероглифов - так пишут на форумах, но не фига он не спасает}
  VCharSet:= 'utf-8'
  VTransferHeader := bit7;
  VHeaderEncoding := 'B';
end;



P.S. Заранее спасибо! 

Автор: Matematik 15.3.2007, 21:28
Универсальный способ - отослать почтовиком и посмотреть какие он заголовки генерит.
Код

  IdMessage1.From.Address := '[email protected]';
  IdMessage1.Recipients.Add.Address := '[email protected]';
  IdMessage1.Subject := EncodeHeader(AnsiToUtf8('тема письма в UTF8'), [], 'B', bit8, 'utf-8');
  IdMessage1.ContentType := 'text/plain; charset="utf-8"';
  IdMessage1.Body.Text := AnsiToUtf8('текст письма');
  IdSMTP1.Host := 'smtp.mail.ru';
  IdSMTP1.Port := 25;
  IdSMTP1.Username := 'pupkin';
  IdSMTP1.Password := 'qwerty';
  IdSMTP1.Connect;
  IdSMTP1.Send(IdMessage1);
  IdSMTP1.Disconnect;  


Добавлено @ 21:28 
Код

uses IdCoderHeader;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)