Avatar billede martin_andersen Nybegynder
02. december 2002 - 11:32 Der er 11 kommentarer

MapiSendMail - problem med "Winmail.dat"

Min applikation benytter MapiSendMail til
at send mails. Problemmet er at disse mails
i de fleste tilfælde har tilknyttet filen
"WinMail.dat". Det vil jeg meget gerne undgå.

Jeg ved at det har noget med tekst-formatet at gøre, men hvordan kan jeg styre det med
MapiSendMail?

På forhånd tak.
Avatar billede morten_s Nybegynder
02. december 2002 - 12:11 #1
Hej Martin

Jeg har fået denne funktion af Jens B. engang, med den har jeg aldrig set det nævnte problem

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(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(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
    Result := -1
  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 not Result in [0,1] then
    MessageDlg('Error sending mail ('+IntToStr(Result)+').', mtError, [mbOk],  0)
end;
Avatar billede martin_andersen Nybegynder
02. december 2002 - 15:40 #2
Kan du give et eks. på et kald til ovenstående funktion?
Jeg kan ikke få den til at fungere...
Avatar billede morten_s Nybegynder
02. december 2002 - 17:27 #3
Nedenståend kald sender en mail til mig ;-)

SendMailMAPI('Overskrift på mail','','','','','','ms@ms-consult.dk')
Avatar billede martin_andersen Nybegynder
02. december 2002 - 17:36 #4
Jeg har brugt din funktion(den lignede det jeg havde i forvejen) men...

Jeg får mailen tilbage i hovedet og jeg får denne fejl:     
"'man@des.dk' den 12/2/02 5:35 PM Der var ingen transportprovider tilgængelig, der kunne levere til denne modtager."

Er det mig der har misset noget eller?
Avatar billede morten_s Nybegynder
02. december 2002 - 18:03 #5
Åbner den ikke en mail side?

prøv og send den til mig
Avatar billede martin_andersen Nybegynder
03. december 2002 - 10:00 #6
Jo... det gør den, men hvis jeg trykker "send" så kommer ovenstående fejl!
Har det noget at gøre med, hvordan jeg er logget på eller?
Avatar billede morten_s Nybegynder
03. december 2002 - 10:03 #7
ved det ikke har aldrig set det problem før
Avatar billede pigbear Nybegynder
16. december 2002 - 15:24 #8
Hej
Må jeg spørge i hvilken unit TMapiMessage typen ligger i ?

Mvh

PigBear
Avatar billede cougar Nybegynder
16. december 2002 - 15:26 #9
Det der typisk er problem med Outlook (som jo er MAPI) er at hvis man sender i standard format dvs. RTF format, til klienter som ikke understøtter dette. Så er resultatet en winmail.dat fil.
Man skal sende i HTML eller plain text format for at undgå dette. Ved dog ikke lige hvor dette scriptes.
Avatar billede morten_s Nybegynder
16. december 2002 - 15:42 #10
pigbear>De ligger i uniten MAPI
Avatar billede martin_andersen Nybegynder
16. december 2002 - 15:47 #11
TMapiMessage ligger overraskende i "Mapi" :-)

Ok.. Jeg er nu kommet lidt videre.
hvis jeg benytter MapiLogOn/MapiLogOff omkring mit kald, så fungere
din(morten s) funktion. Men problemmet med "Winmail.dat" lever stadig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester