AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Outllook 365 MAPI HTML

Outllook 365 MAPI HTML

Ein Thema von haentschman · begonnen am 14. Jul 2021 · letzter Beitrag vom 20. Jul 2021
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.840 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Outllook 365 MAPI HTML

  Alt 14. Jul 2021, 16:45
Hallöle...
Nach der Umstellung auf Outlook werden meine Mails über MAPI aus dem Programm heraus im Outlook als Text interpretiert! ..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? 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;

Geändert von haentschman (14. Jul 2021 um 16:50 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
16.914 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Outllook 365 MAPI HTML

  Alt 14. Jul 2021, 17:28
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.840 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Outllook 365 MAPI HTML

  Alt 15. Jul 2021, 06:46
Moin...

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

Auf was soll man sich verlassen?

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

Registriert seit: 8. Feb 2018
Ort: Region Bern (Schweiz)
52 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Outllook 365 MAPI HTML

  Alt 15. Jul 2021, 10:05
...
Auf was soll man sich verlassen?
...
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>
Albert
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.840 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: Outllook 365 MAPI HTML

  Alt 15. Jul 2021, 12:16
Danke für deine Hilfe...

Ich habe die Datei geändert und nun ein valides HTML. (Bild1)
Ergebnis: (Bild2)
Miniaturansicht angehängter Grafiken
valid.jpg   mail_1.png  
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.840 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

AW: Outllook 365 MAPI HTML

  Alt 19. Jul 2021, 07:39
...schieb.

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

Geändert von haentschman (19. Jul 2021 um 08:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
4.840 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: Outllook 365 MAPI HTML

  Alt 20. Jul 2021, 13:59
Moin...

Meine Lösung heißt: TOutlookApplication

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

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;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf