Итак мы многое уже знаем, как отправлять email-сообщения средствами Delphi, через smtp-сервер. Как мы знаем для этого нам нужен компонент TidSMTP ну и конечно же как же без него — это TidAntiFreeze. Также мы уже в курсе как отправлять смс-сообщения, используя смс-шлюз (это не сложнее отправлять тоже самое email-сообщение). Давайте вспомним, что для отправки сообщения нам объект типа данных — TidMessage. Для этого, необходимо, прежде чем использовать объект данного типа данных, необходимо подключить модуль idMessage в раздел Uses. Теперь поговорим о прикреплениях к письму. В Delphi предусмотрен объет типа данных для работы с вложениями к письму — TidAttachment и чтобы работать с объектом данного типа необходимо в Uses подключить idMessage (что мы уже и сделали). Работать с ним также легко, давайте попробуем.

Для начала необходимо подключиться к нашему smtp-серверу, на событие формы — OnCreate пишем следующее

procedure TForm1.FormCreate(Sender: TObject);
begin
try
IdSMTP1.AuthenticationType:=atLogin;
IdSMTP1.Host:='smtp.rambler.ru';
IdSMTP1.Port:=25;
IdSMTP1.Username:='xxxxxxxxx@rambler.ru';
IdSMTP1.Password:='password';
IdSMTP1.Connect;
except
on e:Exception do
end;
end;

Теперь давайте заполним наше сообщение, это все в курсе, мы уже проходили это, я объяснял, что все значит, следовательно вопросов тут возникнуть не должно.

procedure TForm1.Button1Click(Sender: TObject);
var
msg:TIdMessage;
begin
try
msg:=TIdMessage.Create(nil);
msg.Body.Add('email text');
msg.Subject:='header email';
msg.From.Address:='xxxxxx@rambler.ru';
msg.From.Name:='Andrey';
msg.Recipients.EMailAddresses:='xxxxxx@mail.ru';
msg.IsEncoded:=True;
if IdSMTP1.Connected=True then
begin
IdSMTP1.Send(msg);
end;
msg.Free;
except
on e:Exception do
begin
msg.Free;
IdSMTP1.Disconnect;
end;
end;

Теперь создадим наши вложения, как видите ничего сложно, просто есть метод отличный в TidMessage (а точнее просто создаем переменную нашего типа — TidAttachment), который помогает прикрепить к нашему письму вложения, и указываем в нем наше сообщение, к которому мы прикрепляем файл и сам файл.

procedure TForm1.Button1Click(Sender: TObject);
var
msg:TIdMessage;
att:TIdAttachment;
begin
try
msg:=TIdMessage.Create(nil);
msg.Body.Add('email text');
msg.Subject:='header email';
msg.From.Address:='ххххххх@rambler.ru';//от кого отправляем
msg.From.Name:='Andrey';
msg.Recipients.EMailAddresses:='ххххххх@mail.ru';//кому отправляем
att:=TIdAttachment.Create(msg.MessageParts,'C:\1.txt');
msg.IsEncoded:=True;
if IdSMTP1.Connected=True then
begin
IdSMTP1.Send(msg);
end;
att.Free;
msg.Free;
except
on e:Exception do
begin
msg.Free;
att.Free;
IdSMTP1.Disconnect;
end;
end;
end;

Теперь можете спокойно отправлять ваши сообщения в html-формате, делается это примерно так.

procedure TForm1.Button1Click(Sender: TObject);
var
msg:TIdMessage;
att:TIdAttachment;
F:TextFile;
begin
try
AssignFile(F,'test.htm');
Rewrite(F);
msg:=TIdMessage.Create(nil);
msg.Body.Add('email text');
Write(F,msg.body.text);
msg.Subject:='header email';
msg.From.Address:='хххххххх@rambler.ru';
msg.From.Name:='Andrey';
msg.Recipients.EMailAddresses:='ххххххх@mail.ru';
att:=TIdAttachment.Create(msg.MessageParts,'test.htm');
msg.IsEncoded:=True;
if IdSMTP1.Connected=True then
begin
IdSMTP1.Send(msg);
end;
att.Free;
msg.Free;
CloseFile(F);
except
on e:Exception do
begin
msg.Free;
att.Free;
IdSMTP1.Disconnect;
end;
end;
end;
Хочу заметить, что в настоящее время, пожалуй, самая популярная операционная система это операционная система семейства Windows. Для нее существует много различных дополнений. Одним из таких дополнений являются темы для рабочего стола. Так что темы для windows xp смогут сделать довольно красивый рабочий стол, сделайте его более ярким и красочным.
Автор статьи - Andrey53

Метки: , ,




К записи “Отправка email средствами Delphi. Часть 2” оставлено комментариев: 12.

  1. Сергей:

    Вопрос в следующем: Как отправить письмо через прокси?

    Настроен outlook, который работает через прокси.
    Перерыл весь инет, понял что вроде как-то сделать можно, а вот как нигде не написано. Idsmtp прокси использовать как я понял не умеет, но outlook ведь работает, хотя там такие же принципы отправки насколько я знаю.
    Пробовал связку с IdIOHandlerSocket и IdSocksInfo, но они тоже работать idsmtp не заставили.

  2. Сергей:

    Есть вопросы по работе с E-mail к следующей статейке, если будет возможность их как-то осветить:
    1) Кодировка текста при отправке почты.
    2) Запрос о доставке и прочтении писем.
    3) Отправка письма сразу на несколько адресов, как в outlook.

  3. Zerdalert:

    Привет Андрей! У меня в IDSMTP в пункте authentification type отсутствует свойство atlogin, зато есть варианты satDefault, satNone и satSasl. Как быть в моем случае с отправкой писем, какие компоненты нужно использовать и как их настраивать?

  4. Zerdalert:

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

  5. Zerdalert:

    Андрей привет еще раз. Вобщем не нашел я пока ответа на свой вопрос, не работает и все, но есть идея поробовать обновить INDY, где взять и как обновить на xe2 не знаю. Если знаешь как это сделать, то подскажи пожалуйста, если не сложно конечно.

    • Andrey:

      не знаю, возможно INDY проблема, возможно протокол у почтового сервиса поменялся

  6. Nikolay:

    Подскажите пожалуйста, если IdSMTP1.Username и msg.From.Address не совпадают, письмо отправить не получится? может это можно как-то реализовать?

  7. Виктор:

    Андрей, вот такая проблемы — отправляю из Delphi вложенный файл с русским именем (смета 02.13.PDF) в письме он приходит в другой кодировке (ЯЛЕРЮ 02.13.PDF). Как с этим бороться?

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

Вы можете использовать следующие теги:

*