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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-11-2006
Avatar de Durbed
Durbed Durbed is offline
Miembro
 
Registrado: ago 2004
Posts: 166
Poder: 20
Durbed Va por buen camino
Enviar Email con MAPI y los campos cc y bcc (o cco)

Tengo una función que envia un email mediante el MAPI a un lista de direcciones, pero solo he conseguido meterlas en el campo "to" (para), y ahora me han pedido, que meta algunas direcciones en el campo bcc (cco), para que los destinatarios de los emails no vean a quien mas fue enviado.

La función es:
Código Delphi [-]
function SendEMail(Handle: THandle; Mail: TStrings): 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
    //Result := MapiSendMail(MAPI_Session, Handle,
    //  MapiMessage, MAPI_DIALOG, 0);
    Result := MapiSendMail(Mapi_Session, Handle, MapiMessage, MAPI_LOGON_UI, 0);
    finally
      EnableTaskWindows( WndList );
    end;

    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;


Y la llamada la realizo asi:
Código Delphi [-]
  ...   
  mail := TStringList.Create;
  For i := 0 To LBPara.Items.Count -1 Do
    destinatarios := destinatarios + LBPara.Items.Strings[i] + ', ';
  destinatarios := copy(destinatarios,1 , length(destinatarios)-2);
  try
    mail.values['to'] := destinatarios;
    mail.values['subject'] := EdAsunto.Text;
    mail.values['body'] := MCuerpo.Text;
    For i := 0 to LBAdjuntos.Items.Count -1 Do
      mail.values['attachment' + IntToStr(i)] := LBAdjuntos.Items.Strings[i];
    sendEMail(Application.Handle, mail);
  finally
    mail.Free;
  end;


Me da que debe ser una chorrada que se me ha debido pasar, pero bueno ya saben lo que dicen, 1000 ojos ven mas que dos

PD: La funcion no es mia, yo solo la he realizado pequeñisimos retoques, pero no me acuerdo de donde la saque, así que pido perdon al autor por no acordarme de el.

Un saludo y gracias
__________________
Intentando hacer algo con Delphi 7 y Firebird 1.5

Última edición por Durbed fecha: 18-11-2006 a las 12:37:36.
Responder Con Cita
 



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
Enviar correo electronico mediante MAPI adebonis API de Windows 3 12-10-2006 08:38:25
¿Por qué no puedo enviar el Email? Turboleta Internet 4 05-02-2006 23:03:41
enviar email con bcc raulmm26 Internet 1 03-11-2005 10:38:55
Enviar Email satabel Internet 1 02-08-2005 01:12:56
Al enviar email, Error 550, Por que? URBANO Internet 1 21-02-2005 09:04:50


La franja horaria es GMT +2. Ahora son las 05:42:52.


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