понедельник, 2 июля 2012 г.

Кодировка заголовков Inmessage в Delphi6.

На прошлой недели, случилось мне дописать функции отправки почты из своего приложения.
Используя стандартную связку компонентов Indy 8, идущих в комплекте с Delphi 6, почта отправлялась коряво: Тема кодировалась в ISO-8859, а тело сообщения в WIN-1251, порывшись в инете выснилось, что в новой версии delphi вопрос решается использованием функции EncodeHeader в исправленной библиотеке IdCoderHeader, однако в Delphi 6 её нет.

Более разглагольствовать не буду, ниже исправленная библиотека для Delphi6 и пример использования Indy для рассылки sms сообщений через сервер smsmail.com, прежде чем использовать смс-шлюз надо зарегистрироваться и получить 5 бесплатных смс сообщений для тестирования.



1. Добавьте в проект файл IdCoderHeader.pas
2. Добавьте его в раздел uses
  Windows, Messages
....
 IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdMessageClient, IdSMTP, IdMessage,IdCoderHeader;
3. Разместите на форме кнопку и IdMessage (дайте компоненту имя msg)
4. Создайте событие на действие onClick кнопки

Код:
   begin
//формирование сообщения
   with msg do
   begin
    ContentType := 'text/plain;charset=' + 'windows-1251'; //заголовок

    Subject:=EncodeHeader('ТЕМА ПИСЬМА ПО РУССКИ',[],'B',bit8, 'windows-1251');//перекодировка темы

    Recipients.EMailAddresses:='79271234567@smsmail.com';//почта получателя (в моём случае смс шлюз, можно подставить сюда любой номер телефона)
    From.Address:='ВАША@ПОЧТА.ru';          //указываем автора письма
    from.Name:='ALIAS';// Псевдоним для адреса отправителя (в смс-ке отобразиться вместо номера отправителя)
    Body.Text:='ТЕЛО СООБЩЕНИЯ' //размещаем текст сообщения
   end;
//настраиваем подключение
   smtp:=TIdSMTP.Create(self); //smtp - переменная типа TIdSMTP которую надо объявить в var
   with smtp do
   begin
   AuthenticationType:=atLogin;
   Host:='smtp.mail.ru';// параметры отправителя на примере mail.ru
   UserId:='ВАШАПОЧТА@mail.ru';//имя пользователя на сервере
   Password:='ПАРОЛЬ';
   port:=25;
   Connect;//Пробуем подключиться
   if Connected then Send(msg);//Если подключилсь - отправляем сообщение
   Disconnect;//Отключились
   end;
   end;

Комментариев нет:

Отправить комментарий