Всем привет, в самом начале открытия данного сайта, я писал статьи по отправке email средствами Delphi, а также отправке sms-сообщений , где использовал компонент TidSMTP. Возможно в тех статьях, я рассмотрел не все аспекты по работе с email, вот мне один из пользователей моего блога задал следующие вопросы:
- Кодировка текста при отправке почты.
- Запрос о доставке и прочтении писем.
- Отправка письма сразу на несколько адресов, как в 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, idSMTP, Indy, Microsoft Outlook, SMTP, TIdMessage, TidSMTP
можно использовать пакет Synapse. Оно и отправлять умеет, и кодировки при желании менять. И структура классов проще некуда
Не работает кодировка, как не крутил не вертел и ваш способ пробовал всё похрен. «Текст письма» нормально показывает, а вот «тема письма» и «кто отправил» кракозябры выдаёт :*(
Вот ссылка на скрин http://www.merdi.ru/122122.PNG
Всё разобрался! Кому интересно вот как я решил эту проблему :
в uses добавил «IdCoderHeader» и в свойстве компонента TidMessage в строке InitializeISO добавил строку:
procedure TForm1.idMessage1InitializeISO(var VTransferHeader: TTransfer;
var VHeaderEncoding: Char; var VCharSet: String);
begin
VCharSet:= ‘windows-1251′; //<——- Прописал эту строку
end;
Всё нормально начало приходить без кракозябер в читабельном виде
Вопрос №2:
Запрос о доставке и прочтении писем.
Очевидно, имелась ввиду возможность отчета о прочтении письма получателем (как SMS). Есть такая возможность в почтовых клиентах (вернее заложена в самом протоколе, я полагаю). Судя по всему, пользователь хотел бы знать, реализована ли эта возможность в TIdSMTP, а не учет прочитанных и непрочитанных сообщений.