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

  1. Кодировка текста при отправке почты.
  2. Запрос о доставке и прочтении писем.
  3. Отправка письма сразу на несколько адресов, как в outlook.

На них я пообщел, в ближайшее время, дать ответ. Вот и настал тот самый момент, когда я хотел бы ответить на данные вопросы.

Что касается кодировки текста тела email-сообщения, я не освещал это дело, так как это очень часто и много раз освещалось на различных форумах о программировании. Тем более в некоторых версиях Indy с кодировкой вроде бы, как в порядке. Но раз пользователь спросил я отвечу.

Для преобразования кодировки сообщения существует множество способов, я например, пользуюсь : либо статьей из DelphiWorld: Как можно перекодировать сообщение (содержание) из Win в КОИ8-Р для отправки по EMail.

Либо, некоторым может также помочь, указав кодировку в самом письме, через свойство компоненте TIdMessage, например:

var
 MSG:TIdMessage;
begin
 MSG.Charset:='UTF-8';
end;

Но тогда, сам текст письма, также не забывайте перекодировать в соответсвующую кодировку, например:

MSG.Body.Text:=UTF8Encode('текст');

Либо

MSG.Body.Text:=AnsiToUtf8('текст');

Ну вот вроде бы, что касается кодировки и все.

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

Что касается отправки письма, сразу нескольким адресатам, как в том же самом Microsoft Outlook, то когда Вы указываете адресат получателя, то просто-напросто необходимо указывать их через запятую, например:

msg.Recipients.EMailAddresses:='email1@mail.ru,email2@yandex.ru';

Либо есть второй вариант, можно отправить письмо, затем отключиться и отправить письмо следующему адресату, то есть организовать это все дело через цикл, но таким способом немного можно отправить до 100 сообщений, так как почтовый сервер не дает так часто подключаться к нему, если только он для таких целей предоставляет отдельный порт.


В настоящее время очень популярны смартфоны, то есть другими словами карманные компьютеры. Они уже давно смещают с рынка обычные мобильные телефоны. Например, Вы можете купить htc merge и убедиться в том, что действительно лучше в Наше время иметь смартфон, чем обычные телефон, так как технологии развиваются, а их проще реализовывать в карманных компьютерах. Приобретайте хорошие смартфоны дешево и только качественной фирмы, одной их которых является HTC.


Метки: , , , , , ,




К записи “Некоторые вопросы по отправке email средствами Delphi” оставлено комментариев: 4.

  1. Антон:

    можно использовать пакет Synapse. Оно и отправлять умеет, и кодировки при желании менять. И структура классов проще некуда

  2. Не работает кодировка, как не крутил не вертел и ваш способ пробовал всё похрен. «Текст письма» нормально показывает, а вот «тема письма» и «кто отправил» кракозябры выдаёт :*(

    Вот ссылка на скрин http://www.merdi.ru/122122.PNG

  3. Всё разобрался! Кому интересно вот как я решил эту проблему :

    в uses добавил «IdCoderHeader» и в свойстве компонента TidMessage в строке InitializeISO добавил строку:

    procedure TForm1.idMessage1InitializeISO(var VTransferHeader: TTransfer;
    var VHeaderEncoding: Char; var VCharSet: String);
    begin
    VCharSet:= ‘windows-1251′; //<——- Прописал эту строку
    end;

    Всё нормально начало приходить без кракозябер в читабельном виде :)

  4. Илья:

    Вопрос №2:
    Запрос о доставке и прочтении писем.
    Очевидно, имелась ввиду возможность отчета о прочтении письма получателем (как SMS). Есть такая возможность в почтовых клиентах (вернее заложена в самом протоколе, я полагаю). Судя по всему, пользователь хотел бы знать, реализована ли эта возможность в TIdSMTP, а не учет прочитанных и непрочитанных сообщений.

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

Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*