![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Привет всем)
Кароче, чисто из-за интереса написал простенькую программу. чтобы рассылать письма на почту, используя ssl, smtp, messasge и тд Программа работает при нажатии на кнопку и отправляет письмо) Но вот беда: при повторном нажатии, программа "ругается") Помогите это дело допилить) Код:
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Edit,
FMX.Controls.Presentation, FMX.StdCtrls, IdIOHandler, IdIOHandlerSocket,
IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdMessage, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase,
IdMessageClient, IdSMTPBase, IdSMTP, IdCustomTransparentProxy, IdSocks,
IdAttachment, FMX.ScrollBox, FMX.Memo;
type
TForm1 = class(TForm)
IdSMTP1: TIdSMTP;
IdMessage1: TIdMessage;
IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
Button1: TButton;
IdSocksInfo1: TIdSocksInfo;
Memo1: TMemo;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
CheckBox3: TCheckBox;
CheckBox4: TCheckBox;
procedure Button1Click(Sender: TObject);
procedure CheckBox4Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
A,B,C:string;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
idSmtp1.Host:='smtp.mail.ru';
idSmtp1.Port:=25;
idSmtp1.Username:='trymbar';
idSmtp1.Password:='elvakamal';
IdSSLIOHandlerSocketOpenSSL1.Destination:= idSMTP1.Host+':'+IntToStr(idSMTP1.Port);
IdSSLIOHandlerSocketOpenSSL1.Host:=idSMTP1.Host;
IdSSLIOHandlerSocketOpenSSL1.Port:=idSMTP1.Port;
IdSSLIOHandlerSocketOpenSSL1.DefaultPort:=0;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method:= sslvSSLv23;
IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode:= sslmUnassigned;
idSMTP1.IOHandler:=IdSSLIOHandlerSocketOpenSSL1;
idSMTP1.UseTLS:=utUseImplicitTLS;
A:=Memo1.Text;
B:=Edit1.Text;
idMessage1.Body.Text:=A;
idMessage1.CharSet:='windows-1251';
idMessage1.From.Text:='trymbar@mail.ru';
idMessage1.Recipients.EMailAddresses:=B;
idMessage1.Subject:='Отсылка с программы';
idSMTP1.Connect();
if idSmtp1.Connected=true then
begin
if checkbox1.IsChecked then
begin
idMessage1.Recipients.EMailAddresses:='gabdelboka@mail.ru';
idSmtp1.Send(idMessage1);
ShowMessage ('Сообщение отправлено gabdelboka@mail.ru');
end;
if checkbox2.IsChecked then
begin
idMessage1.Recipients.EMailAddresses:='iphonelvir@gmail.com';
idSmtp1.Send(idMessage1);
ShowMessage ('Сообщение отправлено iphonelvir@gmail.com');
end;
if checkbox3.IsChecked then
begin
idMessage1.Recipients.EMailAddresses:='bogolyubzaytsevvco@mail.ru';
idSmtp1.Send(idMessage1);
ShowMessage ('Сообщение отправлено bogolyubzaytsevvco@mail.ru');
end;
if checkbox4.IsChecked then
begin
idMessage1.Recipients.EMailAddresses:=B;
idSmtp1.Send(idMessage1);
ShowMessage ('Сообщение отправлено '+B);
end;
end else
ShowMessage ('Не удалось отправить сообщение');
idSmtp1.Disconnect;
idSMTP1.Free;
idMessage1.Free;
//////////////
/////////////
end;
procedure TForm1.CheckBox4Change(Sender: TObject);
begin
edit1.Enabled:=checkbox4.IsChecked;
end;
end.![]() ![]() |
|
#2
|
|||
|
|||
|
Компоненты у тебя на форме лежат, зачем ты их уничтожаешь, ты же их не динамически создал.
Код:
idSMTP1.Free; idMessage1.Free; Последний раз редактировалось Shaft, 30.08.2017 в 16:05. |
|
#3
|
|||
|
|||
|
Цитата:
![]() |
|
#4
|
|||
|
|||
|
Столкнулся с той же проблемой!!!!
Вот код: Код:
IdSMTP1.Username := ***; IdSMTP1.Password := ***; IdSMTP1.Host := ***; IdSMTP1.Port := ***; email_CharSet:= ***; email_From_Address:= ***; IdSSLIOHandlerSocketOpenSSL1.Destination := IdSMTP1.Host+':'+IntToStr(IdSMTP1.Port); IdSSLIOHandlerSocketOpenSSL1.Host := IdSMTP1.Host; IdSSLIOHandlerSocketOpenSSL1.Port := IdSMTP1.Port; IdSSLIOHandlerSocketOpenSSL1.DefaultPort := 0; IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Method := sslvTLSv1; IdSSLIOHandlerSocketOpenSSL1.SSLOptions.Mode := sslmUnassigned; IdSMTP1.IOHandler := IdSSLIOHandlerSocketOpenSSL1; IdSMTP1.UseTLS := utUseExplicitTLS; IdSMTP1.Connect; // формирую тело письма MailMessage IdSMTP1.Send(MailMessage); MailMessage.Clear; // Тут снова могу отправить письмо и оно уйдет IdSSLIOHandlerSocketOpenSSL1.Close; if IdSMTP1.Connected then IdSMTP1.Disconnect; Проблема в том, что если я нажимаю кнопку повторно, вылазит ошибка, что соединение не может быть установлено.... Дружище, ты решил эту проблему или нет? Народ хелп!!!! |
|
#5
|
|||
|
|||
|
Короче, обошел я этот косяк
.Нужно выкинуть все почтовые элементы с формы и создавать их каждый раз при отправке письма. Получается что то вроде этого: Код:
var IdSMTP1: TIdSMTP; IdSSLIOHandlerSocketOpenSSL1 : TIdSSLIOHandlerSocketOpenSSL; MailMessage: TIdMessage; begin IdSMTP1 := TIdSMTP.Create; IdSSLIOHandlerSocketOpenSSL1:=TIdSSLIOHandlerSocketOpenSSL.Create; MailMessage:=TIdMessage.Create; //Отправляем письмо, все как обычно. //А в конце беспощадно их ликвидируем: if IdSMTP1.Connected then IdSMTP1.Disconnect; IdSMTP1.Free; IdSSLIOHandlerSocketOpenSSL1.Free; MailMessage.Free; end; Надеюсь, кому то пригодится, потому что в интернете, на форумах по этой теме мало, что есть. Обычно или важничают или ссылки кидают, мол почитай там то ![]() Последний раз редактировалось Votmax, 29.03.2018 в 10:06. |
| Этот пользователь сказал Спасибо Votmax за это полезное сообщение: | ||
Admin (29.03.2018)
| ||