Сегодня мы с вами будем писать программу для анонимной отправки почты через прокси сервер.
Первым делом открываем пиво, то есть дельфи ;) и размещаем на форме следующие компоненты:
С вкладки Indy Clients:
IdSMTP1 ***8211; 1 штука;
С вкладки Indy Misc:
IdMessage1 ***8211; 1 штука ***8211; эти два компоненты необходимы нам для непосредственной отправки почты. Но нам будет нужно также работать с SOCKS протоколом, для этого размещаем дополнительные компоненты:
С вкладки Indy I/O Handlers на форум кидаем компонент - IdIOHandlerSocket1, а с вкладки Indy Misc - IdSocksInfo1;
Теперь необходимо установить связи между компонентами:
В списке свойств компонента IdSMTP1 находим IOHandler и указываем там IdIOHandlerSocket1 (это можно сделать и программно: IdSMTP1.IOHandler := IdIOHandlerSocket1;).
Идем дальше, щелкаем по компоненту IdIOHandlerSocket1, и в свойстве SocksInfo указываем IdSocksInfo1 (программно: IdIOHandlerSocket1.SocksInfo := IdSocksInfo1;)
Так, теперь нам необходимо разместить на форме компоненты для ввода неоходимой информации:
Кидаем на форму
2 компонента edit и переименовываем их соответственно в edHost и edPort ***8211; они нам необходимы для указания хоста и порта SMTP сервера.
3 компонента edit, переименовываем их в
edFrom ***8211; от кого пришло письмо
edTO ***8211; кому отправляем
edSubj ***8211; тема письма
2 компонента edit, переименовываем их соответственно в edProxyHost и edProxyPort ***8211; для указания хоста и порта прокси сервера.
Также нам неоходим один компонент Memo (переименовываем в meBody - в нем будет находиться текст письма) и 2 кнопки ***8211; Button (одну переименуем в btnSend ***8211; для отправки, другую в btnExit ***8211; выход из программы).
В итоге у вас должна получиться форма, похожая на эту:
Подготовительный этап на этом можно считать законченным, теперь ты смело можешь сделать пару глотков твоего любимого пива, перевести дыхание и двигаться дальше ;)
Нам необходимо создать обработчик на событие ***8211; клик по кнопке btnSend, щелкни по кнопке дважды, у тебя появится следующая процедура:
Код:
procedure TForm1.btnSendClick(Sender: TObject);
begin
end;
это наша «заготовка» с которой мы и будем работать.
В теле это процедуре пишем следующий код:
Код:
procedure TForm1.btnSendClick(Sender: TObject);
begin
//работаем только с SOCKS прокси версии 5
IdSocksInfo1.Version := svSocks5; //(svSocks4, svSocks4A)
//хост прокси
IdSocksInfo1.Host := edProxyHost.Text;
//порт прокси
//конвертируем текстовое значение в целочисленное
IdSocksInfo1.Port := StrToInt(edProxyPort.Text);
//Настройка SMTP
//хост SMTP сервера
IdSMTP1.Host := edHost.Text;
//порт SMTP
//конвертируем текстовое значение в целочисленное
IdSMTP1.Port := StrToInt(edPort.Text);
//Настройка сообщения (IdMessage1)
with IdMessage1 do
begin
From.Text := edFrom.Text; //от кого
Recipients.EMailAddresses := edTO.Text; // кому
Subject := edSubj.Text; // тема письма
Body.Text := meBody.Text; // текст (тело письма)
end;
//отправка почты
try
try
IdSMTP1.Connect(100000); //соединение с сервером
IdSMTP1.Send(IdMessage1); //отправка потового сообщения
//в случае ошибке выводим сообщение
except on E:Exception do
begin
ShowMessage('ОШИБКА: ' + E.Message);
end;
end;
finally
// в завершении - если подключены,
//то отключаемся от сервера
if IdSMTP1.Connected then
begin
IdSMTP1.Disconnect;
IdIOHandlerSocket1.Close;
end;
end;
end;
думаю, что с данным кодом будет все понятно, потому как я старался все подробно закомментировать %)
SMTP сервер с которым вы будете работать не должен требовать аутентификации!!!
Ну и на последок нам остается сделать выход из программы:
Код:
procedure TForm1.btnExitClick(Sender: TObject);
begin
//потому как в проекте лишь одна форма,
//достаточно выполнить эту процедуру
Close;
end;
Сразу хочу сказать, что при тестировании программы необходимо тщательно выбрать прокси сервер,
также после легкой манипуляции с кодом можно написать программу для простой отправки почты (без прокси) :)
Вот и все ;)
ЗЫ данная статья не претендует на полноту рассмотрения и описания затронутой темы, но автор (я) надеятся, что она (статья) поможет вам написать свой почтовый клиент, не хуже The BAT! ;)
2005 (с) by n0ns3ns3
icq: 8887337