AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke INDY10, EMail multipart/alternative
Thema durchsuchen
Ansicht
Themen-Optionen

INDY10, EMail multipart/alternative

Ein Thema von FrankJ28 · begonnen am 9. Dez 2012 · letzter Beitrag vom 11. Dez 2012
Antwort Antwort
Seite 1 von 3  1 23      
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#1

INDY10, EMail multipart/alternative

  Alt 9. Dez 2012, 18:31
Hallo,
wie komme ich an die Inhalte eines Mail multipart/alternative ran? Die Mail steckt derzeit in einem TidMessage.
Danke an die Wissenden
Ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#2

AW: INDY10, EMail multipart/alternative

  Alt 9. Dez 2012, 22:52
Also ich ermittle den Mailbody (Text) folgendermaßen:
Code:
  //Mailbody ermitteln:
  S := '';
  S3 := LowerCase(Msg.ContentType);
  if (S3 = 'text/plain') OR (S3 = 'text/html') then begin
    S := Msg.Body.Text;
  end else begin
    IsAlternative := ( S3 = 'multipart/alternative' );
    for i := 0 to Msg.MessageParts.Count - 1 do begin
      if (Msg.MessageParts.Items[i] is TIdText) then begin
        if LowerCase(Msg.MessageParts.Items[i].ContentType) = 'multipart/alternative' then begin
          isAlternative := true;
        end else if LowerCase(Msg.MessageParts.Items[i].ContentType) = 'text/plain' then begin
          if NOT isAlternative then
            S := S + TIdText(Msg.MessageParts.Items[i]).Body.Text;
        end else if LowerCase(Msg.MessageParts.Items[i].ContentType) = 'text/html' then begin
          S := S + TIdText(Msg.MessageParts.Items[i]).Body.Text;
        end else begin
          S := S + TIdText(Msg.MessageParts.Items[i]).Body.Text;
        end;
      end;
    end;
  end;
Bei "multipart/alternative" wird dabei nur die HTML-Version angezeigt.
.
  Mit Zitat antworten Zitat
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: INDY10, EMail multipart/alternative

  Alt 10. Dez 2012, 08:43
Hallo,
danke für deinen Snippet, der funktioniert auch als solcher. Nun fallen mir auch Mail vom Typ multipart/related in die Hände. Da haben die MessageParts einen ContentType multipart/alternative. Wie löst man denn die auf?
Danke und ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#4

AW: INDY10, EMail multipart/alternative

  Alt 10. Dez 2012, 13:40
Nun fallen mir auch Mail vom Typ multipart/related in die Hände. Da haben die MessageParts einen ContentType multipart/alternative. Wie löst man denn die auf?
Ich nutze bisher nur obigen Code plus einen Codeteil, der die Anhänge auflistet und zum Download anbietet. Das funktioniert prinzipiell auch mit "multipart/related", nur mit dem "Problem", dass die Anhänge/Objekte bei "multipart/related" normalerweise inline dargestellt werden sollten und bei mir dort halt nix oder ein Platzhalter erscheint und das Objekt (Bild, ...) dafür als Anlage zum Download angeboten wird.

Will man es (korrekterweise) inline darstellen, muss man im Text nach (z.B.) "{image file=cid:950118.AECB@XIson.com}" suchen und an dieser Stelle die Anlage mit der entsprechenden Content-ID einfügen/anzeigen.
  Mit Zitat antworten Zitat
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: INDY10, EMail multipart/alternative

  Alt 10. Dez 2012, 18:26
Hallo Olli,
so dachte ich bislang auch. Nur stoße ich derzeit vermehrt auf Mail, die den Textinhalt im related oder mixed-Teil unterbringen. Da gibt es plötzlich jede Menge Abschnitte mit multipart/alternative und darin erst die eigentliche Message

Code:
Content-Type: multipart/alternative; boundary="----=_Part_1650115_1696814479.1355114756495";
   boundary="FwDNomqXkhucLd61sob0y=_quOXxxqWTyj"

--FwDNomqXkhucLd61sob0y=_quOXxxqWTyj
Content-Type: text/plain; charset="ISO-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#6

AW: INDY10, EMail multipart/alternative

  Alt 10. Dez 2012, 19:20
Hast du meinen Code getestet? Wo genau liegt das Problem?
Da ich alle Message-Parts durchgehe und dabei alle Texte "übernehme", sollten zumindest am Ende alle Textteile vorhanden sein.

Eventuell mal zum Testen bei dem
Code:
if NOT isAlternative then
  S := S + TIdText(Msg.MessageParts.Items[i]).Body.Text;
die erste Zeile weglassen, dann sind es wirklich alle Texte, auch wenn sie "doppelt" (html + plain) sind.
  Mit Zitat antworten Zitat
FrankJ28

Registriert seit: 7. Apr 2008
211 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: INDY10, EMail multipart/alternative

  Alt 10. Dez 2012, 19:44
Hi,
das Problem liegt darin, das es nur einen MessagePart gibt (Content-Type: multipart/alternative und darin verbergen sich die Inhalte (text/plain, text/html etc). Nach deiner Lösung sehe ich dann den Inhalt des kompletten multipart/alternatives oder multipart/mixed. Ich hoffte, dass es Methoden gibt, über die man an die eingebetteten Teile kommt.
Ciao
Frank
"Sage was du tust, und tue was du sagst"
Johannes Rau
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#8

AW: INDY10, EMail multipart/alternative

  Alt 10. Dez 2012, 19:50
Code:
Content-Type: multipart/alternative; boundary="----=_Part_1650115_1696814479.1355114756495";
   boundary="FwDNomqXkhucLd61sob0y=_quOXxxqWTyj"
...
Was mir allerdings komisch vorkommt, dass da "boundary" 2 mal vorkommt. Da sollte eigentlich (auch bei multipart/alternative) nur 1 Angabe stehen, siehe hier (das Beispiel). Wobei ich sehe gerade, dort weiter unten steht auch was von unterschiedlichen Content-ID's...
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#9

AW: INDY10, EMail multipart/alternative

  Alt 10. Dez 2012, 19:56
Hi,
das Problem liegt darin, das es nur einen MessagePart gibt (Content-Type: multipart/alternative und darin verbergen sich die Inhalte (text/plain, text/html etc). Nach deiner Lösung sehe ich dann den Inhalt des kompletten multipart/alternatives oder multipart/mixed. Ich hoffte, dass es Methoden gibt, über die man an die eingebetteten Teile kommt.
Aber das mache ich doch und es funktioniert bei mir auch. Ich laufe alle Message-Parts (das sind alle Texte UND Anhänge) durch und (nur) bei TIdText (html / plain / ...) kopiere ich den Inhalt (bei Alternative nur einen davon -> html) in den string...
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#10

AW: INDY10, EMail multipart/alternative

  Alt 10. Dez 2012, 20:04
Hi, das Problem liegt darin, das es nur einen MessagePart gibt (Content-Type: multipart/alternative und darin verbergen sich die Inhalte (text/plain, text/html etc).
Sicher dass es dann nur 1 MessagePart (multipart/alternative) gibt? Also ich erhalte da 3 MessageParts: multipart/alternative, text/plain und text/html.

Habe es selbst mit einigen solcher Nachrichten erfolgreich getestet, allerdings hatten die nur 1 Boundary-Angabe, wie oben schon erwähnt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 12:50 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