Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.08.2017, 15:51
kamaliev kamaliev вне форума
Прохожий
 
Регистрация: 30.08.2017
Сообщения: 2
Версия Delphi: Delphi 10 Seatt
Репутация: 10
Восклицание Мой клиент @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.

Вложения
Тип файла: rar прога.rar (1,016.5 Кбайт, 3 просмотров)
Ответить с цитированием
  #2  
Старый 30.08.2017, 16:02
Shaft Shaft вне форума
Новичок
 
Регистрация: 15.05.2013
Сообщения: 74
Версия Delphi: 7/10.4
Репутация: 12
По умолчанию

Компоненты у тебя на форме лежат, зачем ты их уничтожаешь, ты же их не динамически создал.
Код:
idSMTP1.Free;
idMessage1.Free;
Или не уничтожай или пересоздавай вначале Button1Click

Последний раз редактировалось Shaft, 30.08.2017 в 16:05.
Ответить с цитированием
  #3  
Старый 30.08.2017, 16:13
kamaliev kamaliev вне форума
Прохожий
 
Регистрация: 30.08.2017
Сообщения: 2
Версия Delphi: Delphi 10 Seatt
Репутация: 10
По умолчанию

Цитата:
Сообщение от Shaft
Компоненты у тебя на форме лежат, зачем ты их уничтожаешь, ты же их не динамически создал.
Код:
idSMTP1.Free;
idMessage1.Free;
Или не уничтожай или пересоздавай вначале Button1Click
Shaft, при удалении появляется новая ошибка) странно....
Ответить с цитированием
  #4  
Старый 22.02.2018, 14:29
Votmax Votmax вне форума
Прохожий
 
Регистрация: 22.02.2018
Сообщения: 2
Версия Delphi: Delphi
Репутация: 10
По умолчанию

Столкнулся с той же проблемой!!!!

Вот код:
Код:
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  
Старый 29.03.2018, 09:57
Votmax Votmax вне форума
Прохожий
 
Регистрация: 22.02.2018
Сообщения: 2
Версия Delphi: Delphi
Репутация: 10
По умолчанию

Короче, обошел я этот косяк .

Нужно выкинуть все почтовые элементы с формы и создавать их каждый раз при отправке письма.

Получается что то вроде этого:

Код:
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)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter