mail() aber über smtp
kaya
- php
Hallo ich habe ein kleines Script geschrieben, das eine Mail lossendet.
Wenn ich mir aber den Header ansehe, steht da alles möglich drin über meinen Server, was ich nicht will.
Nun dacht ich mir wenn ich ihn statt über mail() über smtp versende, wie normale Mails auch aus Outlook heraus. Also mit Passwort etc.
Aber ich finde nichts dazu, wahrschienlich suche ich nach dem falschen. Ich möchte auch keine PHPmailer etc.
Kann mir da jemand helfen?
kaya
Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
Hallo ich habe ein kleines Script geschrieben, das eine Mail lossendet.
Wenn ich mir aber den Header ansehe, steht da alles möglich drin über meinen Server, was ich nicht will.
Zeig doch bitte mal 1:1 und dann erzähle uns, was Du loswerden willst.
Zum Verständnis:
Mail senden geht auf normalen Wegen nur über smtp = simple Mail transfer Protocol
Die SMTP-Mailserver bilden sozusagen die unterste Schicht im Mailsystem des Internets. Darauf bauen dann verschiedene andere lokale Dienste auf, so wie z.B. auch diejenigen für das Post Office Protocol (POP3) oder das Internet Mail Access Protocol (IMAP), über die du dann deine Mail mit einem (entfernten) Client wieder aus dem Postoffice (Briefkasten) herausholen kannst.
Grafik ausgeliehen bei
https://thomas-leister.de/internet/mailserver-ubuntu-server-dovecot-postfix-mysql
Die Funktion mail() von PHP verwendet auf Linux-Systemen das sendmail-Script, dem es die Maildaten Linux-Conform übergibt. Das ist aber nur ein Wrapper für das jeweilige binary des jweils installierten Mailservers (SMTP). Unter Windows als Webserver greift PHP direkt auf Port 25, also den SMTP-Server zu und übergibt ihm die Maildaten Windows-konform direkt.
Es ist aber in jedem Falle ein Mailserver (SMTP) involviert.
Da der SMTP-Server gegen Missbrauch intern aber noch einige Dinge prüft vor dem Annehmen des Auftrages (SASL = http://de.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer ) und sich beim SMTP-Partner im Netz (der dann Client spielt) authentifiziert, kann man das heute nicht mehr so einfach mit einem eigenen SMTP-Script nachbilden.
Sonst findest Du im Internet ein sehr gutes von http://www.paehl.de/cms/php_scripts
Spirituelle Grüße
Euer Robert
Da der SMTP-Server gegen Missbrauch intern aber noch einige Dinge prüft vor dem Annehmen des Auftrages (SASL = http://de.wikipedia.org/wiki/Simple_Authentication_and_Security_Layer ) und sich beim SMTP-Partner im Netz (der dann Client spielt) authentifiziert, kann man das heute nicht mehr so einfach mit einem eigenen SMTP-Script nachbilden.
Da bringst du verschiedene Sachen durcheinander. Es gibt zwei Arten der Übermittlung von Mails per SMTP: Mails an Empfänger, für die der annehmende Server sich selbst zuständig fühlt, und solche, die er weitergeben muss.
Für Ersteres ist keine Authentifizierung notwendig; wenn ich eine E-Mail an beispiel@gmx.de direkt beim SMTP-Server von GMX einliefere, brauche ich dazu kein Passwort, keine spezielle Software, keinen speziellen Server.
E-Mail-Versand wäre auch überhaupt nicht möglich, wenn man für jede Domain Anmeldedaten bräuchte – würde ich eine Mail an info@selfhtml.org schreiben wollen, müsste ich mir erst ein Konto dort einrichten lassen. Dann schreibe ich an redaktion@heise.de und brauche auch dort wieder ein Konto … Das kann so nicht funktionieren.
Anmelden muss man sich hingegen für den zweiten Fall. Dieser Vorgang ist jener, den Otto Normalnutzer von seinem E-Mail-Programm kennt: Er hat ein Konto bei GMX und möchte über dieses Konto eine Mail an Yahoo schicken. Der SMTP-Server von GMX spielt hierbei nur die Rolle des Weitergebenden.
Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
Da bringst du verschiedene Sachen durcheinander.
Das gebe ich im vollen Umfang zurück.
Es gibt zwei Arten der Übermittlung von Mails per SMTP: Mails an Empfänger, für die der annehmende Server sich selbst zuständig fühlt, und solche, die er weitergeben muss.
Es gibt nur ein SMTP-Protokoll, das aber selbstverständlich in unterschiedlichen (zeitlichen) Versionen. Das Relaying, das Du hier meinst, ist eine Funktionalität der SMTP-Dienste des "Servers". Der besteht nämlich aus mehreren Teildiensten.
Für Ersteres ist keine Authentifizierung notwendig; wenn ich eine E-Mail an beispiel@gmx.de direkt beim SMTP-Server von GMX einliefere, brauche ich dazu kein Passwort, keine spezielle Software, keinen speziellen Server.
Du benötigst dazu einen SMTP-Client, der das SMTP-Protokoll mit dem Server sprechen kann. Selbstverständlich kann der Server das Relaying auch ablehnen. Selbstverständlich kann er es auch abhängig von Authorisierungen machen. Du kannst ohne SMTP keine eMail bei GMX-Mail "einliefern", es sei denn Du hättest direkten Zugang auf die Queues - die Dateien im Filesystem des Servers.
E-Mail-Versand wäre auch überhaupt nicht möglich, wenn man für jede Domain Anmeldedaten bräuchte – würde ich eine Mail an info@selfhtml.org schreiben wollen, müsste ich mir erst ein Konto dort einrichten lassen. Dann schreibe ich an redaktion@heise.de und brauche auch dort wieder ein Konto … Das kann so nicht funktionieren.
Das habe ich auch gar nicht behauptet. Du hast nur nicht genau gelesen und das Internet-Mailsystem vermutlich noch nicht genauer kennengelernt. Nimm Dir bitte etwas mehr Zeit.
Wenn ein SMTP-Client (als Teildienst eines Mail-"Servers") einem SMTP-Server, der auf Port 25 lauscht (hier wirklich als Server-teildeienst des Mail-"Servers") eine Mail sendet, dann geht dieser die Verbindung ein, stellt fest, was mit der Mail geschehen soll, und fährt sein dafür vorgesehenes Handlungspaket ab. Dazu gehört:
Ist der Absendene Mail-Dienst (Client-teil des anderen Mail-"Servers") im Intenet bekannt?
Steht der auf einer Blacklist? Habe icb Whitelisting zu beachten? usw.
Handelt es sich um eine Local-Domain, oder eine Virtual-Local-Domain, dann stelle fest,
ob es den Empfänger gibt oder ein Ersatzempfänger dafür vorgesehen ist. Stelle fest, ob
der Absender-Name auf einer Sperrliste steht. Usw. Wenn die Mail als zustellbar gilt, dann
bestätige die Annahme (accept) der Übertragung des Mailbodys vom Absender, nehme sie an,
übergebe die Daten an den LDA (Local Delivery Agent, der zuvor auch schon die Header geprüft
hat) und lasse diesen die Mail im passenden Postoffice ablegen.
Wenn am Absender irgendetwas auszusetzen ist, oder der Empfänger nicht bekannt ist, lehne
die weitere Verbidnung ab (reject) und das wars.
Das ganze Verfahren füllt ein dcikes Buch mit weit über 1000 Seiten. Das kann ich hier nicht wiedergeben.
Anmelden muss man sich hingegen für den zweiten Fall. Dieser Vorgang ist jener, den Otto Normalnutzer von seinem E-Mail-Programm kennt: Er hat ein Konto bei GMX und möchte über dieses Konto eine Mail an Yahoo schicken. Der SMTP-Server von GMX spielt hierbei nur die Rolle des Weitergebenden.
Das mag Die in der Unkenntnis über die Möglichkeiten der email-Dienste so erscheinen, trifft aber nur zu einigen wenigen Prozent zu. Die meisten Mail-Server akzeptieren Relaying nur noch
von bekannten Partnern.
Spirituelle Grüße
Euer Robert
Es gibt zwei Arten der Übermittlung von Mails per SMTP: Mails an Empfänger, für die der annehmende Server sich selbst zuständig fühlt, und solche, die er weitergeben muss.
Für Ersteres ist keine Authentifizierung notwendig; wenn ich eine E-Mail an beispiel@gmx.de direkt beim SMTP-Server von GMX einliefere, brauche ich dazu kein Passwort, keine spezielle Software, keinen speziellen Server.
Du benötigst dazu einen SMTP-Client, der das SMTP-Protokoll mit dem Server sprechen kann. Selbstverständlich kann der Server das Relaying auch ablehnen. Selbstverständlich kann er es auch abhängig von Authorisierungen machen. Du kannst ohne SMTP keine eMail bei GMX-Mail "einliefern"
Ich schrieb von "zwei Arten der Übermittlung von Mails per SMTP". Von "ohne SMTP" war nirgends die Rede.
Ich beschränke mich zudem eben gerade _nicht_ auf das Relaying. Das Relaying ist vielmehr eine der beiden genannten Arten, nämliche die zweite, die Weitergabe.
Ein SMTP-Client ist darüber hinaus auch keine spezielle Software im Sinne der ursprünglichen Frage: Das kann auch ein selbstgestricktes PHP-Skript aus kayas Ausgangsfrage sein.
Es gibt aus Protokollsicht wirklich nichts, was gegen ein selbstgestricktes Skript spricht; es stehen einzig praktische Überlegungen, beinahe schon Fragen der Bequemlichkeit gegen kayas Vorhaben.
E-Mail-Versand wäre auch überhaupt nicht möglich, wenn man für jede Domain Anmeldedaten bräuchte
Das habe ich auch gar nicht behauptet. Du hast nur nicht genau gelesen
Habe ich? Dies habe ich gelesen:
Da der SMTP-Server gegen Missbrauch intern aber noch einige Dinge prüft vor dem Annehmen des Auftrages (SASL) und sich beim SMTP-Partner im Netz (der dann Client spielt) authentifiziert, kann man das heute nicht mehr so einfach mit einem eigenen SMTP-Script nachbilden.
Zwei SMTP-Server, der übermittelnde soll sich beim empfangenden authentifizieren. Das ist so nicht richtig, genauso wenig wie die Behauptung, dass ginge nicht mit einem eigenen "SMTP-Skript", also mit dem selbstgestrickten PHP-Skript aus kayas Ausgangsfrage.
Zwischen Mailservern findet im Allgemeinen keine Authentifizierung statt. Punkt. Mailserver sind die Systeme, die dauerhaft im Netz erreichbar sind und Mails annehmen. Falls du mit dem "SMTP-Server" und seinem "SMTP-Partner im Netz" etwas anderes als solche Mailserver meinst, müsstest du dich genauer ausdrücken; mir fällt da jedenfalls nichts anderes zu ein, egal wie ich es drehe und wende.
Es ist zudem auch schon allgemein eher unüblich, dass ein Server, egal ob SMTP oder sonstwas, sich bei einem Client authentifiziert (selbst, wenn's ein Server ist, "der dann Client spielt"). Im Sprachgebrauch läuft es normalerweise andersrum: Der Client ist der, der etwas will und sich ausweisen muss.
Bis hierhin habe ich den Eindruck, bei dir gingen die Begrifflichkeiten etwas verquer. Die falsche Zuordnung von Client- und Serverrolle bei der Authentifizierung, vielleicht auch das Missverständnis, was im jeweiligen Zusammenhang mit Mail- bzw. SMTP-Server gemeint ist.
Es ist in der Tat so, dass ein Mailserver aus Protokollsicht mal Server und mal Client ist. Genau aus diesem Grunde, um solche Verwirrung zu vermeiden, habe ich die Nutzung von SMTP eingangs auf die Empfängerrolle beschränkt, auf die Rolle als Ziel- oder als weiterleitendes System – denn das ist das Einzige, was für kayas Frage von Belang ist.
Dass du in dem Absatz SASL falsch eingeordnet hast, lassen wir jetzt mal beiseite (SASL ist nicht "noch einige Dinge", SASL ist nur eines dieser Dinge; SASL ist IMHO nicht einmal der Nennung per se wert, es handelt sich schlicht um die Authentifizierung).
Ich kann's auch noch ein fünftes, sechstes und siebtes Mal durchlesen, mitsamt deines hier nicht zitierten restlichen Beitrags – du hast das meiner Meinung nach nicht richtig dargestellt. Und es ist leider auch nicht besser, oder sagen wir mal: verständlicher geworden, du hast dich nur in noch mehr Details verstrickt, die für kaya noch nicht einmal von Interesse sind.
Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
Wir sollten das hier zuende diskutieren, sofern das überhaupt geht. Ich habe leider aber im Moment nicht genug Zeit, die passenden und allgemeinverständlichen Beschreibungen herauszusuchen.
Jedenfalls scheinen wir aneinander vorbei zu reden...
Wir sollten nochmal von vorne anfangen mit den Begriffsbestimmungen
Auch bei Wikipedia gibt es zum Thema diverse Seiten, deren Inhalt keinesfalls aufeinander abgestimmt ist.
Also bitte den Thread nicht wegwerfen :-)
Spirituelle Grüße
Euer Robert
Om nah hoo pez nyeetz, Robert R.!
Ich habe leider aber im Moment nicht genug Zeit, die passenden und allgemeinverständlichen Beschreibungen herauszusuchen.
Nicht einmal dafür, deinen feature request im Auge zu behalten ;-)
Also bitte den Thread nicht wegwerfen :-)
Im allgemeinen werden Threads nicht weggeworfen. Wenn du ihn dir als interessant markierst (grünes Ausrufezeichen hinter dem Beitragstitel des Eröffnungspostings) bekommt der Thread ein grünes Ordnersymbol mit Ausrufezeichen, wenn das noch nicht auffallend genug ist kannst du durch dein User-JS noch mehr Farbe ins Spiel bringen.
$(document).ready(function(){
$('.own-posting .link-thread-aufklappen img').attr('src','http://src.selfhtml.org/forum/ordner-zu-interessant.png');
$('.own-posting').parents('.thread-start').find('.link-thread-zuklappen img').attr('src','http://src.selfhtml.org/forum/ordner-auf-interessant.png');
$('.own-posting').parents('.thread-start').find('> ul > li').addClass('interesting');
$('.interesting').each(function(){
$(this).parents().eq(1).css({'background':'lavender', 'border':'1px solid #C6C6DA'});
})
})
Matthias
Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
Lies bitte mal aufmerksam.
Open-Relay verhindern:
http://www.linux-magazin.de/Ausgaben/2007/01/Schleudertrauma
http://de.wikipedia.org/wiki/SMTP-Relay-Server
http://www.synology-wiki.de/index.php/Mail-Relay_mit_Postfix#Selektives_Realying_mit_Postfix
usw.
Spirituelle Grüße
Euer Robert
Hallo,
Hallo ich habe ein kleines Script geschrieben, das eine Mail lossendet.
Wenn ich mir aber den Header ansehe, steht da alles möglich drin über meinen Server, was ich nicht will.
da steht normalerweise nur drin, was für die Durchführung und ansatzweise Dokumentation des Mailversands nötig ist - zum Beispiel Hostname und IP des beteiligten Servers, Absender- und Empfängeradresse, der Zeitpunkt des Versands bzw. der Weitervermittlung, und dergleichen mehr. Also nichts, was irgendwie geheimhaltungswürdig wäre.
Ach ja, und natürlich die Meta-Informationen über die Mailnachricht selbst wie Content-Type, Encoding und so'n Zeug.
Nun dacht ich mir wenn ich ihn statt über mail() über smtp versende, wie normale Mails auch aus Outlook heraus. Also mit Passwort etc.
Dann stehen in der verschickten e-Mail in etwa die gleichen Angaben drin, weil nicht PHP die ergänzt, sondern der Mailserver. Was glaubst du dadurch zu gewinnen?
So long,
Martin
Hallo ich habe ein kleines Script geschrieben, das eine Mail lossendet.
Wenn ich mir aber den Header ansehe, steht da alles möglich drin über meinen Server, was ich nicht will.
Ein Großteil der Informationen, die dich im Kopf der Mail vermutlich stören, werden vom empfangenden Mailserver eingetragen, nicht vom versendenden (ich vermute, dir geht es um die Received:-Zeilen – received = empfangen).
Du hast also keinen Einfluss auf diese Daten.
Nun dacht ich mir wenn ich ihn statt über mail() über smtp versende, wie normale Mails auch aus Outlook heraus. Also mit Passwort etc.
Du meinst mit den Zugangsdaten deines "normalen" E-Mail-Kontos? Das geht zwar, aber damit kommst du nur vom Regen in die Traufe. Die Angabe, von welchem Rechner die Mail ursprünglich stammt, bleibt weiter erhalten (siehe oben) und obendrein hast du dann auch noch eine kleine Auskunft über dein E-Mail-Konto mit drinstehen.
Davon abgesehen geht auch die von PHP eingelieferte Mail letztlich per SMTP auf die Reise, wie die anderen schon ausgeführt haben.
Die direkte Auslieferung per SMTP an den empfangenden Mailserver möchtest du sicher nicht, denn der Aufwand ist im Vergleich zu mail() extrem hoch.
Fürs reine Protokoll findest du vielleicht noch irgendeinen PHP-Krams, aber kann der auch Verschlüsselung? Wie findest du heraus, welcher Mailserver für welche Domain zuständig ist? Und was ist, wenn der empfangende Mailserver gerade abwesend ist?
Das alles erledigt dein Mailserver für dich mit dem kurzen Aufruf von mail(), du kannst bei einer Umgehung von mail() nur verlieren (und sei es nur Zeit für andere schöne Dinge).
Liebe Mitdenker,
liebe Wissende,
liebe Neugierige,
ja!
Die direkte Auslieferung per SMTP an den empfangenden Mailserver möchtest du sicher nicht, denn der Aufwand ist im Vergleich zu mail() extrem hoch.
Man benutze einfach das PHP-Skript von Dirk Paehl.
Das wird aber vermutlich nichts nützen, wenn sein PHP-Host keinen MX-Eintrag im DNS hat und so das Reverse DNS möglich macht. Die meisten Mailserver nehmen keine eMails mehr an, wenn das Reverse Lookup scheitert.
Bei einer Dial-In-IP hast Du einen solchen Eintrag nicht, denn die gehört ja Vielen verschiedenen Leuten. Und Dynamic DNS ist dafür auch meistens nicht geeignet (je nach Einstellungen des Mail-Servers).
Bin mal gespannt, wann sich Sven Rautenberg hier mal zu Wort meldet. Der kennt sich mit diesen Dingen nämlich richtig gut aus ;-))
Spirituelle Grüße
Euer Robert
hi kaya,
http://forum.de.selfhtml.org/archiv/2014/5/t217437/#m1493705
Dazu brauchst du dann das Zend-Framework im Zend-Ordner ...; bzw. den Autoloader brauchst du und den Mail-Ordner ...;
mfg
tami
Moin!
Hallo ich habe ein kleines Script geschrieben, das eine Mail lossendet.
Wenn ich mir aber den Header ansehe, steht da alles möglich drin über meinen Server, was ich nicht will.
Nun dacht ich mir wenn ich ihn statt über mail() über smtp versende, wie normale Mails auch aus Outlook heraus. Also mit Passwort etc.Aber ich finde nichts dazu, wahrschienlich suche ich nach dem falschen. Ich möchte auch keine PHPmailer etc.
Doch, möchtest du!
Das SMTP-Protokoll ist sehr komplex. Du kannst es natürlich alles selbst schreiben, machst dabei dann dieselben Fehler bzw. ignorierst die üblichen Grenzfälle der Implementierung, wie vor dir schon hunderttausend andere Programmierer, und es kostet dich außerdem noch eine riesige Menge Zeit, dies zu tun.
Was spricht dagegen, für die eigentliche Arbeit eine Bibliothek zu nehmen, die nach derzeitigem Wissensstand von etlichen Programmierern in langen Jahren fehlerbereinigt ist, und sich in deinem eigenen Code nur um die eigentlichen Details deines Wunschverhaltens zu kümmern?
- Sven Rautenberg