Entwickler-Ecke
Internet / Netzwerk - MIME Format
flowstar - Mo 02.08.04 15:51
Titel: MIME Format
Ich hole mit der Indy Pop3 Komponente eine Mail vom Server.
Ich habe folgenden Code um den Text in einem Memo Feld auszugeben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| begin Mail := TIdMessage.Create(Self); if IDPop31.CheckMessages > 0 then begin Memo1.Lines.Clear; IDPop31.Retrieve(1,Mail); Memo1.Lines := Mail.Body; end; |
Aber er zeigt nicht an
Lasse ich das Subject der Mail anzeigen geht es.
Wo liegt der Fehler?
Speedy78 - Mo 02.08.04 21:17
Hi....
Ich wurde sagen mit -->
Quelltext
1:
| Memo1.Lines.Add(Mail.Body); |
sollte es klappen ;-)
Body von Indy Pop3 ist vom Typ TStrings, und sollte deshalb im Memo auch desgleichen Typs sein...
Gruss
SPEEDY
flowstar - Mo 02.08.04 22:00
das is mir auch klar
Memo.Lines ist auch vom Typ TStrings
aber
muss ein String übergeben werden, also ein einzelner.
Geht also immernoch nicht!
BenBE - Mo 02.08.04 22:07
Delphi-Quelltext
1:
| Memo1.Lines.Text := Mail.Body.Text; |
oder über Assign:
Delphi-Quelltext
1:
| Memo1.Lines.Assign(Mail.Body); |
Speedy78 - Mo 02.08.04 22:21
Sorry....ich meinte so :oops:
Quelltext
1:
| Memo1.Lines.AddStrings(Mail.Body); |
MfG
SPEEDY
flowstar - Mo 02.08.04 22:25
irgendwas stimmt da glaube ich mit dem abholen nicht.
Wenn ich es so mache, wird einfach leerer TExt ins Memo geschrieben. Es scheint mir so, als wäre der Body leer. Aber ich habe extra ein paar Mails mit Inhalt an mich gesendet.
Was mach ich da falsch?
Speedy78 - Di 03.08.04 22:20
Hallo flowstar...
Voraussetzung:
Auf Deiner Form ist die TIdPop3 Komponente und die TIdMessage Komponente platziert. In meinem Beispiel habe ich die Namen der Komponenten so gelassen wie sie im Objektinspektor vorgeschlagen wurden (Also TIdPop3 --> IdPop31 und TIdMessage --> IdMessage1).
Du hast im Objektinspektor in IdPop31 den Host / Passwort / Username bereits eingegeben.
Folgendes solltest Du wissen:
1. Dein Mail, das Du Dir geschickt hast z.B. mit Outlook ist nur reiner Text (Du kannst in Outlook irgendwo wählen zwischen HTML / Rich-Text oder nur-Text).
Wenn Dein Mail, dass Du jetzt abrufen möchtest also im Format "nur-Text" ist, kannst Du es so in Dein Memo laden:
Delphi-Quelltext
1: 2: 3: 4: 5:
| IdPop31.Connect(); IdPop31.Retrieve(1,IdMessage1); Memo1.Clear; Memo1.Lines.AddStrings(IdMessage1.Body); IdPop31.Disconnect; |
Sollte Dein Mail das Du abholen möchtest im Format "HTML" sein, dann ist dies zwingend ein
Multipart Mail im MIME Format.
Nun den Text jetzt in das Memo zu laden muss zuerst geprüft werden ob es nun ein Multipart oder ein nur-Text Mail ist.
Folgendes Beispiel deckt beide Varianten ab:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| var PartIndex : Integer; begin PartIndex := 0; IdPop31.Connect(); IdPop31.Retrieve(1,IdMessage1); If IdMessage1.MessageParts.Count = 0 Then Begin Memo1.Clear; Memo1.Lines.AddStrings(IdMessage1.Body); IdPop31.Disconnect; Exit; end;
If IdMessage1.MessageParts.Items[PartIndex] is TIdText Then Begin Memo1.Lines.Clear; Memo1.Lines.AddStrings(TIdText(IdMessage1.MessageParts.Items[PartIndex]).Body); IdPop31.Disconnect; end;
end; |
Ich hoffe dies hilft dir für's erste :wink:
Ach ja, ist das Mail nicht Multipart, kommt es nicht drauf an, ob die Variable "PartIndex" 0 oder 1 ist...
Gruss
SPEEDY
flowstar - Mi 04.08.04 23:18
wenn ich es so mache, wird im Memo Feld angezeigt: This is a multi-part message in MIME format.
Aber nicht der Text der email.
Ich frage mich langsam, ob "body" überhaupt der Text der email ist. Aber was sonst?
Speedy78 - Do 05.08.04 20:54
| flowstar hat folgendes geschrieben: |
wenn ich es so mache, wird im Memo Feld angezeigt: This is a multi-part message in MIME format.
Aber nicht der Text der email.
Ich frage mich langsam, ob "body" überhaupt der Text der email ist. Aber was sonst? |
Dies passiert, wenn Du eine Multipart Message versuchst mit meinem ersten Code-Abschnitt in das Memo zu lesen !!!
Probier es doch mal mit dem längeren Code-Abschnitt, denn der deckt beide Varianten ab.
Übrigens ist "body" der Text der E-Mail ! Lies mein obiges Beispiel nochmals aufmerksam durch und leg zum testen ein neues Projekt an. Zieh die IdMessage und IdPop31 Komponente auf deine Form, plaziere ein Memo auf der Form und einen Button. Kick den zweiten Code-Abschnitt von mir in die TForm1.Button1Click procedure vom Button und probier das ganze noch einmal...
Es funzt totsicher denn ich habs selbst bei mir ausprobiert.... :wink:
Gruss
SPEEDY
BenBE - Do 05.08.04 21:12
IMHO müsste PartIndex 2 sein:
0 = MIME Benachrichtigung
1 = Textfassung
2 = HTML\RTF\Formatierte Fassung
3 ... n = Attachments
einfach112 - So 23.04.06 22:57
Titel: kleines problem ...
Hallo ! Ich nutze auch derzeit die idpop-kompo von indy ....
Ich habe hierbei ein kleines anderes problem !
mir macht folgendes zu schaffen ...
und zwar IdMessage selber ...
ich rufe meine mails folgendermassen ab :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.Button1Click(Sender: TObject); var i, inhalt :integer; intIndex: integer; itm: TListItem; begin
idPOP31.Host := 'pop.gmx.net'; idPOP31.Port := 110; idPOP31.Username := 'meineaddy@gmx.de; idPOP31.Password := 'passwort'; idPOP31.Connect; //Caption beschriften
Form1.Caption := 'Sie haben '+Inttostr(IDpop31.CheckMessages)+' Nachrichten auf dem Server, die zusammen '+InttoStr(IDpop31.RetrieveMailBoxSize div 1024)+ ' kb groß sind'; testvar :=i; For i := 1 to IDPop31.CheckMessages do begin IDMessage1.Clear; inhalt:= idpop31.CheckMessages; IDpop31.Retrieve(i,IDMessage1); itm := lvHeaders.Items.Add; itm.ImageIndex := 4; itm.Caption := IDMessage1.Subject; itm.SubItems.Add(IDMessage1.From.Address); itm.SubItems.Add(DateToStr(IDMessage1.Date)); itm.SubItems.Add((IntToStr(IDpop31.RetrieveMsgSize(i) div 1024)+'kb')); |
somit habe ich ja nun alles Emails komplett abgerufen und habe sie schön in meiner liste stehen !
wie aber kann ich jetzt dieses IDMessage1. direkt mit einer nummer ansprechen ?
mit IdPop31.Retrieve(1,IdMessage1);
muss ich mich ja dann nochmal verbinden mit dem server aber das habe ich doch schon gemacht !
die ganzen daten sind doch jeweils in den durch oben stehende schleife jeweils in den IDMessages enthalten !
ich muss doch irgendwie sagen können zeige mir von der 5ten Idmessage die runtergeladen wurde den body an ....
also irgendwie muss ich die doch in der schleife irgendwie in so ne art nummerierten temp body schreiben können oder ?!
Denn bei outlook oder thunderbird werden die mails ja auch sofort runter geladen und nicht erst dann wenn ich nen betreff anklicke
Versteht jemand was ich meine ?!
ich verstehe es zwar selber noch kaum aber hoffe mal auf das beste !
thx schonmal im voraus !
cu
einfach112
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!