Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-10-2006
Avatar de adebonis
adebonis adebonis is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 145
Poder: 21
adebonis Va por buen camino
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;
Responder Con Cita
  #2  
Antiguo 10-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 10-10-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 12-10-2006
Avatar de adebonis
adebonis adebonis is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 145
Poder: 21
adebonis Va por buen camino
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
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Fallo al enviar correo electrónico User_Baja_2 Internet 1 04-02-2006 23:54:34
Plantilla por Correo Electronico TONIAM Internet 8 20-10-2005 15:59:45
Script Para Enviar Correo Electronico mel_618 PHP 2 11-10-2004 10:07:36
MAPI - Componente correo e-mail jmartinezg Internet 1 26-07-2003 18:34:50
Correo electrónico Periyo Internet 2 12-05-2003 10:36:42


La franja horaria es GMT +2. Ahora son las 00:32:09.


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
Copyright 1996-2007 Club Delphi