Ankündigung

Einklappen
Keine Ankündigung bisher.

Viele Fragen rund um das Thema 'Mail'

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Brombeermilchtrinker
    antwortet
    Hallo die Mango und danke für die ausführliche Antwort!

    Ich habe jetzt weiter getestet und muss zunächst feststellen, dass das, was wsp vor 1 Woche geschrieben hat, offenbar nicht stimmt bzw. bei mir nicht funktioniert:

    Zitat von wsp Beitrag anzeigen
    Mittlerweile passt hier auch sslout.de über Port 465
    (Mit Benutzername & Passwort eines gültigen Postfaches)
    Also egal, ob mit der Angabe von TSL oder SSL: Bei Verwendung von Port 465 kommt mit der Hostangabe sslout.de immer sofort eine Fehlermeldung, nämlich Mailer error: SMTP connect() failed. Egal, ob mit oder ohne dem ssls:// davor!

    Wenn ich die Angabe für die Hostadresse wieder auf das ursprüngliche sslout.df.de ändere und jetzt den Hinweisen von di Mango folge, dann habe ich folgende Ergebnisse:

    $mail->Host = "sslout.df.eu";
    $mail->Port = 465;
    $mail->SMTPSecure = "TLS";


    Ja, richtig. Port 465 funktioniert so auch. Diese Kombination hatte ich vor Tagen eigentlich auch dabei. Ohne Erfolg. Ich nehme an, da hatte ich das mit der anderen Hostadresse gemacht.

    $mail->Host = "sslout.df.eu";
    $mail->Port = 465;
    $mail->SMTPSecure = "SSL";


    Das führt zum schon beschriebenen Timeout Error.

    $mail->Host = "ssl://sslout.df.eu";
    $mail->Port = 465;
    $mail->SMTPSecure = "SSL";


    Richtig, so funktioniert es!

    Zu Deinen anderen Anmerkungen: Das klingt alles sehr schlüssig für mich und ich kann dem auch folgen. Daraus würde sich jetzt aber ergeben, dass fast alle Seiten/Skripte zu dem Thema falsch liegen, weil dort wird immer wieder darauf hingewiesen, man soll auf keinen Fall die SSL Angabe machen bei Verwendung von PHPMailer, weil das ja veraltet sei. Obwohl das aber an so vielen Stellen anders steht, folge ich trotzdem Deiner Erklärung. Und ich habe auch eine Seite gefunden bei meinen Recherchen, die das dann endlich bestätigt hat.

    Dort steht das unter Encryption flavours, nur mit dem Unterschied, dass dort die Angabe anders gemacht wird. Statt $mail->SMTPSecure = "TLS"; wird $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; verwendet. Und statt $mail->SMTPSecure = "SSL"; wird $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; verwendet. Aber ich nehme an, das ist ja synonym und bewirkt das völlig Selbe.

    Mich wundert nur, wieso dann wirklich fast überall in Beispielskripten so explizit darauf hingewiesen wird, man möge nur die TSL Angabe machen. Ist somit völlig falsch.

    Verstehe ich das also richtig?! Wenn ich die SSL-Angabe mache und die Mail kommt an, dann kann ich mir sicher sein, dass das verschlüsselt gesendet worden ist. Während bei Mails, wo ich TLS angegeben habe, eine angekommene Mail nur vielleicht verschlüsselt gesendet worden ist. Wenn dem so ist, dann ist es eigentlich genau umgekehrt zu dem, wie es überall steht. Dann soll man die TLS Angabe meiden und nur SSL verwenden. Schon irgendwie sehr verwirrend, das Ganze!

    Zitat von Nils Dornblut Beitrag anzeigen
    Es ist völlig normal, dass Sie dort beliebige Absender einsetzen können. Darauf prüfen die Mailserver nicht beim Versand. Meist gibt es, wie Sie schon schrieben, höhere SPAM-Werte oder aufgrund SPF ist es gar nicht möglich. Hier sollte beim Absender dann aber eine Meldung aufschlagen. Sie versenden bei dem Skript via SMTP. Es könnte sein, dass da ein spezieller Schutz wirksam wird, der den Versand dann doch verhindert. Wenn es notwendig ist, lasse ich das gerne prüfen.
    Naja, es wäre schon interessant, wieso es laut Skript zu einem Mailversand gekommen ist, diese Mails aber nie ankommen, wenn die Domain nicht die meinige ist. (Unabhängig davon, ob die Domain existiert oder nicht.) Bzw. noch interessanter: Ist es mit PHPMailer möglich, als Absender-Adresse eine falsche zu nehmen, so dass die Mail auch ankommt?

    Einen Kommentar schreiben:


  • Nils Dornblut
    antwortet
    Hallo Brombeermilchtrinker,

    danke, mir wiederstrebt der Port 25 etwas, vielleicht helfen ja die Hinweise von PanitaMango

    Zitat von Brombeermilchtrinker Beitrag anzeigen
    Aufgefallen ist mir noch, dass ich für $S_sender_mail jede beliebige Adresse verwenden kann, solange sie mit @meine.domain.example.org endet. Bei Domains, die nicht mir gehören bzw. die es gar nicht gibt, bekomme ich keine Fehlermeldung sondern ein "Message has been sent.", diese Mails kommen aber nie an. Während ich es mit der PHP Funktion mail() schaffe, Mails erfolgreich zu versenden, die als Absender völlig fremde oder real nicht existierende Domains angeben. (Abgesehen davon, dass dies die Spam-Einstufung natürlich erhöht!). Würde mich interessieren, woran das liegt.
    Es ist völlig normal, dass Sie dort beliebige Absender einsetzen können. Darauf prüfen die Mailserver nicht beim Versand. Meist gibt es, wie Sie schon schrieben, höhere SPAM-Werte oder aufgrund SPF ist es gar nicht möglich. Hier sollte beim Absender dann aber eine Meldung aufschlagen. Sie versenden bei dem Skript via SMTP. Es könnte sein, dass da ein spezieller Schutz wirksam wird, der den Versand dann doch verhindert. Wenn es notwendig ist, lasse ich das gerne prüfen.

    Mit freundlichen Grüßen

    Nils Dornblut

    Einen Kommentar schreiben:


  • PanitaMango
    antwortet
    Zitat von Brombeermilchtrinker Beitrag anzeigen

    Gerne!

    Also folgendes Skript versendet Mails ohne irgend ein Problem:

    PHP-Code:

    <?php

    // HTML Mail mit ausgelagertem Inhalt in eigener html Datei


    // Initialisierung der Seite:
    namespace PHPMailer\PHPMailer;
    header('content-type:text/html; charset=UTF-8');
    error_reporting(E_ALL|E_STRICT);
    mb_internal_encoding('UTF-8');
    date_default_timezone_set('Europe/Vienna');

    // Mailserverdaten mit existierender Mailadresse:
    $S_user '[email protected]';
    $S_password '1234';

    // Absender:
    $S_sender_mail '[email protected]';
    $S_sender_name 'Max Mustermann';

    // Empfänger:
    $S_recipient_mail '[email protected]';
    $S_recipient_name 'Eva Musterfrau';

    //Einlesen des Mail Bodys:
    $S_htmlFile 'mailbody.html';
    $S_bodyContent file_get_contents($S_htmlFile);

    // Betreff und Mailinhalt:
    $S_subject 'foo';
    $S_body $S_bodyContent;

    // Einfügen der PHPMailer Bibliothek:
    require 'inc/Exception.php';
    require 
    'inc/OAuth.php';
    require 
    'inc/PHPMailer.php';
    require 
    'inc/POP3.php';
    require 
    'inc/SMTP.php';

    // Zusammenstellung des Auftrags:
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->Host "sslout.df.eu";
    $mail->Port 25;
    $mail->CharSet 'UTF-8';
    $mail->setFrom($S_sender_mail$S_sender_name);
    $mail->addAddress($S_recipient_mail$S_recipient_name);
    $mail->isHTML();
    $mail->Subject $S_subject;
    $mail->Body $S_body;
    $mail->SMTPSecure "TLS";
    $mail->SMTPAuth TRUE;
    $mail->Username $S_user;
    $mail->Password $S_password;

    // Mailversand:
    if(!$mail->send())
    {
    echo 
    '<p>Message was not sent.<p>';
    echo 
    '<p>Mailer error: '.$mail->ErrorInfo.'</p>';
    }
    else
    {
    echo 
    '<p>Message has been sent.</p>';
    }

    ?>
    [snip]

    Dann würde mich noch interessieren, wieso bei Domainfactory kein DKIM Eintrag möglich ist (falls das stimmen sollte), wenn dies angeblich wichtig ist für eine bessere Mailreputation.

    Die Hauptfrage bleibt aber: Wieso führt Port 465 zu einem Timeout Error ohne Mailversand, obwohl das der richtige Port wäre ... während die Portangabe 25 die Mails auf die Reise schickt.

    MfG

    Der Brombeermilchtrinker
    Hallo Brombeermilchtrinker,

    DKIM ist deswegen noch nicht möglich, weil die Mail-Server von DF noch nicht dafür ausgerüstet sind. Sie müssten jede rausgehende Mail signieren mit dem DKIM-Schlüssel und das geht hier nicht. Da ist DF aber nicht der einzige Laden, bei dem es noch nicht geht.

    ich versuche mich auch mal an einer Erklärung zu PHPmailer und SSL/TLS, obwohl andere hier technisch sicher viel versierter sind.

    Zwar stimmt es, was weiter oben geschrieben wurde, dass das Protokoll TLS der Nachfolger von SSL ist, dennoch gibt es den wunderbar verwirrenden Umstand, dass diese Protokollfragen hier beim PHP-Mailer gar keine Rolle spielen, da man mit ssl oder tls hier nicht das modernere Protokoll verwendet, sondern zwiscchen implizitem und explizitem Verschlüsseln unterscheidet. In beiden Fällen wird zur Verschlüsselung das Protokoll TLS verwendet. Verwirrend?

    Tatsache ist: es gibt zwei Varianten, Mails über eine verschlüsselte Verbindung zu versenden.

    Die eine ist "implizit", SMTPS über Port 465. Hier wird gründsätzlich nur eine verschlüsselte Verbindung über TLS versucht, schlägt dies fehl, gibt es einen Timeout/Fehler.

    Die andere "explizit", SMTP + STARTTLS über Port 25 oder 587, hier wird eine unverschlüsselte Verbindung begonnen, der Server fragt dann explizit nach einer Verschlüsselung. Können beide Server sich auf eine Verschlüsselung einigen, wird mit TLS verschlüsselt.

    Bei PHPMailer sieht das ganze so aus:

    Die Angabe
    Code:
    $mail->SMTPSecure = "TLS";
    teilt PHP-Mailer mit, er solle auf dem angegebenen Port SMTP + STARTTLS versuchen. Das funktioniert hier wohl gut auf Port 25, sollte aber eigentlich auch auf dem STARTTLS-Standardport 587 gehen.
    In PHPmailer wird das tls dann übersetzt in SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS

    Die Angabe
    Code:
    $mail->SMTPSecure = "SSL";
    teilt PHP-Mailer mit, er solle auf dem angegebenen Port SMTPS versuchen und sofort eine verschlüsselte Verbindung probieren.
    PHPmailer übersetzt das in SMTPSecure = PHPMailer::ENCRYPTION_SMTPS

    Das funktioniert bei den meisten Hostern auch, bei einigen habe ich es aber schon erlebt, dass es nur ging, wenn das Protokoll beim Host direkt mitgegeben wurde. Ansonsten hat der PHP auf dem Port, der Verschlüsselung voraussetzt, eine unverschlüsselte Anfrage gestellt, die dann nach Timeout negativ beschieden wurde.

    Hier hilft es bei einigen, beim Host das ssl direkt mitzugeben. Eigentlich sollte
    Code:
    $mail->Host = "sslout.df.eu";
    $mail->Port = 465;
    $mail->SMTPSecure = "ssl";
    funktionieren, ich hatte es aber schon, dass das "überschreiben" des Protokolls nicht funktioniert und stattdessen
    Code:
    $mail->Host = "ssl://sslout.df.eu";
    $mail->Port = 465;
    $mail->SMTPSecure = "ssl";
    - beachte das ssl:// beim Host - angegeben werden musste.

    Wie gesagt: ist alles ein wenig verwirrend, und wenn ich was falsch erklärt habe, sorry.

    Liebe Grüße,

    die Mango

    Einen Kommentar schreiben:


  • Brombeermilchtrinker
    antwortet
    Zitat von Nils Dornblut Beitrag anzeigen
    Also die Mailserver sind ganz sicher richtig konfiguriert. Können Sie die jetzt genutzte funktionierende Konfiguration noch einmal posten ohne die Benutzerdaten?
    Gerne!

    Also folgendes Skript versendet Mails ohne irgend ein Problem:

    PHP-Code:

    <?php

    // HTML Mail mit ausgelagertem Inhalt in eigener html Datei


    // Initialisierung der Seite:
    namespace PHPMailer\PHPMailer;
    header('content-type:text/html; charset=UTF-8');
    error_reporting(E_ALL|E_STRICT);
    mb_internal_encoding('UTF-8');
    date_default_timezone_set('Europe/Vienna');

    // Mailserverdaten mit existierender Mailadresse:
    $S_user '[email protected]';
    $S_password '1234';

    // Absender:
    $S_sender_mail '[email protected]';
    $S_sender_name 'Max Mustermann';

    // Empfänger:
    $S_recipient_mail '[email protected]';
    $S_recipient_name 'Eva Musterfrau';

    //Einlesen des Mail Bodys:
    $S_htmlFile 'mailbody.html';
    $S_bodyContent file_get_contents($S_htmlFile);

    // Betreff und Mailinhalt:
    $S_subject 'foo';
    $S_body $S_bodyContent;

    // Einfügen der PHPMailer Bibliothek:
    require 'inc/Exception.php';
    require 
    'inc/OAuth.php';
    require 
    'inc/PHPMailer.php';
    require 
    'inc/POP3.php';
    require 
    'inc/SMTP.php';

    // Zusammenstellung des Auftrags:
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->Host "sslout.df.eu";
    $mail->Port 25;
    $mail->CharSet 'UTF-8';
    $mail->setFrom($S_sender_mail$S_sender_name);
    $mail->addAddress($S_recipient_mail$S_recipient_name);
    $mail->isHTML();
    $mail->Subject $S_subject;
    $mail->Body $S_body;
    $mail->SMTPSecure "TLS";
    $mail->SMTPAuth TRUE;
    $mail->Username $S_user;
    $mail->Password $S_password;

    // Mailversand:
    if(!$mail->send())
    {
    echo 
    '<p>Message was not sent.<p>';
    echo 
    '<p>Mailer error: '.$mail->ErrorInfo.'</p>';
    }
    else
    {
    echo 
    '<p>Message has been sent.</p>';
    }

    ?>

    Aufgefallen ist mir noch, dass ich für $S_sender_mail jede beliebige Adresse verwenden kann, solange sie mit @meine.domain.example.org endet. Bei Domains, die nicht mir gehören bzw. die es gar nicht gibt, bekomme ich keine Fehlermeldung sondern ein "Message has been sent.", diese Mails kommen aber nie an. Während ich es mit der PHP Funktion mail() schaffe, Mails erfolgreich zu versenden, die als Absender völlig fremde oder real nicht existierende Domains angeben. (Abgesehen davon, dass dies die Spam-Einstufung natürlich erhöht!). Würde mich interessieren, woran das liegt.

    Dann würde mich noch interessieren, wieso bei Domainfactory kein DKIM Eintrag möglich ist (falls das stimmen sollte), wenn dies angeblich wichtig ist für eine bessere Mailreputation.

    Die Hauptfrage bleibt aber: Wieso führt Port 465 zu einem Timeout Error ohne Mailversand, obwohl das der richtige Port wäre ... während die Portangabe 25 die Mails auf die Reise schickt.

    MfG

    Der Brombeermilchtrinker

    Einen Kommentar schreiben:


  • Nils Dornblut
    antwortet
    Zitat von Brombeermilchtrinker Beitrag anzeigen
    Auf dieses Idee wäre ich nie gekommen, weil ja im Domainfactory Kundenmenü bei den Serveradresen explizit steht, dass man Port 465 nehmen muss für einen SSL-Versand. Und ich verlasse mich natürlich darauf, was dort steht.
    [...]

    Was ich jetzt gerne wissen würde: Was heißt das? Ist der Mailserver nicht richtig konfiguriert? Ist das PHPMailer Skript daran schuld? Oder was ist der Grund, wieso ich bei mir am Laptop Port 465 in Outlook eintragen muss für SSL Versand und bei PHPMAieler via ein Skript funktioniert nur Port 25. Das läuft doch beides über den selben Mailserver!?
    Also die Mailserver sind ganz sicher richtig konfiguriert. Können Sie die jetzt genutzte funktionierende Konfiguration noch einmal posten ohne die Benutzerdaten?

    Dann würde ich da gerne noch einmal drüber schauen und ggf. nachfragen. Ist noch eine andere Frage unklar?

    Mit freundlichen Grüßen

    Nils Dornblut

    Einen Kommentar schreiben:


  • Brombeermilchtrinker
    antwortet
    Hallo again!

    Zitat von Lukas M. Beitrag anzeigen
    Mal die Daten von hier getestet? https://github.com/redaxo/redaxo/issues/2699
    Die Seite habe ich besucht und dort folgenden Satz gefunden:

    Also AutoTLS checkt die Verbindung auf den gängigen SMTP-Ports, die TLS unterstützen. Evtl. wird bei einem Port ein TimeOut bei DF verursacht? Könnt Ihr mal manuelle Verbindungen über die Ports 25 (ja manchmal unterstützt es TLS), 465 and 587 testen und schauen ob der Fehler dann auch auftritt?
    Auf dieses Idee wäre ich nie gekommen, weil ja im Domainfactory Kundenmenü bei den Serveradresen explizit steht, dass man Port 465 nehmen muss für einen SSL-Versand. Und ich verlasse mich natürlich darauf, was dort steht.
    Gut, ich habe das jetzt mit 5 verschiedenen Szenarien getestet. Text Mail mit Body im Skript, Textmail mit eingelesenem Body aus separater txt Datei, HTML Mail mit Body im Skript, HTML Mail mit eingelesenem Body aus separater HTML Datei und letzteres nochmal samt Bildern.

    Alle 5 Tests verlaufen jetzt positiv. Die Mails werden versendet und kommen sofort an, wenn man Port 25 verwendet.

    Ich bin also einen großen Schritt weiter. Danke, Lukas! Wie gesagt, ich hab mich auf die Angabe im Kundenmenü verlassen und hätte das nie hinterfragt.

    Was ich jetzt gerne wissen würde: Was heißt das? Ist der Mailserver nicht richtig konfiguriert? Ist das PHPMailer Skript daran schuld? Oder was ist der Grund, wieso ich bei mir am Laptop Port 465 in Outlook eintragen muss für SSL Versand und bei PHPMAieler via ein Skript funktioniert nur Port 25. Das läuft doch beides über den selben Mailserver!?

    Einen Kommentar schreiben:


  • masterframe
    antwortet
    Ich verwende zwar Version 6.1.4, es sollte aber keinen nennenswerten Unterschiede zur aktuellen Version geben.


    PHP-Code:
    <?php

    use PHPMailer\PHPMailer\PHPMailer;
    use 
    PHPMailer\PHPMailer\Exception;

    require 
    'PHPMailer-master-6.1.4/src/Exception.php';
    require 
    'PHPMailer-master-6.1.4/src/PHPMailer.php';
    require 
    'PHPMailer-master-6.1.4/src/SMTP.php';

    $email "<h1>Mailtest</h1><p>Ich bin die UTF-8 HTML Test E-Mail</p>";
    $absender "[email protected]";
    $empfanger "[email protected]";
    $betreff "E-Mails mit phpmailer versenden";

    $mail = new PHPMailer;
    $mail->isSMTP(); // Send using SMTP
    $mail->Host 'sslout.df.eu'// Set the SMTP server to send through
    $mail->SMTPAuth true// Enable SMTP authentication
    $mail->Username '[email protected]'// SMTP username
    $mail->Password 'supergeheimes-passwort'// SMTP password
    $mail->SMTPSecure PHPMailer::ENCRYPTION_STARTTLS// Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted
    $mail->Port 465// TCP port to connect to


    // UTF-8 Mail
    $mail->CharSet "UTF-8";

    //Set who the message is to be sent from
    $mail->setFrom($absender);

    //Set who the message is to be sent to
    $mail->addAddress($empfanger);

    //Set the subject line
    $mail->Subject $betreff;

    //convert HTML into a basic plain-text alternative body
    $mail->msgHTML($email);
    //Replace the plain text body with one created manually
    $mail->AltBody strip_tags($email);


    //send the message, check for errors
    if (!$mail->send()) {
    echo 
    "<h1>Mailer Error</h1><h2>" $mail->ErrorInfo."</h2>";
    }else{
    echo 
    "<h1>Alles gut</h1>";
    }


    ?>
    Zuletzt geändert von masterframe; 01.05.2020, 18:12.

    Einen Kommentar schreiben:


  • Lukas M.
    antwortet
    Zitat von Brombeermilchtrinker Beitrag anzeigen
    Sorry, das ist einfach programmtechnisch völlig unlogisch. Dem Skript ist es egal, auf welchem Weg es zu seinem Platz gekommen ist. (Abgesehen davon, dass Skripte sowohl über ein FTP Programm, als auch über ein FTP Webinterface sowieso immer durch eine Passwortschranke laufen!)
    Nein, völlig logisch.
    FTP ist jetzt nur ein Beispiel. Klar kannst du auch über irgendein Webinterface hochladen oder über SFTP.
    In allen Fällen gilt aber: Es ist bekannt welchem Kunden das Script gehört. Und damit eben auch wer welche Mail versendet.

    Wenn du über mail() sendest wird Aus der Sicht der Verarbeitung muss es einen Unterschied machen, ob eine Angabe von Username, Passwort und $mail-&gt;SMTPAuth = TRUE; gemacht wird oder nicht. Und wenn ich sehe, dass ein Mailversand auch ohne diese Angaben funktioniert, dann bleibt für mich die Frage, wozu die Angabe dann gut sein soll.
    Gibt es ja auch.
    Wenn du über mail() versendest wird die Mail an sendmail übergeben. Das läuft lokal und lässt dementsprechend nicht zu dass es von extern angesprochen werden kann.
    Die Authentifizierung Mails zu versenden ist also praktisch ein Useraccount auf dem Server. Existiert der kann man Sendmail via Shell oder eben auch via PHP-Script ansprechen.
    Beim Mailserver ist das anders. Da ist es natürlich gewollt dass der extern ansprechbar ist. Und damit nicht jeder Hinz und Kunz Spammails verschickt gibt es dort eben Username/Passwort.
    In beiden Fällen lässt sich so der Verursachen leicht ermitteln.

    Der Vorteil einen richtigen, "echten" Mailserver zu verwenden ist eben die bessere Reputation (weil z.B. bei Provider xyz auf der Whiteliste, Cluster allgemein bekannt), schnellere Abarbeitung und je nach Mailserver eben z.B. auch Unterstützung von DKIM.

    Wenn es wirklich so ist, wie es immer heißt, nämlich dass niemand die PHP Funktion mail() verwendet und stattdessen mit PHPMailer arbeitet, dann kann das doch kein so exotisches Problem darstellen???
    Mal die Daten von hier getestet? https://github.com/redaxo/redaxo/issues/2699

    Einen Kommentar schreiben:


  • Brombeermilchtrinker
    antwortet
    Leider komme ich keinen Schritt voran!

    Natürlich habe ich auch Port 587 getestet. Ich sitze jetzt seit 3 Tagen täglich 10 Stunden vor dem Laptop und wüsste nicht, was ich jetzt noch nicht getestet habe.

    Das erste Komische ist ja schon mal der Code, mit dem es noch funktioniert und die Mails ankommen:
    PHP-Code:

    $mail 
    = new PHPMailer;
    $mail->isSMTP();
    $mail->CharSet 'UTF-8';
    $mail->setFrom($sender_mail$sender_name);
    $mail->addAddress($S_recipient_mail$S_recipient_name);
    $mail->Subject 'foo';
    $mail->Body 'bar';
    $mail->SMTPSecure "TLS"

    Wieso das funktioniert, ist mir nämlich ein Rätsel. Es wird kein SMTP Server angegeben und kein Port, obwohl dieser ja bei TLS abweicht und angegeben werden müsste. Ich habe keine Ahnung, ob die Mail in dem Fall jetzt vom Webserver oder vom Mailserver kommt. Ich habe auch keine Ahnung, ob das per TLS übermittelt wird oder nicht. Ich weiß nur, die Mail wird versendet und kommt an.

    OK, und wenn ich jetzt die Angabe eines Ports und eines SMTP Servers dazu gebe, funktioniert es nicht mehr. Ich habe alle möglichen Kombinationen aus den Host-Angaben sslout.eu, sslout.df.eu und sslmailpool.ispgateway.de sowie den Portangaben 20, 465 und 587 durchgetestet. Es kommt, bis auf eine Ausnahme, zum sofortigen Abbruch und der Ausgabe von Mailer error: SMTP connect() failed.

    Der abweichende Fall ist die Kombination aus $mail->Host = "sslout.df.eu"; und $mail->Port = 465;. Da passiert 3 Minuten nichts und der Cursor zeigt das Warte-Zeichen an, bis dann ein 504 Gateway Timeout Error vom Server kommt.

    An dieser Situation ändert sich auch nichts, wenn ich den Block mit Username, Passwort und einem $mail->SMTPAuth = TRUE; dazugebe. Was mich, so nebenbei, wieder auf mein Verständnisproblem bringt:

    Zitat von Lukas M. Beitrag anzeigen

    Ja, in deinem Beispiel verschickst du ja über den Webserver. Du hast dich dadurch "angemeldet" dass du ja das Script über FTP hochgeladen hast. Damit bist du als Spam-Verursacher auch klar wenn Spam raus geht.
    Sorry, das ist einfach programmtechnisch völlig unlogisch. Dem Skript ist es egal, auf welchem Weg es zu seinem Platz gekommen ist. (Abgesehen davon, dass Skripte sowohl über ein FTP Programm, als auch über ein FTP Webinterface sowieso immer durch eine Passwortschranke laufen!) Aus der Sicht der Verarbeitung muss es einen Unterschied machen, ob eine Angabe von Username, Passwort und $mail->SMTPAuth = TRUE; gemacht wird oder nicht. Und wenn ich sehe, dass ein Mailversand auch ohne diese Angaben funktioniert, dann bleibt für mich die Frage, wozu die Angabe dann gut sein soll.

    Jedenfalls ... ich bin jetzt an einem Punkt angekommen, wo ich einfach nicht mehr weiter weiß. Ich war auf so vielen unzähligen Seiten, habe YouTube durchforstet, habe alle Kombinationen durchgetestet - es ändert alles nichts daran, dass der Mailversand nicht funktioniert. Wenn es wirklich so ist, wie es immer heißt, nämlich dass niemand die PHP Funktion mail() verwendet und stattdessen mit PHPMailer arbeitet, dann kann das doch kein so exotisches Problem darstellen??? ​​​​​​​



    Einen Kommentar schreiben:


  • Funbug
    antwortet
    Ich erinnere mich noch dunkel, dass PHPMailer mir vor ein paar Jahren auch Sorgen gemacht hat. Ich bin dann auf SwiftMailer umgestiegen, das eine etwas modernere Architektur verfolgt. Wir versenden "sinngemäß" ohne weitere Parameter mit folgendem Code Mails:

    PHP-Code:
    require 'inc/swiftmailer/vendor/autoload.php';
    $transport = (new Swift_SmtpTransport('sslout.de'587))
    ->
    setUsername('[email protected]')
    ->
    setPassword('xxxxxxxxx');
    $mailer = new Swift_Mailer($transport);

    $message = (new Swift_Message($subject))
    ->
    setFrom([$user['email'] => 'Name'])
    ->
    setTo([$id->client->email])
    ->
    setBody($text);
    $result $mailer->send($message); 

    Einen Kommentar schreiben:


  • [headcrash]
    antwortet
    schon mal alternativ mit Port 587 getestet?

    Einen Kommentar schreiben:


  • Brombeermilchtrinker
    antwortet
    Ist wirklich niemand hier, der PHPMailer verwendet bzw. Erfahrung damit hat? Der/die müsste dann doch sehen, was bei meinem Code fehlt oder falsch ist!?!

    Einen Kommentar schreiben:


  • Lukas M.
    antwortet
    Zitat von Brombeermilchtrinker Beitrag anzeigen
    Da versäumst aber was! Weil Buttermilch, Brombeeren und etwas Vanille-Eis 1-2 Minuten gut im Mixer pürieren, dicken Strohhalm rein und Du hast was Göttliches vor Dir!
    Werde ich mir merken und mal probieren.

    Zitat von Brombeermilchtrinker Beitrag anzeigen
    Das wäre ja nur dann logisch, wenn es ohne Usernamen und Passwort prinzipiell nicht ginge. Aber genau darum ging es mir ja. SIehe mein erstes Beispiel. Das ist ohne Usernamen und Passwort und die Mail wird versendet! Sogar mit einer nicht real existierenden Mailadresse!
    Also frage ich mich weiterhin, wozu Usernamen und Passwort gut sind, wenn es auch ohne funktioniert und ich das sozusagen nur für mich selbst in den Code einfüge.
    Ja, in deinem Beispiel verschickst du ja über den Webserver. Du hast dich dadurch "angemeldet" dass du ja das Script über FTP hochgeladen hast. Damit bist du als Spam-Verursacher auch klar wenn Spam raus geht.


    Einen Kommentar schreiben:


  • Brombeermilchtrinker
    antwortet
    Hi Lukas!

    Zitat von Lukas M. Beitrag anzeigen
    5) Ganz einfach: Ohne Benutzername/Passwort könnte jeder den Mailserver zum Versand von Spam nutzen. Das schlägt sich dann natürlich auch auf die Repotation nieder. Am besten für den einfachen Versand ein Postfach mit Mindestgröße einrichten.
    Das wäre ja nur dann logisch, wenn es ohne Usernamen und Passwort prinzipiell nicht ginge. Aber genau darum ging es mir ja. SIehe mein erstes Beispiel. Das ist ohne Usernamen und Passwort und die Mail wird versendet! Sogar mit einer nicht real existierenden Mailadresse!
    Also frage ich mich weiterhin, wozu Usernamen und Passwort gut sind, wenn es auch ohne funktioniert und ich das sozusagen nur für mich selbst in den Code einfüge.

    LG

    Der Brombeermilchtrinker

    Zitat von Lukas M. Beitrag anzeigen
    Ich trinke zwar keine Brombeermilch, aber mit einer Buttermilch proste ich mal rüber
    Da versäumst aber was! Weil Buttermilch, Brombeeren und etwas Vanille-Eis 1-2 Minuten gut im Mixer pürieren, dicken Strohhalm rein und Du hast was Göttliches vor Dir!

    Einen Kommentar schreiben:


  • Brombeermilchtrinker
    antwortet
    Danke für Eure bisherigen Antworten!

    Leider stehe ich genau so da wie vor 10 Stunden. Es funktioniert einfach nicht.
    Ich habe extra eine Mailadresse angelegt und mit den Logindaten dieser Mailadresse arbeite ich nun.
    Leider bin ich wieder genau dort, wo ich schon war:
    Es passiert minutenlang nichts bei Aufruf der Seite ... bis dann irgendwann die Gateway Timeout Fehlermeldung kommt.
    Das hier ist jetzt 1:1 das komplette Skript. Ich habe nur die URLs/Mailadressen anonymisiert.
    Irgendwo hier muss also was falsch sein oder es fehlt etwas:

    PHP-Code:

    <?php

    declare(strict_types 1);
    namespace 
    PHPMailer\PHPMailer;
    header('content-type:text/html; charset=UTF-8');
    error_reporting(E_ALL|E_STRICT);
    mb_internal_encoding('UTF-8');
    date_default_timezone_set('Europe/Vienna');

    // Absender:
    $sender_mail '[email protected]';
    $sender_name 'Max Mustermann';

    //Empfänger:
    $S_recipient_mail '[email protected]';
    $S_recipient_name 'Max Mustermann';

    require 
    'inc/Exception.php';
    require 
    'inc/OAuth.php';
    require 
    'inc/PHPMailer.php';
    require 
    'inc/POP3.php';
    require 
    'inc/SMTP.php';

    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug SMTP::DEBUG_SERVER;
    $mail->CharSet 'UTF-8';
    $mail->Host 'sslout.de';
    $mail->Port 465;
    $mail->SMTPAuth TRUE;
    $mail->SMTPSecure "TLS";
    $mail->Username '[email protected]';
    $mail->Password 'mein_passwort';
    $mail->setFrom($sender_mail$sender_name);
    $mail->addAddress($S_recipient_mail$S_recipient_name);
    $mail->Subject 'foo';
    $mail->Body 'bar';

    if(!
    $mail->send())
      {
        echo 
    '<p>Message was not sent.<p>';
        echo 
    '<p>Mailer error: '.$mail->ErrorInfo.'</p>';
      }
    else
      {
        echo 
    '<p>Message has been sent.</p>';
      }

    ?>

    Sieht wer, woran es scheitert?

    Einen Kommentar schreiben:

Lädt...
X