Array
(
)

MAPI com html

Rodrigo Lopez
   - 07 fev 2006

Estou criando uma tela de envio de e-mail pelo delphi utilizando MAPI, estou com o seguinte problema:

No corpo da mensagem (body), eu coloco um texto formatado, e para isso, estou anexando um arquivo HTML, pois conforme li em um artigo no fórum, ele coloca o HTML como corpo se o primeiro anexo for esse HTML. Até ai tudo bem, pois realmente funcionou, mas se incluo um outro anexo, ele não mostra nada no corpo da mensagem e mostra os dois anexos!

Alguém pode me ajudar?


Rodrigo Lopez
   - 08 fev 2006

o código que estou usando para enviar e-mail é o seguinte :

function TForm1.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(´Erro tentando mandar E-Mail...´), 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[´anexo´ + 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[´anexo´ + 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);
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;


Para executar a função :


procedure TForm1.Button1Click(Sender: TObject);
var
Mail : TStringList;
begin

Mail := TStringList.Create;
try
Mail.values[´to´] := ´teste@teste.com.br´;
Mail.values[´subject´] := ´TESTE´;
Mail.Values[´body´] := ´´;

Mail.Values[´anexo0´] := ´C:\teste.html´;
// Mail.Values[´anexo1´] := ´C:\teste.txt´;
SendEmail(Application.Handle, mail);
finally
Mail.Free;
end;

end;


Vi no fórum uma pergunta parecida neste tópico http://forum.devmedia.com.br/viewtopic.php?t=64700&highlight=mapi&sid=e840d9bc3ba2491ee5c3185a458b1b34 , mas ainda não consegui


Rodrigo Lopez
   - 09 fev 2006

niguém pode me ajudar?