Добавил admin | Категория Подборка статей по Delphi | 16 Декабря 2013
Доброго времени суток господа читающие. Сегодня я вам предлагаю разобраться в вопросе – как с помощью Delphi отправить письмо нескольким получателям, так что бы они не видели что это спам рассылка, то есть, при получении письма получатель видит что в поле «кому» указан только его адрес. И так, для того что бы нам отправить письмо нам нужно накидать вот такие вот компоненты на форму:

Тут у нас cxPageControl1 – для вкладок, вкладок две:
- настройки письма;
-получатели;
Вкладка «Получатели» выглядит так

Отмечу что для этой программы используются компоненты DeveloperExpress
X48, и Delphi 2010.
И так с компонентами на форме мы разобрались, перейдем к коду программы. Начнем с того что нам нужно прикрепить файл к письму, получается нам нужно выбрать файл, делаем это так
if OpenDialog1.Execute then
EdtFileSend.Text := OpenDialog1.FileName;
Теперь код отправки письма
var
i : Integer;
begin
IdMessage1.Clear;
ProgressBar1.Position := 0 ;
ProgressBar1.Max := MmEmail.Lines.Count - 1 ;
dSMTp1.Host := EdtHost.Text ;
idSMTP1.Username := EdtEmailAutor.Text ;
idSMTP1.Password := EdtPassEMail.Text ;
IdMessage1.Subject := EdtThemeSend.Text ; // тема сообщения
IdMessage1.From.Address := Format('%s@mail.ru',[EdtEmailAutor.Text]);// отправитель письма
dMessage1.From.Name := EdtFromName.Text ;
IdMessage1.Body.Text := MmSendText.Text;
IdMessage1.Date := Now();
if FileExists(EdtFileSend.Text) then
TIdAttachmentFile.Create(IdMessage1.MessageParts, EdtFileSend.Text);
idSMTP1.connect();
if idSMTP1.Connected = true then
begin
for I := 0 to MmEmail.Lines.Count - 1 do
begin
IdMessage1.Recipients.EMailAddresses :=MmEmail.Lines[i];
idSMTP1.send(IdMessage1);
ProgressBar1.Position :=ProgressBar1.Position + 1 ;
Application.ProcessMessages;
end;
end;
idSMTP1.Disconnect();
end
Важное замечание, что бы программа не ругалась на TIdAttachmentFile нужно добавить модуль IdAttachmentFile.
давайте немного разберем получившийся код. Я думаю строки
IdMessage1.Clear;
ProgressBar1.Position := 0 ;
ProgressBar1.Max := MmEmail.Lines.Count - 1 ;
idSMTp1.Host := EdtHost.Text ;
idSMTP1.Username := EdtEmailAutor.Text ;
idSMTP1.Password := EdtPassEMail.Text ;
IdMessage1.Subject := EdtThemeSend.Text ; // тема сообщения
IdMessage1.From.Address :=Format('%s@mail.ru',[EdtEmailAutor.Text]);// отправитель письма
IdMessage1.From.Name := EdtFromName.Text ;
IdMessage1.Body.Text := MmSendText.Text;
IdMessage1.Date := Now();
Объяснять не нужно, про
if FileExists(EdtFileSend.Text) then
TIdAttachmentFile.Create(IdMessage1.MessageParts,EdtFileSend.Text);
Скажу так, мы проверяем существует ли файл, если существует то добавляем его в наше сформированное письмо, теперь код
idSMTP1.connect();
подключаемся к выбранному серверу для отправки почты, и самое интересное это
if idSMTP1.Connected = true then
begin
for I := 0 to MmEmail.Lines.Count - 1 do
begin
IdMessage1.Recipients.EMailAddresses := MmEmail.Lines[i]; // адрес получателя
idSMTP1.send(IdMessage1);
ProgressBar1.Position := ProgressBar1.Position + 1 ;
Application.ProcessMessages;
end;
end;
тут мы проверяем, как прошло подключение к серверу, если все нормально то открываем цикл, идем по нашим получателям
Добавляем получателя в письмо
IdMessage1.Recipients.EMailAddresses := MmEmail.Lines[i]; // адрес получателя
отправляем письмо
idSMTP1.send(IdMessage1);
добавляем значение для ProgressBar и делаем прерывание что бы программа не зависала
ProgressBar1.Position := ProgressBar1.Position + 1 ;
Application.ProcessMessages;
Ну и последнее, отключаемся от сервера
idSMTP1.Disconnect();
вот пожалуй и все. Отметить стоит то что отправитель письма должен иметь ящик @mail.ru строчка
IdMessage1.From.Address := Format('%s@mail.ru',[EdtEmailAutor.Text]); // отправитель письма
Но это не сложно переделать я думаю, а для нашего с вами примера это будет достаточно
Скачать компоненты, исходники, программу.
p.s. пароль на все архивы qwerty