Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Enviar correo electronico mediante MAPI (https://www.clubdelphi.com/foros/showthread.php?t=36367)

adebonis 10-10-2006 03:18:35

Enviar correo electronico mediante MAPI
 
Hola a todos.

Estoy utilizando una función que reproduzco más abajo para enviar el correo electrónico mediante MAPI y me funciona a la perfección.

El caso es que esta función me presenta la ventana de envío del correo con todos los campos llenos y debo pulsar el botón de "enviar" para que éste se realice.

Lo que yo quisiera es que el envío se realizara directamente sin que aparezca esta ventana, bueno, que el usuario no tenga que realizar ninguna acción y que la función realizara efectivamente el envío.

Gracias.

Código Delphi [-]
function SendMailMAPI(const Subject, Body, FileName, SenderName, SenderEMail,
                  RecepientName, RecepientEMail: String): Integer;
var
  message: TMapiMessage;
  lpSender, lpRecepient: TMapiRecipDesc;
  FileAttach: TMapiFileDesc;
  SM: TFNMapiSendMail;
  MAPIModule: HModule;
begin
  FillChar(message, SizeOf(message), 0);
  with message do begin
    if (Subject<>'') then
      lpszSubject := PChar(Subject);
    if (Body<>'') then
      lpszNoteText := PChar(Body);
    if (SenderEMail<>'') then begin
      lpSender.ulRecipClass := MAPI_ORIG;
      if (SenderName='') then
        lpSender.lpszName := PChar(SenderEMail)
      else
        lpSender.lpszName := PChar(SenderName);
      lpSender.lpszAddress := PChar('SMTP:'+SenderEMail);
      lpSender.ulReserved := 0;
      lpSender.ulEIDSize := 0;
      lpSender.lpEntryID := nil;
      lpOriginator := @lpSender;
    end;
    if (RecepientEMail<>'') then begin
      lpRecepient.ulRecipClass := MAPI_TO;
      if (RecepientName='') then
        lpRecepient.lpszName := PChar(RecepientEMail)
      else
        lpRecepient.lpszName := PChar(RecepientName);
      lpRecepient.lpszAddress := PChar('SMTP:'+RecepientEMail);
      lpRecepient.ulReserved := 0;
      lpRecepient.ulEIDSize := 0;
      lpRecepient.lpEntryID := nil;
      nRecipCount := 1;
      lpRecips := @lpRecepient;
      end
    else
      lpRecips := nil;
    if (FileName='') then begin
      nFileCount := 0;
      lpFiles := nil;
      end
    else begin
      FillChar(FileAttach, SizeOf(FileAttach), 0);
      FileAttach.nPosition := Cardinal($FFFFFFFF);
      FileAttach.lpszPathName := PChar(FileName);
      nFileCount := 1;
      lpFiles := @FileAttach;
    end;
  end;
  MAPIModule := LoadLibrary(PChar(MAPIDLL));
  if MAPIModule = 0 then begin
    Result := -1;
  end
  else begin
    try
      @SM := GetProcAddress(MAPIModule, 'MAPISendMail');
      if @SM <> nil then
        Result := SM(0, Application.Handle, message, MAPI_DIALOG or MAPI_LOGON_UI, 0)
      else
        Result := 1;
    finally
      FreeLibrary(MAPIModule);
    end;
  end;
  if Result <> 0 then
    Mensaje('Error al enviar el Correo ('+IntToStr(Result)+').')
end;

dec 10-10-2006 04:50:03

Hola,

Cita:

Lo que yo quisiera es que el envío se realizara directamente sin que aparezca esta ventana, bueno, que el usuario no tenga que realizar ninguna acción y que la función realizara efectivamente el envío.
De MAPI no sé sino que existe... pero, utilizando los componentes IdSMTP e IdMessage de "los Indy" puedes enviar correo electrónico sin intervención alguna del usuario.

Puedes buscar por estos mismos Foros. Encontrarás varios ejemplos.

jachguate 10-10-2006 17:01:53

Si precisas de MAPI, me temo que el correo de cualquier forma necesitará intervención del usuario, al menos desde outlook, y probablemente desde otros clientes.

La razón: Que el usuario se entere que se está usando su equipo para enviar correo. Si podes conseguir que el usuario reciba simplemente una notificación de que será enviado correo para que autorice o no, cambiando el valor del cuarto parámetro, donde tenes MAPI_DIALOG or MAPI_LOGIN_UI por el valor MAPI_LOGON_UI

Hasta luego.

;)

adebonis 12-10-2006 08:38:25

Hola.

Al final he modificado el cuarto parámetro por el valor MAPI_LOGON_UI y el programa de correo no me muestra ya la ventana de dialogo.

Lo que si me muestra es una ventana solicitando la confirmación del envío del correo, pero esto ya me lo hacía cuando se visualizaba el correo a enviar.

De hecho en la aplicación dejo escoger al usuario la forma de enviar el correo e. Mapi o el propio de la aplicación (con los componentes Indy).

Gracias a todos.
Adolfo Bonis


La franja horaria es GMT +2. Ahora son las 21:39:06.

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