alexdgg
Goto Top

SMTP-Mail Inhalt ermitteln

Hallo Leute,

ich habe in Java einen SMTP-Server implementiert für den Empfang von Mail über SMTP.

Das funktioniert auch ales sehr gut. Ich habe nur das Problem, dass ich den eigentlichen Inhalt der Mail nach SMTP(DATA) nicht extrahieren kann, da ich nicht weis wo er beginnt.
Das Ende der Mail ist ja durch "354 Start mail input; end with ." beschrieben. aber wie kann ich eindeutig den Anfang des Inhaltes ermitteln?

Hat jemand Rat für mich?

Content-Key: 151991

Url: https://administrator.de/contentid/151991

Printed on: May 4, 2024 at 05:05 o'clock

Member: KowaKowalski
KowaKowalski Sep 29, 2010 at 08:41:01 (UTC)
Goto Top
Zitat von @alexdgg:
ich habe in Java einen SMTP-Server implementiert für den Empfang von Mail über SMTP.

Hi,

ich habe ja wirklich keine Ahnung von Java.
Aber eventuell stellt sich Dein Java quer weil SMTP eher für das senden von mails in Frage kommt.


mfg
kowa
Member: alexdgg
alexdgg Sep 29, 2010 at 09:08:39 (UTC)
Goto Top
Aber eventuell stellt sich Dein Java quer weil SMTP eher für das
senden von mails in Frage kommt.


mfg
kowa

SMTP ist das Protokoll mit dem Mail-Server Mails untereinander austauschen. Und zwar senden und empfangen!
Was Clients angeht, die senden nur über SMTP und empfangen über POP3 oder IMAP. Aber kein Mailserver wird über POP3 oder IMAP jemals Mails empfangen, weil dies auch nicht möglich ist.
Member: Connor1980
Connor1980 Sep 29, 2010 at 10:53:43 (UTC)
Goto Top
Hallo,

Zitat von @alexdgg:
Aber kein Mailserver wird über POP3 oder IMAP jemals Mails empfangen, weil dies auch nicht möglich ist.

du meintest senden, nicht empfangen face-wink

So, um etwas kleinkariert zu sein:
mit POP3 und IMAP nicht empfangen, sondern abgerufen. (Empfangen ist passiv, ich bekomme etwas zugestellt, abrufen aktiv, ich hole ab.) face-wink

Grüße
Member: alexdgg
alexdgg Sep 29, 2010 at 11:11:46 (UTC)
Goto Top
du meintest senden, nicht empfangen face-wink >

Wenn ein Mailserver über SMTP Mails sended, dan EMPFÄNGT der andere Mailsserver an den es geht auch über SMTP

Hier die zugehörige RFC0821 Spezifikation zum Mailaustausch zwischen Mailservern

http://james.apache.org/server/rfclist/smtp/rfc0821.txt

Es heist ja auch nicht Simple Mail Sending Protocol sondern Simple Mail Transfer Protocol

mit POP3 und IMAP nicht empfangen, sondern abgerufen. (Empfangen ist passiv, ich bekomme etwas zugestellt, abrufen aktiv, ich hole ab.)

Deswegen habe ich ja geschrieben...
Aber kein Mailserver wird über POP3 oder IMAP jemals Mails empfangen, weil dies auch nicht möglich ist.


Das hilft mir alles aber mit meinem Problem nicht weiter. ;(
Member: filippg
filippg Sep 29, 2010 at 17:47:03 (UTC)
Goto Top
Hallo,

verstehe ich nicht.
Der Client sendet DATA, dein Server als Antwort daraufhin 354. Und genau dann fängt die Mail an.
Erst kommen die Header, dann eine Leerzeile, dann der Body (vielleicht meinst du das mit "eigentlichem Inhalt"). Irgendwann kommt eine Zeile, die nur einen . enthält, dann ist die Mail vorbei (bzw. schon am Ende der vorhergehenden Zeile). Aus einer Mail mit Attachments o.ä. den Text herauszufiltern ist nicht ganz trivial, dann müsstest du dich mal mit MIME auseinander setzen.

Gruß

Filipp
Member: dog
dog Sep 29, 2010 at 19:36:58 (UTC)
Goto Top
Aus einer Mail mit Attachments o.ä. den Text herauszufiltern ist nicht ganz trivial, dann müsstest du dich mal mit MIME auseinander setzen.

Was aber ein MTA gar nicht braucht.
Der Code ist ja ziemlich trivial:

<?php

	function read_mail(&$con)
	{
		$buf = '';  
		while(($line = fgets($con)) != '.') {  
			$buf .= $line;
		}
		return $buf;
	}

	//... verbindungsaufbau
	
	if(trim(fgets($con)) == 'DATA')  
		$mail = read_mail($con);
		
	//... abhandlung

?>
Natürlich ist das so nicht praxistauglich
Member: alexdgg
alexdgg Sep 30, 2010 at 07:04:09 (UTC)
Goto Top
Zitat von @filippg:
Der Client sendet DATA, dein Server als Antwort daraufhin 354. Und genau dann fängt die Mail an.
Erst kommen die Header, dann eine Leerzeile, dann der Body (vielleicht meinst du das mit "eigentlichem Inhalt").

Das Problem ist, dass von verschiedenen Clients verschiedene Header kommen (Format).

Bsp1:

From: test1@test.de
Subject: Testinhalt
To: test2@test.de
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8


Testinhalt
.

Bsp2:

Message-ID: <F83ACCA76B054072AFF0BAB6D26AB8A0@test.de>
From: "test" <test1@test.de>
To: <test2@test.de>
Subject: Test
Date: Thu, 30 Sep 2010 09:02:21 +0200
MIME-Version: 1.0
Content-Type: text/plain;

format=flowed;
charset="iso-8859-1";
reply-type=original
Content-Transfer-Encoding: 7bit
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.2900.5843
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579

Testinhalt
.

Da ich den eigentlichen Inhalt (Text) als SMS senden will würde ich gerne den Header komplett entfernen. Mit dem ersten Leerzeichen haut aber auch nicht hin. Siehe Bsp2 Da kommen 2 Zeilen mit Leerzeichen und erst nach dem zweiten geht der Text los.

Kann ich über das Protokoll nicht irgendwie selber einen Seperator angeben?
Member: KowaKowalski
KowaKowalski Sep 30, 2010 at 17:05:03 (UTC)
Goto Top
Hi Alex,

ginge es denn nicht das Du im ersten Schritt feststellst welcher Client verwendet wird und dann erst die Behandlung für den Text losgeht?

Also erkenne Outlook Express als Client. Mailtext ab zeile 17

Erkenne Thunderbird als Client. Mailtext ab Zeile 9

und so weiter

Wobei Du dann natürlich ständig erweitern müsstest sowie sich ein "neuer" Mailclient verbreitet/durchsetzt. Und es müssten schon im Vorfeld alle verbreiteten Clienten in Diener Liste stehen.


OK OK, iss wohl nicht praktikabel

mfg
kowa
Member: dog
dog Sep 30, 2010 at 19:19:03 (UTC)
Goto Top
Das sind ja erstmal zwei Paar Schuhe.
Im ersten Schritt musst du erstmal den DATA-Block empfangen.
Zu dem Zeitpunkt ist ja erstmal völlig egal, was da drin steht.

Im zweiten Schritt kannst du dich dann an den Inhalt der Mail machen und da wurde das Stichwort schon gesagt: MIME
Member: alexdgg
alexdgg Oct 01, 2010 at 07:21:03 (UTC)
Goto Top
Zitat von @dog:
Im zweiten Schritt kannst du dich dann an den Inhalt der Mail machen und da wurde das Stichwort schon gesagt: MIME

Es muss doch auch irgendwann mal etwas einfach gehen... Jetzt muss ich mich auch noch mit dem Misst beschäftigen ;(