для тех кто знает хорошо mapi + Thread

sanich
Дата: 12.11.2007 12:10:44
задача: нужно сфомировать в цикле множество писем для почтового дефолтово клинета, bat, через mapi.

Как я сделал:
//----------------------------------------------------------------------------------------------
procedure SendMail(RecipientName, RecipientAddress, MsgSubject, MsgText: string);
var
  Msg: TMapiMessage;
  Recipient: TMapiRecipDesc;
begin
  Recipient.ulReserved := 0;
  Recipient.ulRecipClass := MAPI_TO;
  Recipient.lpszName := PChar(RecipientName);
  Recipient.lpszAddress := PChar(RecipientAddress);
  Recipient.ulEIDSize := 0;
  Recipient.lpEntryID := nil;

  Msg.ulReserved := 0;
  Msg.lpszSubject := PChar(MsgSubject);
  Msg.lpszNoteText := PChar(MsgText);
  Msg.lpszMessageType := nil;
  Msg.lpszDateReceived := PChar(FormatDateTime('yyyy/mm/dd hh:nn', Date));
  Msg.flFlags := MAPI_UNREAD;
  Msg.lpOriginator := nil;
  Msg.nRecipCount := 1;
  Msg.lpRecips := @Recipient;
  Msg.nFileCount := 0;
  Msg.lpFiles := nil;

  MapiSendMail(0, Application.Handle, Msg, MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION, 0);
  exit;
end;

//----------------------------------------------------------------------------------------------
procedure printh(p: pointer);
var i:integer;
begin
  for i:=0 to 10 do
   SendMail('email','email','subject'+inttostr(i),'text');
  ExitThread(0);
end;

//----------------------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  h1: cardinal;
begin
  createthread(nil, 128, @printh, self, 0, h1);
end;


1-ая проблема такая:
После закрытия письма не вылетает сообщение сохранить/нет?Это мона как нибудь исправить?

2-ая проблема такая:
Запускается поток, отдельный от потока формы, первое письмо формируется, а остальные нет, когда закрываю первое письмо, формируется второе, т.е. если не закрыть текщуее письмо поток не создает следующие письма.
А надо сразу все вывести на экран.

Как это мона сделать?Хотелось бы в одном потоке в цикле выводить все письма, мона ли как нибудь после формирования письма разорвать связь поток-thebat?
sqvidler
Дата: 13.11.2007 10:13:22
В MAPI разбираться влом, тем не менее, два вопроса:

sanich

createthread(nil, 128, @printh, self, 0, h1);

ExitThread(0);

Это что за ужас?? TThread рулит...

Второе - с другими клиентами, например, Outlook Express, то же самое поведение?
sanich
Дата: 13.11.2007 10:52:00
sanich

createthread(nil, 128, @printh, self, 0, h1);

ExitThread(0);


Это создание потока без объявления класса Tthread.
с аутлуком та же беда, второе письмо не создается пока не будет закрыто первое.
sanich
Дата: 13.11.2007 12:29:28
Попробовал через объявление класса потока.

В потоке формы создаю в цикле 5 потоков, потоки создаются, в каждом потоке должно формироваться письмо, но формируется только первое, когда закрываю первое, открывается второе и.т.д

В чем может быть проблема?