Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Outllook 365 MAPI HTML (https://www.delphipraxis.net/208324-outllook-365-mapi-html.html)

haentschman 14. Jul 2021 15:45

Outllook 365 MAPI HTML
 
Hallöle...8-)
Nach der Umstellung auf Outlook werden meine Mails über MAPI aus dem Programm heraus im Outlook als Text interpretiert! :evil: ..selbst David konnte das! Im Client ist HTML als Standard definiert. Alle direkten Mails werden korrekt dargestellt...

Welche einfachen Möglichkeiten habe ich? Geht das mit CleverComponents an den Standard Client? :gruebel: Ich habe noch nichts gefunden.:?

Content:

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
   <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-8">
</HEAD>
<BODY LANG="de-DE" TEXT="#000000" DIR="LTR">
<TABLE COLS=2 WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 STYLE="page-break-before: always">
   <COL WIDTH=450>
   <COL WIDTH=450>
   <TR>
      <TD HEIGHT=20 BGCOLOR="#1618A1">
         <P ALIGN=LEFT><FONT FACE="Arial" COLOR="#ffffff" SIZE=3>Blubb</FONT></P>
      </TD>
      <TD BGCOLOR="#1618A1">
         <P ALIGN=LEFT><FONT FACE="Arial" COLOR="#ffffff" SIZE=3>Serviceauftrag Nr.: #SNR</FONT></P>
      </TD>
   </TR>
   <TR>
      <TD HEIGHT=25   BGCOLOR="#1618A1">
        <TABLE COLS=1 WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 STYLE="page-break-before: always">
           <TR>
          <TD>
               <P ALIGN=LEFT><FONT FACE="Arial" COLOR="#ffffff" SIZE=3>Bla Str. 4</FONT></P>
            </TD>
           </TR>
           <TR>
          <TD>
               <P ALIGN=LEFT><FONT FACE="Arial" COLOR="#ffffff" SIZE=3>08150 JwD</FONT></P>
            </TD>
           </TR>
         </TABLE>   
      </TD>
      <TD BGCOLOR="#1618A1">
         <BR>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <BR>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <P ALIGN=LEFT><FONT FACE="Arial" SIZE=3>Sehr geehrte Damen und Herren,</FONT></P>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <P ALIGN=LEFT><FONT FACE="Arial" SIZE=3>die St&ouml;rung mit der Nummer: #SNR   wurde abgeschlossen.</FONT></P>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <BR>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
        <TABLE COLS=1 WIDTH=100% BORDER=0 CELLPADDING=2 CELLSPACING=0 STYLE="page-break-before: always">
           <TR>
          <TD>
               <P ALIGN=LEFT><FONT FACE="Arial" SIZE=3>#STNAME / Filiale: #STFILIALE</FONT></P>
            </TD>
           </TR>
           <TR>
          <TD>
               <P ALIGN=LEFT><FONT FACE="Arial" SIZE=3>#STSTRASSE</FONT></P>
            </TD>
           </TR>
            <TR>
          <TD>
               <P ALIGN=LEFT><FONT FACE="Arial" SIZE=3>#STPLZ #STORT</FONT></P>
            </TD>
           </TR>
         </TABLE>   
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <BR>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <P ALIGN=LEFT><FONT FACE="Arial" SIZE=3>Wir danken f&uuml;r Ihren Auftrag.</FONT></P>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <BR>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#1618A1">
         <P ALIGN=LEFT><FONT FACE="Arial" COLOR="#ffffff" SIZE=3>Das ist eine automatisch generierte
         Mail. Bitte antworten sie nicht darauf.</FONT></P>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#1618A1">
         <P ALIGN=LEFT><FONT FACE="Arial" COLOR="#ffffff" SIZE=3>F&uuml;r Fragen, R&uuml;ckmeldungen
         oder Informationen benutzen sie bitte die Mailadresse:
         <A HREF="mailto:bla@Blubb.de" style="color:#A9A9A9">Bla@Blubb.de</A></FONT></P>
      </TD>
   </TR>
</TABLE>
</BODY>
</HTML>
Delphi-Quellcode:
FMailStandardClient: TSendMail;
...
function TToolsMail.SendMailClient: Boolean;

  procedure FillMailRecipents;
  var
    I: Integer;
    RecipientItem: TCollectionItem;
  begin
  {$REGION 'Code'}
    FMailStandardClient.Recipients.Clear;
    for I := 0 to FMailMessage.ToList.Count - 1 do
    begin
      RecipientItem := FMailStandardClient.Recipients.Add;
      TRecipientItem(RecipientItem).Address := FMailMessage.ToList.Items[I].Email;
      TRecipientItem(RecipientItem).DisplayName := TTools.GetDocumentPathWithoutPath(TRecipientItem(RecipientItem).Address, conSEAMMailNameWithout);
      TRecipientItem(RecipientItem).RecipientType := rtPrimary;
    end;
  {$ENDREGION}
  end;

  procedure FillMailAttachments;
  var
    I: Integer;
  begin
  {$REGION 'Code'}
    FMailStandardClient.Attachments.Clear;
    for I := 0 to FAttachments.Count - 1 do
    begin
      FMailStandardClient.Attachments.Add(FAttachments[I]);
    end;
  {$ENDREGION}
  end;

  procedure FillMailBody;
  begin
  {$REGION 'Code'}
    FMailStandardClient.Subject := FMailMessage.Subject;
    FMailStandardClient.Text := FMailMessage.Html.Strings;
  {$ENDREGION}
  end;

begin
  Result := True;
  try
    FMail.Open; //CleverComponents
    try
      CreateMailMessage; //CleverComponents
      // Übertrag in TSendMail
      FillMailBody;
      FillMailRecipents;
      FillMailAttachments;

      if FMailStandardClient.Execute then
      begin
        WriteMailDB;
        if Assigned(FOnMailSend) then
        begin
          FOnMailSend(Self, FMailMessage.ToList.EmailAddresses, FMailMessage.Subject);
        end;
      end;
    finally
      FMail.Close;
    end;
  except
    on E: Exception do
    begin
      if Assigned(FOnMailError) then
      begin
        FOnMailError(Self, FReceipients, FMailMessage.Subject, E.Message);
      end;
      Result := False;
    end;
  end;
end;

Bernhard Geyer 14. Jul 2021 16:28

AW: Outllook 365 MAPI HTML
 
Check mal deinen html-Code

https://validator.w3.org/check

Bekomme 5 Fehler und 1 Warnung.
U.u. sagt sich outlook: html-Fehlerhaft. Dann lieber nur Text anzeigen.

haentschman 15. Jul 2021 05:46

AW: Outllook 365 MAPI HTML
 
Moin...8-)

Die Idee ist schon mal gut...aber: 4 "Checker" kommen bei der gleichen Datei zu unterschiedlichen Ergebnissen. (bis zu 15 Fehlern :shock:)...so viele Zeilen hat das HTML nicht mal. :zwinker:

Auf was soll man sich verlassen? :roll:

Jeder Browser und jeder Mail Client, außer Outlook beim "Erstellen" der Mail über MAPI, zeigen das HTML an.

Klapauzius 15. Jul 2021 09:05

AW: Outllook 365 MAPI HTML
 
Zitat:

Zitat von haentschman (Beitrag 1492314)
...
Auf was soll man sich verlassen? :roll:
...

ich würde mich da schon auf https://validator.w3.org/check verlassen.
Ein kurzer Check mit der Korrektur der angemeckerten Elemente (mir gefällt zwar mehr als das angemeckerte nicht, _ich_ würde mehr abändern) ergibt folgenden validen HTML Code:

Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
   <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-8">
   <TITLE></TITLE>
</HEAD>
<BODY LANG="de-DE" TEXT="#000000" DIR="LTR">
<TABLE BORDER=0 CELLPADDING=2 CELLSPACING=0 STYLE="page-break-before: always, WIDTH:100%">
   <COL WIDTH=450>
   <COL WIDTH=450>
   <TR>
      <TD HEIGHT=20 BGCOLOR="#1618A1">
         <P ALIGN=LEFT><FONT FACE="Arial" COLOR="#ffffff" SIZE=3>Blubb</FONT></P>
      </TD>
      <TD BGCOLOR="#1618A1">
         <P ALIGN=LEFT><FONT FACE="Arial" COLOR="#ffffff" SIZE=3>Serviceauftrag Nr.: #SNR</FONT></P>
      </TD>
   </TR>
   <TR>
      <TD HEIGHT=25   BGCOLOR="#1618A1">
        <TABLE BORDER=0 CELLPADDING=2 CELLSPACING=0 STYLE="page-break-before: always, width:100%">
           <TR>
          <TD>
               <P ALIGN=LEFT><FONT FACE="Arial" COLOR="#ffffff" SIZE=3>Bla Str. 4</FONT></P>
            </TD>
           </TR>
           <TR>
          <TD>
               <P ALIGN=LEFT><FONT FACE="Arial" COLOR="#ffffff" SIZE=3>08150 JwD</FONT></P>
            </TD>
           </TR>
         </TABLE>  
      </TD>
      <TD BGCOLOR="#1618A1">
         <BR>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <BR>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <P ALIGN=LEFT><FONT FACE="Arial" SIZE=3>Sehr geehrte Damen und Herren,</FONT></P>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <P ALIGN=LEFT><FONT FACE="Arial" SIZE=3>die St&ouml;rung mit der Nummer: #SNR  wurde abgeschlossen.</FONT></P>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <BR>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
        <TABLE BORDER=0 CELLPADDING=2 CELLSPACING=0 STYLE="page-break-before: always, width:100%">
           <TR>
          <TD>
               <P ALIGN=LEFT><FONT FACE="Arial" SIZE=3>#STNAME / Filiale: #STFILIALE</FONT></P>
            </TD>
           </TR>
           <TR>
          <TD>
               <P ALIGN=LEFT><FONT FACE="Arial" SIZE=3>#STSTRASSE</FONT></P>
            </TD>
           </TR>
            <TR>
          <TD>
               <P ALIGN=LEFT><FONT FACE="Arial" SIZE=3>#STPLZ #STORT</FONT></P>
            </TD>
           </TR>
         </TABLE>  
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <BR>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <P ALIGN=LEFT><FONT FACE="Arial" SIZE=3>Wir danken f&uuml;r Ihren Auftrag.</FONT></P>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#ffffff">
         <BR>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#1618A1">
         <P ALIGN=LEFT><FONT FACE="Arial" COLOR="#ffffff" SIZE=3>Das ist eine automatisch generierte
         Mail. Bitte antworten sie nicht darauf.</FONT></P>
      </TD>
   </TR>
   <TR>
      <TD COLSPAN=2 HEIGHT=20 BGCOLOR="#1618A1">
         <P ALIGN=LEFT><FONT FACE="Arial" COLOR="#ffffff" SIZE=3>F&uuml;r Fragen, R&uuml;ckmeldungen
         oder Informationen benutzen sie bitte die Mailadresse:
         <A HREF="mailto:bla@Blubb.de" style="color:#A9A9A9">Bla@Blubb.de</A></FONT></P>
      </TD>
   </TR>
</TABLE>
</BODY>
</HTML>

haentschman 15. Jul 2021 11:16

AW: Outllook 365 MAPI HTML
 
Liste der Anhänge anzeigen (Anzahl: 2)
Danke für deine Hilfe...8-)

Ich habe die Datei geändert und nun ein valides HTML. (Bild1)
Ergebnis: :evil: (Bild2)

haentschman 19. Jul 2021 06:39

AW: Outllook 365 MAPI HTML
 
...schieb. :wink:

Bevor ich das TOutlook ausprobiere...geht das nur direkt oder über den Client? :gruebel:

haentschman 20. Jul 2021 12:59

AW: Outllook 365 MAPI HTML
 
Moin...:P

Meine Lösung heißt: TOutlookApplication

In der Konfiguration kann man nun wählen welcher Client am Start ist. :thumb:

Auszüge:
Delphi-Quellcode:
function TToolsMail.SendMailClient: Boolean;
var
  FunctionResult: Boolean;

  function SendMAPI: Boolean;

  {$REGION 'Inline'}
    procedure FillMailRecipents;
    var
      I: Integer;
      RecipientItem: TCollectionItem;
    begin
    {$REGION 'Code'}
      FMailStandardClient.Recipients.Clear;
      for I := 0 to FMailMessage.ToList.Count - 1 do
      begin
        RecipientItem := FMailStandardClient.Recipients.Add;
        TRecipientItem(RecipientItem).Address := FMailMessage.ToList.Items[I].Email;
      end;
    {$ENDREGION}
    end;

    procedure FillMailAttachments;
    var
      I: Integer;
    begin
    {$REGION 'Code'}
      FMailStandardClient.Attachments.Clear;
      for I := 0 to FAttachments.Count - 1 do
      begin
        FMailStandardClient.Attachments.Add(FAttachments[I]);
      end;
    {$ENDREGION}
    end;

    procedure FillMailBody;
    begin
    {$REGION 'Code'}
      FMailStandardClient.Subject := FMailMessage.Subject;
      FMailStandardClient.Text := FMailMessage.Html.Strings;
    {$ENDREGION}
    end;
  {$ENDREGION}

  begin
    FillMailBody;
    FillMailRecipents;
    FillMailAttachments;

    Result := FMailStandardClient.Execute;
  end;

  function SendOutlook: Boolean;
  var
    Outlook: TOutlookApplication;
    Mail: OleVariant;

  {$REGION 'Inline'}
    procedure FillMailRecipents;
    var
      List: TStringList;
    begin
    {$REGION 'Code'}
      List := TStringList.Create;
      try
        List.Delimiter := ';';
        FMailMessage.ToList.GetEmailList(List);
        Mail.To := List.DelimitedText;
      finally
        List.Free;
      end;
    {$ENDREGION}
    end;

    procedure FillMailAttachments;
    var
      I: Integer;
    begin
    {$REGION 'Code'}
      for I := 0 to FAttachments.Count - 1 do
      begin
        Mail.Attachments.Add(FAttachments[I]);
      end;
    {$ENDREGION}
    end;

    procedure FillMailBody;
    begin
    {$REGION 'Code'}
      Mail.BodyFormat := olFormatHTML;
      Mail.Subject := FMailMessage.Subject;
      Mail.GetInspector;
      Mail.HTMLBody := OleVariant(FMailMessage.Html.Strings.Text) + Mail.HTMLBody;
    {$ENDREGION}
    end;
  {$ENDREGION}

  begin
    Result := True;
    Outlook:= TOutlookApplication.Create(nil);
    try
      Mail := Outlook.CreateItem(olMailItem);

      FillMailBody;
      FillMailRecipents;
      FillMailAttachments;

      try
        Mail.Display;
      except
        Result := False;
      end;
    finally
      Outlook.Free;
    end;
  end;

begin
  Result := True;
  try
    FunctionResult := False;

    FMail.Open;
    try
      CreateMailMessage;

      case FPreferences.PreferencesMail.ClientType of
        cltMAPI:
        begin
          FunctionResult := SendMAPI;
        end;
        cltOutlook:
        begin
          FunctionResult := SendOutlook;
        end;
      end;

      if FunctionResult then
      begin
        WriteMailDB;
        if Assigned(FOnMailSend) then
        begin
          FOnMailSend(Self, FMailMessage.ToList.EmailAddresses, FMailMessage.Subject);
        end;
      end;
    finally
      FMail.Close;
    end;
  except
    on E: System.SysUtils.Exception do
    begin
      if Assigned(FOnMailError) then
      begin
        FOnMailError(Self, FReceipients, FMailMessage.Subject, E.Message);
      end;
      Result := False;
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz