Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Shellexecute y Outlook 2003 (https://www.clubdelphi.com/foros/showthread.php?t=63143)

toni.vi 30-01-2009 23:28:18

Shellexecute y Outlook 2003
 
Hola,
Desde hace bastante tiempo esta funcionando el envio de emails con un archivo adjunto con OutLook 97 y 2002, pero al cambiar a 2003, deja de funcionar y da un mensaje de:
Argumento no valido en linea de comandos. Compruebe el modificador que esta usando.
He buscado por todos los foros y no he encontrado solución, el código es de sobras conocido.
Código Delphi [-]
Var
MailTo:String;
Body:String;
Archivo:String;
CC:String;
begin
MailTo := 'usuario@aaaaa.com';
Body := 'Cuerpo del mensaje';
Archivo := 'c:\fichero.pdf';
CC := 'usuario@bbbbb.com';

ShellExecute( Self.Handle, 'open',
PChar(
'mailto:' + Trim( MailTo )
+ '?subject=' + 'Reporte de Servicio Diario'
+ '&body=' + Body
+ CC
+ '&Attach="' + Archivo + '"'
),
nil,
nil,
SW_SHOW );

¿Alguien sabe si hay solución para Outlook 2003 con Shellexecute?
Con los Indy funciona bien, pero no queda constancia en elementos enviados, que para este caso es necesario.
Gracias.

ContraVeneno 31-01-2009 17:28:38

Código Delphi [-]
Uses Outlook2000
...
Function Tfrm.EnviarCorreo(const Titulo, Mensaje, NombreArchivo, NombreArchivoCompleto, 
                                      CorreoDestino, CorreoAlterno: String; AutoEnvio: Boolean): Boolean;
var
Outlook: _Application;
AFolder : MAPIFolder;
ANameSpace : _NameSpace;
AMailItem : _MailItem;
AAttachments : Attachments;
AppWasRunning: boolean; //Comprobar ejecución de outlook
lcid: integer; //ID usuario
Unknown: IUnknown;
Resultado: HResult;
begin
 lcid := LOCALE_USER_DEFAULT;
 //----
 Resultado := GetActiveObject(CLASS_OutlookApplication, nil, Unknown);
 if (Resultado = MK_E_UNAVAILABLE) or (AppWasRunning) then
  Outlook := CoOutlookApplication.Create
 else begin
  OleCheck(Resultado); // Comprobar que se generó el objeto
  OleCheck(Unknown.QueryInterface(_Application, Outlook));
  AppWasRunning := True; // Establece que outlook esta ejecutándose
 end;
 //Obtener Sesión
 ANameSpace := Outlook.Get_Session;
 //Obtener bandeja de entrada
 AFolder := ANameSpace.GetDefaultFolder(olFolderInbox);

 //Muestra la carpeta de entrada
 //AFolder.Display;

 //Genera un nuevo correo
 AMailItem := (Outlook.CreateItem(olMailItem) as MailItem);
 AMailItem.To_ := CorreoDestino;
 AMailItem.CC := CorreoAlterno;
 AMailItem.Subject := Titulo;
 AMailItem.Body := Mensaje;

 AAttachments := AMailItem.Get_Attachments;

 //Agregar adjuntos en caso de que existan
 if (Length(NombreArchivoCompleto) > 0) then begin
  AAttachments.Add(NombreArchivoCompleto,$00000001 ,
  Length(Mensaje)+1,NombreArchivo);
 end;

 AMailItem.Save;
 If AutoEnvio then begin
   Try
    AMailItem.Send;
    Result := True;
    except on E:EExternal do begin
      Result := False;
    end;
   end;
 end else begin
  try
   AMailItem.Display(0);
   Result := True;
   except on E:EExternal do begin
    Result := False;
    Raise;
   end;
  end;
 end;
 //MessageDlg('Correo Enviado Correctamente',mtinformation,[mbok],0);
 // Outlook.Quit; //Cierra Outlook
end;

No recuerdo de donde exactamente obtuve ese código, pero me funciona en todas las versiones del Outlook 2000, 2003 y 2007.

toni.vi 31-01-2009 22:15:47

Gracias.
Esto funciona bien.
La única cosa que falta y era importante respecto a Shellexecute, es la firma del usuario que envía el email, antes salía automáticamente y ahora no sale.
¿Sabes si es posible?.
Por cierto he tenido que bloquear la línea:
Código SQL [-]
Resultado := GetActiveObject(CLASS_OutlookApplication, nil, Unknown);
porque me da error al compilar y no se que unit necesito.

pborges36 18-02-2009 15:10:36

Solo queria agradecer a CotraVeneno por este post. Me resulto sumamente util.
En verdad es mucho mejor buscar priemro en el foro ante que escribir un hilo nuevo.
Muchas gracias ContraVeneno y a los miembros del foro en general.
Saludos.

marilinspi 07-06-2011 16:34:30

hola, no consigo que me adjunte el archivo... que puese ser?
este es el codigo:
Cita:

Var
MailTo:String;
Body:String;
Archivo:String;
CC:String;
begin
MailTo := 'm@hotmail.com';
Body := 'Cuerpo del mensaje';
Archivo := 'C:\143.pdf';
CC := ' Hola';
ShellExecute( Self.Handle, 'open',
PChar(
'mailto:' + Trim( MailTo )
+ '?subject=' + 'Reporte de Servicio Diario'
+ '&body=' + Body
+ CC
+ '&Attach='' + Archivo + '''),
nil,
nil,
SW_SHOW );
gracias desde ya... espero una pronta respuesta.


La franja horaria es GMT +2. Ahora son las 16:20:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi