воскресенье, 20 ноября 2011 г.

Создание почтового клиента в Delphi 7

. Через ShellExecute. Т.е через почтовую программу которая стоит по умолчанию. Вот пример: 

procedure TForm1.Button1Click(Sender: TObject); 
begin
ShellExecute(0,'Open','Mailto: // //
Этот адрес e-mail защищен от спам-ботов. Чтобы увидеть его, у Вас должен быть включен Java-Script // ', nil, nil, SW_NORMAL); 
end;
end.

2. MAPI-ИМХО глючный метод. И для нас он не подходит. 
3. SMTP-требует выделенного сервера.Например (smtp.yandex.ru). 

4. Использование COM интерфейса Outlook. Требуется установленный и подключённый Outlook. 
5. SMTP Relay Server - отсылка письма напрямую минуя любые промежуточные серверы.Написать свой SMTP-сервер.Можно воспользоватся компонентами с закладки Indy Servers.



Приступим непосредственно к сознанию почтового клиента, для чего мы будем использовать 3 вариант.


1 Создаем новый проект
2 Идем на закладку Indy Clients. Кладем на форму компонент idSMTP:
3 Также нам понадобится ещё два компонента это idMessage и idAntiFreeze с закладки Indy Misc: 
4 Кладём на форму: 
  1. 6 Edit-ов; 
  2. 8 Label-ов; 
  3. 3 Button-а; 
  4. 1 Memo; 
  5. 1 SpinEdit; 
  6. 1 ComboBox; 
5 Создаем примерно вот такую форму:

Для более полного понимания давайте разберем компоненты формы:

idSMTP-компонент отвечает за подключение к серверу и отправке письма; 
Для подключения к серверу нам нужно знать только: 
1)Host-я заюзал smtp.yandex.ru
2)Port-в большинстве случаев используется 25 порт
3)Login-можно указать имя вашего почтового ящика или просто имя пользователя. 
4)Password-пароль к вашему ящику: 

idMessage-тут у нас будет текст письма,аттач,тема,кому,от кого; 
1)Body-текст письма. 
2)Subject-здесь содержится тема письма. 
3)From-От кого письмо. 
4)EMailAddresses-кому отсылается письмо письмо. 

idAntiFreeze-компонент для избавления глюков при отправке письма и не только. Т.е при проверке электронной почты или отправке письма интерфейс программы начитает глючить(вы не можете ничего нажать),этот компонент избавляет вас от данной проблемы. 

Теперь, когда мы знаем для чего нужны компоненты для работы с почтой, займемся разборкой кода.

6 Кликаем два раза по кнопке "Оправить". У нас вызывается обработчик события "OnClick".Ниже приведен код полностью откомментированный: 

Листинг 1.1. Код который реализует отправку письма. 

procedure TForm10.Button2Click(Sender: TObject);
begin
idSMTP1.Host:=ComboBox1.Text;  /Хост
idSMTP1.Port:=2525;   //Порт
idSMTP1.userName:=Edit2.Text; // Логин
idSMTP1.Password:=Edit3.Text; // Пароль

IdMessage1.From.Text:=edit4.Text;   //От кого
IdMessage1.Recipients.EMailAddresses:=edit5.Text; //Кому
IdMessage1.Subject:=Edit6.Text;   //Тема
IdMessage1.Body.Text:=Memo1.text;  //Текст письма
idSMTP1.Connect();
if idSMTP1.Connected then  // Если подцепились, то
idSMTP1.Send(IdMessage1);    //шлем письмо
idSMTP1.Disconnect();     //отключаемися
end;

7 Так же у нас возникает необходимость передавать в письмах различные файлы, поэтому нам необходимо организовать их прикрепление к письму и отсылку. Для этого жмем на кнопку "...", вызывая события "OnClick" .


Листинг 1.2. Прикрепление к письму аттача. 

procedure TForm10.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then //Если диалоговое окно открыто, то
begin
TidAttachment.Create(IdMessage1.MessageParts, OpenDialog1.FileName); //указываем на файл, который необходимо отправить
Edit8.Text:=OpenDialog1.FileName; //Покажем в Edit8 путь к файлу
end;
end;

8 Для закрытия формы используем кнопку "Закрыть кнопку":

Листинг 1.2. Закрываем форму.

procedure TForm10.Button3Click(Sender: TObject);
begin
Form10.Close;
end; 




2 комментария: