Abrir Cliente de Email Padrao

Delphi

17/05/2004

Olá!

Gostaria de saber se existe alguma DLL ou API que carregue o Cliente de Email Padrao e que nos permita formatar a mensagem (informando assunto, corpo da mensagem e , o mais importante, permitindo atachar um arquivo) ?

Se possível, uma solução que não necessite configuração de servidor smtp.

Agradeço desde já qualquer ajuda.

Abraços,
Daniel Almeida.


Dwng

Dwng

Curtidas 0

Respostas

Fer_nanda

Fer_nanda

17/05/2004

amigo a função só permite anexar um arquivo

function EnviarEmailPadrao(const De, Para, Assunto, Texto,
         Arquivo: string; Confirma: Boolean): Integer;
var
  Msg: TMapiMessage;
  lpSender, lpRecepient: TMapiRecipDesc;
  FileAttach: TMapiFileDesc;
  SM: TFNMapiSendMail;
  MAPIModule: HModule;
  Flags: Cardinal;
begin
  // cria propriedades da mensagem
  FillChar(Msg, SizeOf(Msg), 0);
  with Msg do
    begin
      if (Assunto <> ´´) then
        lpszSubject := PChar(Assunto);

      if (Texto <> ´´) then
        lpszNoteText := PChar(Texto);

      // remetente
      if (De <> ´´) then
        begin
          lpSender.ulRecipClass := MAPI_ORIG;
          lpSender.lpszName := PChar(De);
          lpSender.lpszAddress := PChar(De);
          lpSender.ulReserved := 0;
          lpSender.ulEIDSize := 0;
          lpSender.lpEntryID := nil;
          lpOriginator := @lpSender;
        end;

      // destinatário
      if (Para <> ´´) then
        begin
          lpRecepient.ulRecipClass := MAPI_TO;
          lpRecepient.lpszName := PChar(Para);
          lpRecepient.lpszAddress := PChar(Para);
          lpRecepient.ulReserved := 0;
          lpRecepient.ulEIDSize := 0;
          lpRecepient.lpEntryID := nil;
          nRecipCount := 1;
          lpRecips := @lpRecepient;
        end
      else
        lpRecips := nil;

      // arquivo anexo
      if (Arquivo = ´´) then
        begin
          nFileCount := 0;
          lpFiles := nil;
        end
      else
        begin
          FillChar(FileAttach, SizeOf(FileAttach), 0);
          FileAttach.nPosition := Cardinal($FFFFFFFF);
          FileAttach.lpszPathName := PChar(Arquivo);
          nFileCount := 1;
          lpFiles := @FileAttach;
        end;
    end;

  // carrega dll e o método para envio do email
  MAPIModule := LoadLibrary(PChar(MAPIDLL));

  if MAPIModule = 0 then
    Result := -1
  else
    try
      if Confirma then
        Flags := MAPI_DIALOG or MAPI_LOGON_UI
      else
        Flags := 0;

      @SM := GetProcAddress(MAPIModule, ´MAPISendMail´);

      if @SM <> nil then
        Result := SM(0, Application.Handle, Msg, Flags, 0)
      else
        Result := 1;
    finally
      FreeLibrary(MAPIModule);
    end;
end;


Espero ter ajudado


GOSTEI 0
Dwng

Dwng

17/05/2004

Primeiramente muito obrigado!

Quanto a limitação de 1 arquivo atachado: era sua necessidade ou você encontrou problemas?

Valeu Fernanda!

DWNG.


GOSTEI 0
Fer_nanda

Fer_nanda

17/05/2004

Por dificuldade...não consigo fazer com q a rotina trate mais q um arquivo para anexar...
if (Arquivo = ´´) then 
        begin 
          nFileCount := 0; 
          lpFiles := nil; 
        end 
      else 
        begin 
          FillChar(FileAttach, SizeOf(FileAttach), 0); 
          FileAttach.nPosition := Cardinal($FFFFFFFF); 
          FileAttach.lpszPathName := PChar(Arquivo); 
          nFileCount := 1; 
          lpFiles := @FileAttach; 
        end; 


Eu tentei fazer uma função separada só pra isso... mas não deu certo, na época uma das dicas q me passaram era pra fazer uma função recurssiva só para atachar os arquivos.. mas não consegui alterar a função.


Caso vc consiga mealguma coisa, ou alguém tiver alguma dica. Agradeço.


GOSTEI 0
POSTAR