|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Мой клиент @mail на Indy. Нужна помощь
Привет всем)
Кароче, чисто из-за интереса написал простенькую программу. чтобы рассылать письма на почту, используя 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)
|