Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-06-2007
Avatar de adebonis
adebonis adebonis is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 145
Poder: 21
adebonis Va por buen camino
Guardar un correo electronio en disco con MAPI

Hola.

Estoy utilizando MAPI para enviar correos electrónicos sin ningún problema. Lo que ahora necesito es guardar el correo electrónico en disco (con la extensión .msg).

¿Se sabe cómo se puede realizar esto?

Saludos
Adolfo Bonis
Barcelona
Responder Con Cita
  #2  
Antiguo 16-06-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Mmmm....

mapi? que componente especificamente? o simplemente un "uses Mapi;" y si es así, me imagino que envias usando primero la API MAPILogon, y luego con la MAPISendMail... en tal caso tienes la estructura TMapiMessage que apunta al lpszNoteText a un texto que es el cuerpo que envías...

En tal caso puedes hacer lo siguiente (con APIs), al enviarse exitosamente:
Código Delphi [-]
var hFile, Dummy: Cardinal;
...
 hFile := CreateFile('sent007.msg', GENERIC_WRITE, 0, nil, CREATE_NEW, 0, 0);
 WriteFile(hFile, TMapiMessage.lpszNoteText^, StrLen(TMapiMessage.lpszNoteText), dummy, nil);
 CloseHandle(hFile);
...

Claro que TMapiMessage será el nombre de la estructura que utilices...

Espero sea lo que buscas, si no peganos un poco del código previo al evío del mail.
Un saludo!
Responder Con Cita
  #3  
Antiguo 18-06-2007
Avatar de adebonis
adebonis adebonis is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 145
Poder: 21
adebonis Va por buen camino
Hola.

Correcto, no utilizo ningún componente, sólo coloco en el uses el MAPI. DE heco lo que me interesaba es guardar en disco la estructura del mensaje. Lo mismo que hacen los clientes de correo al utilizar la opción del menú "Guardar como..." (outlook lo guarda con extensión .msg, Outollok Express con extensión .eml, etc.). Pero me parece que no existe ninguna función en MAPI que realice esto.

Estoy utilizando esta función.

Código Delphi [-]
function SendEMailMAPI(Handle: THandle; Mail: TStrings; Ver: Boolean): Cardinal;
type
  TAttachAccessArray = array [0..0] of TMapiFileDesc;
  PAttachAccessArray = ^TAttachAccessArray;
var
  MapiMessage: TMapiMessage;
  Receip: TMapiRecipDesc;
  Attachments: PAttachAccessArray;
  AttachCount: Integer;
  i1: integer;
  FileName: string;
  dwRet: Cardinal;
  MAPI_Session: Cardinal;
  WndList: Pointer;
begin
  dwRet := MapiLogon(Handle,
    PChar(''),
    PChar(''),
    MAPI_LOGON_UI or MAPI_NEW_SESSION,
    0, @MAPI_Session);

  if (dwRet <> SUCCESS_SUCCESS) then
  begin
    MessageBox(Handle,
      PChar('Error Al intentar mandar el Email'),
      PChar('Error'),
      MB_ICONERROR or MB_OK);
  end
  else
  begin
    FillChar(MapiMessage, SizeOf(MapiMessage), #0);
    Attachments := nil;
    FillChar(Receip, SizeOf(Receip), #0);

    if Mail.Values['to'] <> '' then
    begin
      Receip.ulReserved := 0;
      Receip.ulRecipClass := MAPI_TO;
      Receip.lpszName := StrNew(PChar(Mail.Values['to']));
      Receip.lpszAddress := StrNew(PChar('SMTP:' + Mail.Values['to']));
      Receip.ulEIDSize := 0;
      MapiMessage.nRecipCount := 1;
      MapiMessage.lpRecips := @Receip;
    end;

    AttachCount := 0;

    for i1 := 0 to MaxInt do
    begin
      if Mail.Values['attachment' + IntToStr(i1)] = '' then
        break;
      Inc(AttachCount);
    end;

    if AttachCount > 0 then
    begin
      GetMem(Attachments, SizeOf(TMapiFileDesc) * AttachCount);

      for i1 := 0 to AttachCount - 1 do
      begin
        FileName := Mail.Values['attachment' + IntToStr(i1)];
        Attachments[i1].ulReserved := 0;
        Attachments[i1].flFlags := 0;
        Attachments[i1].nPosition := ULONG($FFFFFFFF);
        Attachments[i1].lpszPathName := StrNew(PChar(FileName));
        Attachments[i1].lpszFileName :=
          StrNew(PChar(ExtractFileName(FileName)));
        Attachments[i1].lpFileType := nil;
      end;
      MapiMessage.nFileCount := AttachCount;
      MapiMessage.lpFiles := @Attachments^;
    end;
    if Mail.Values['subject'] <> '' then
      MapiMessage.lpszSubject := StrNew(PChar(Mail.Values['subject']));
    if Mail.Values['body'] <> '' then
      MapiMessage.lpszNoteText := StrNew(PChar(Mail.Values['body']));

    WndList := DisableTaskWindows(0);
    try
    if Ver then
      Result := MapiSendMail(Mapi_Session, Handle, MapiMessage, MAPI_DIALOG, 0)
    else
      Result := MapiSendMail(Mapi_Session, Handle, MapiMessage, 0, 0);
    finally
      EnableTaskWindows( WndList );
    end;
    if Result <> 0 then 
      Mensaje('Error al enviar el Correo ('+IntToStr(Result)+').')
    else
      if Ver = False then
        Mensaje('Correo enviado correctamente.');

    for i1 := 0 to AttachCount - 1 do
    begin
      StrDispose(Attachments[i1].lpszPathName);
      StrDispose(Attachments[i1].lpszFileName);
    end;

    if Assigned(MapiMessage.lpszSubject) then
      StrDispose(MapiMessage.lpszSubject);
    if Assigned(MapiMessage.lpszNoteText) then
      StrDispose(MapiMessage.lpszNoteText);
    if Assigned(Receip.lpszAddress) then
      StrDispose(Receip.lpszAddress);
    if Assigned(Receip.lpszName) then
      StrDispose(Receip.lpszName);
    MapiLogOff(MAPI_Session, Handle, 0, 0);
  end;
end;

Gracias y Saludos
Adolfo Bonis
Barcelona
Responder Con Cita
  #4  
Antiguo 18-06-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Lindo!

Cita:
Empezado por adebonis
...DE heco lo que me interesaba es guardar en disco la estructura del mensaje...
Osea que ya no lo necesitas?????

Cita:
Empezado por adebonis
...Lo mismo que hacen los clientes de correo al utilizar la opción del menú "Guardar como..." (outlook lo guarda con extensión .msg, Outollok Express con extensión .eml, etc.)...
En definitiva, lo que hacen estos programas lo "codificaron" ellos mismos como debieses hacerlo tu, mientras bajemos mas en nuestro nivel de programacion (APIs), ganamos más control y conocimientos pero a veces resulta que debemos realizar mas código.

Te aconsejo que hagas un "Mail.SaveToFile(''sent007.msg'')" al enviar exitosamente el mail.

Saludos.
Responder Con Cita
  #5  
Antiguo 17-08-2007
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 614
Poder: 17
ingabraham Va por buen camino
ayuda

SendEMailMAPI(handle,'ingeniero_abraham@hotmail.com',true)
que viene en handle
Responder Con Cita
  #6  
Antiguo 17-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por ingabraham Ver Mensaje
SendEMailMAPI(handle,'ingeniero_abraham@hotmail.com',true)
que viene en handle
Procura no utilizar mayusculas o negritas en tus posts ingabraham, es una falta a la Guia de estilo. Con respecto al Handle, es el manejador de la ventana, por ejemplo en el OnClick de un boton simplemente copias el código y estará tomando el manejador de tu ventana.
Responder Con Cita
  #7  
Antiguo 17-08-2007
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 614
Poder: 17
ingabraham Va por buen camino
Disculpa mi inquetud, Necesito un poq de Ayuda

procedure TForm1.Button1Click(Sender: TObject);
begin
SendEMailMAPI(handle,edit1.text,true);
end;



function SendEMailMAPI(Handle: THandle; Mail: TStrings; Ver: Boolean): Cardinal;

es una funcion, q tipo de dato devuelve a que se lo asigno, es una funcion que se llama pero no se como se llama.

Ayudame por favor, Te lo agradezco
Responder Con Cita
  #8  
Antiguo 17-08-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Bueno, el ejemplo que el señor adebonis dejo en éste hilo esta en muchos lugares del internet; desconozco la fuente inicial pero te puedo dejar un ejemplo muy bueno aquí (de la llamada claro).

Saludos.
Responder Con Cita
Respuesta



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
Documento word sin grabar a disco por correo LucianoRey Servers 10 16-10-2006 19:57:42
Enviar correo electronico mediante MAPI adebonis API de Windows 3 12-10-2006 08:38:25
Guardar/Cargar una configuracion (unos campos) en disco pepecharlie67 Varios 7 27-12-2005 11:24:44
Capturar el evento de guardar en disco magm2000 Impresión 1 29-07-2004 16:14:47
MAPI - Componente correo e-mail jmartinezg Internet 1 26-07-2003 18:34:50


La franja horaria es GMT +2. Ahora son las 21:19:15.


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