RESPUESTA A LA PREGUNTA 1187 - DELPHI Esta Función te permitirá activar el cliente MAPI Predeterminado, Existe un componente FreeWare encapsula esta función y hace mucho mas simple el manejo (TEmail2 creo), No recuerdo desde donde la bajé pero si preferis eso, pedimelo a mi dirección y te la envío. Si necesitas el cuerpo del mail con formato podes generar un archivo HTML y pasar su ruta en attach_ffullname o bien pasar el contenido en Data para texto sin formato. Si DIALOG = True Presenta la ventana de redacción antes de enviarlo o ponerlo en bandeja de salida. Espero que sea esto lo que buscas, Saludos function SendSimpleMail(to_name, to_addr: String; cc_name, cc_addr: TStrings; bcc_name, bcc_addr: TStrings; subject,data: String; attach_ffullname: TStrings; Dialog:Boolean): Boolean; const MaxRecipListSize = Maxint div sizeof(TMapiRecipDesc); MaxFileListSize = Maxint div sizeof(TMapiFileDesc); type TMapiRecipDescList = array[0..MaxRecipListSize-1] of TMapiRecipDesc; PMapiRecipDescList = ^TMapiRecipDescList; TMapiFileDescList = array[0..MaxFileListSize-1] of TMapiFileDesc; PMapiFileDescList = ^TMapiFileDescList; var lpszlst: TList; rcps: PMapiRecipDescList; attach: PMapiFileDescList; mmsg: TMapiMessage; rcps_count,cc_count,bcc_count,attach_count: Integer; i,r: Integer; function AllocLpsz(lst: TList; str:String): Pointer; var p: pointer; begin p:= nil; GetMem(p, Length(str)+1); StrPCopy(p, str); lst.Add(p); Result:=p; end; procedure FillMapiDesc(var rd:TMapiRecipDesc; cl:Integer; name,addr:PChar); begin with rd do begin ulReserved := 0; ulRecipClass:= cl; lpszName:= name; lpszAddress:= addr; ulEIDSize:= 0; lpEntryID:= nil; end; end; begin try lpszlst:= TList.Create; rcps:= nil; cc_count:=0; bcc_count:=0; rcps:=nil; attach_count:=0; attach:=nil; if (cc_name<>nil) and ((cc_addr=nil) or (cc_name.Count = cc_addr.Count)) then cc_count:= cc_name.Count; if (bcc_name<>nil) and ((bcc_addr=nil) or (bcc_name.Count = bcc_addr.Count)) then bcc_count:= bcc_name.Count; rcps_count:= 1 + cc_count + bcc_count; GetMem(rcps, Sizeof(TMapiRecipDesc)*rcps_count); // set recip TO: FillMapiDesc(rcps[0],MAPI_TO, AllocLpsz(lpszlst,to_name), AllocLpsz(lpszlst,to_addr)); // set recip CC: for i:= 0 to cc_count-1 do if (cc_addr<>nil) and (cc_addr[i]<>'') then FillMapiDesc(rcps[1+i], MAPI_CC, AllocLpsz(lpszlst,cc_name[i]), AllocLpsz(lpszlst,cc_name[i]) ) else FillMapiDesc(rcps[1+i], MAPI_CC, AllocLpsz(lpszlst,cc_name[i]), nil); // set recip BCC: for i:= 0 to bcc_count-1 do if (bcc_addr<>nil) and (bcc_addr[i]<>'') then FillMapiDesc(rcps[cc_count+1+i], MAPI_BCC, AllocLpsz(lpszlst,bcc_name[i]), AllocLpsz(lpszlst,bcc_name[i]) ) else FillMapiDesc(rcps[cc_count+1+i], MAPI_BCC, AllocLpsz(lpszlst,bcc_name[i]), nil ); // set attach list: attach_count:= 0; if (attach_ffullname<>nil) then begin attach_count:= attach_ffullname.Count; GetMem(attach, sizeof(TMapiFileDesc)*attach_count); for i:=0 to attach_count-1 do begin with attach[i] do begin ulReserved:= 0; flFlags:= 0; nPosition:= Cardinal(-1); lpszPathName:= AllocLpsz(lpszlst,attach_ffullname[i]); lpszFileName:= AllocLpsz(lpszlst,ExtractFileName(attach_ffullname[i])); lpFileType:= nil; end; end; end; with mmsg do begin ulReserved:= 0; lpszSubject:= AllocLpsz(lpszlst,subject); lpszNoteText:= AllocLpsz(lpszlst,data); lpszMessageType:= nil; lpszDateReceived:= nil; lpszConversationID:= nil; flFlags:= 0; lpOriginator:= nil; nRecipCount:= rcps_count; lpRecips:= @rcps[0]; nFileCount:= attach_count; lpFiles:= @attach[0]; end; if Dialog then r:=MapiSendMail(0,0, mmsg, MAPI_DIALOG or MAPI_LOGON_UI or MAPI_NEW_SESSION,0) else r:=MapiSendMail(0,0, mmsg, MAPI_LOGON_UI,0); Result:=(r=0); finally FreeMem(rcps); FreeMem(attach); for i:=0 to lpszlst.Count-1 do FreeMem(lpszlst.Items[i]); lpszlst.Free; end;//endtry end; José Oronas oronas@usa.net