Сайт Koder.kz сайт для Delphi программистов.

koder.kz

Web or desctop App Developer

Написать

Добавил 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