Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2015, 15:30   #1
DKENT
Форумчанин
 
Регистрация: 09.09.2010
Сообщений: 114
Стрелка При создании потока программа виснет

Доброго дня!
При создании потока на отправку email письма программа виснет, не могу понять в чем проблема, прошу помощи.
Заранее благодарен!!!

Код:
TNewThread = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

var
  Form1: TForm1;
  SMTP    : TIdSMTP;
  msg     : TIdMessage;
  SSLOpen : TIdSSLIOHandlerSocketOpenSSL;
  NewThread: TNewThread;
implementation

{$R *.dfm}



procedure TNewThread.Execute;
begin
 SMTP := TIdSMTP.Create(Application);
  SMTP.Host := 'smtp.mail.ru';
  SMTP.AuthType := atDefault;
  SMTP.Port := 465;
  SMTP.Username := 'test@mail.ru';
  SMTP.Password := 'password';


  SSLOpen := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  SSLOpen.Destination := SMTP.Host+':'+IntToStr(SMTP.Port);
  SSLOpen.Host := SMTP.Host;
  SSLOpen.Port := SMTP.Port;
  SSLOpen.DefaultPort := 0;
  SSLOpen.SSLOptions.Method := sslvSSLv23;
  SSLOpen.SSLOptions.Mode := sslmUnassigned;

  SMTP.IOHandler := SSLOpen;
  SMTP.UseTLS := utUseImplicitTLS;

  msg := TIdMessage.Create(Application);
  msg.Subject :=ANSI2KOI8R('test email');
  msg.ContentType:='text/html';
  msg.CharSet := 'Windows-1251';
  msg.ContentTransferEncoding := '8bit';
  msg.Body.Text:=ANSI2KOI8R('Hello, world!');
  msg.From.Address := 'test@mail.ru';
  msg.From.Name :=ANSI2KOI8R('Support);
  msg.Recipients.EMailAddresses := 'test@yandex.ru';

  SMTP.Connect;
  if SMTP.Connected then
    begin
      SMTP.Send(msg);
      ShowMessage ('Сообщение отправлено');
    end else
      ShowMessage ('Ошибка');
  SMTP.Disconnect();
  SMTP.Free;
  msg.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  NewThread:=TNewThread.Create(false);
   NewThread.FreeOnTerminate:=true;
  NewThread.Priority:=tpLower;
  NewThread.Resume;
end;
Также не выводятся окна showmessage!
DKENT вне форума Ответить с цитированием
Старый 23.05.2015, 16:04   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
SMTP.Connect;
Тут видимо виснет.
А ты пробовал трассировку делать? Всмысле где программа тупит.
Цитата:
SMTP.Port := 465;
Точно 456?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.05.2015, 16:26   #3
DKENT
Форумчанин
 
Регистрация: 09.09.2010
Сообщений: 114
По умолчанию

Смысл в том что без потока все нормально работает, а когда создаю поток то начинает виснуть программа!
Я так думаю дело в самом потоке, а вот что именно понять не могу(

На счет порта точно!
Сообщение доходит и я его вижу на почте!
DKENT вне форума Ответить с цитированием
Старый 23.05.2015, 18:14   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ерунда какая-то... Я у себя SMTP в потоках использую, никогда не висло, если связь есть. И потом, поток вешающий основную программу, это нонсенс...
Хотя... Замени ShowMessage на MessageBox(). Она все равно не работает в потоках нормально, вот может она тебе все и вешает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.05.2015, 18:48   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Я бы и MessageBox не рискнул так просто в потоке. Как минимум через метод Synchronize, что должно работать, но тоже коряво. Окна и в потоке - нонсенс. Основной форме сообщение отправить лучше и она пусть сама уже пользователя информирует о работе потоков. Или в лог писать инфу о событиях в потоке
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2015, 19:14   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что должно работать, но тоже коряво.
Не, с этим без проблем. Давно его в потоке использую, никогда глюков не было с Винапи.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.05.2015, 19:58   #7
DKENT
Форумчанин
 
Регистрация: 09.09.2010
Сообщений: 114
По умолчанию

Проблема кроется где то в этих строках
Код:
form1.IdSMTP1.Connect;
  if form1.IdSMTP1.Connected then
    begin
      form1.IdSMTP1.Send(msg);
      form1.Memo1.text:='Сообщение отправлено';
Если убираю строчку отправки самого сообщения то все начинает работать!
В чем проблема может быть?
DKENT вне форума Ответить с цитированием
Старый 23.05.2015, 19:59   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Не, с этим без проблем
Там не проблемы, а корявость в смысле - не фиг оконные сообщения в потоке городить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2015, 21:16   #9
DKENT
Форумчанин
 
Регистрация: 09.09.2010
Сообщений: 114
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Там не проблемы, а корявость в смысле - не фиг оконные сообщения в потоке городить
Вы правы, исправил, все заработало!Спасибо)
DKENT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Виснет программа! Fahman Общие вопросы Delphi 3 06.01.2014 16:41
c++/clr windowsforms Программа виснет при OpenFileDialog revaldo666 Windows Forms 1 19.07.2012 12:38
Виснет программа Mrsqler Работа с сетью в Delphi 32 10.07.2012 10:41
Потоки: неверный дескриптор(6) при создании потока [MoNAMur] Общие вопросы Delphi 4 08.11.2011 12:05
Программа виснет при исполнении цикла Dima_D Общие вопросы Delphi 9 16.08.2010 23:45