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

    #16
    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

    Kommentar


      #17
      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
      Blog - Facebook - Twitter
      Communitybetreiber: domainfactory GmbH
      Impressum / Pflichtangaben

      Kommentar


        #18
        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?

        Kommentar


          #19
          Hallo Brombeermilchtrinker,

          freut mich, wenn ich helfen konnte.

          Dieses sslout.de kenne ich nicht, nur sslout.df.eu. Ist das andere vielleicht was gewhitelabeltes für Reseller?

          Ich würde nicht sagen, dass alle Scriptbeispiele falsch sind, nur gibt es eben Spezialkonfigurationen von PHP (und auf PHP kommt es an), bei denen es so nicht funktioniert. Mit DF kenne ich jetzt drei Hoster, bei denen der Standard nicht geht, einen in der Schweiz und zwei in Deutschland. Sonst stimmt immer der Standard aus den Beispielen. Hängt immer irgendwie an der PHP-Konfiguration.

          Wenn Du mit ssl:... beim Host und Port 465 arbeitests, hast Du von vornherein eine verschlüsselte Connection.
          Bei STARTTLS über 25 nicht unbedingt.
          Bei STARTTLS über 587 - keine Ahnung.

          Auf der von Dir verlinkten Seite steht:

          In PHPMailer this mode is selected by setting SMTPSecure = PHPMailer::ENCRYPTION_SMTPS (or 'ssl'),
          (or 'ssl') - Du kannst also beide Angaben machen.

          Dass STARTTLS auf Port 465 funktioniert ist klar, der Server fragt nach Verschlüsselung, der Server kann das, alles gut.

          Viele Grüße,

          die Mango

          Kommentar


            #20
            Zitat von Brombeermilchtrinker Beitrag anzeigen

            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.
            Ach so... Hier ist gemeint, dass SSL auf Port 465 veraltet ist und STARTTLS über 587 jetzt Standard für SMTP. Eigentkich wollten die den Port 465 schon umwidmen, aber haben sie dann doch nicht gemacht.

            STARTTLS über 587 ist immer verschlüsselt, 25 nicht zwingend (hab ich gerade erfahren).

            Kommentar


              #21
              OK, und jetzt kenne ich mich endgültig nicht mehr aus!

              Sorry, ich dachte, ich hab alles verstanden und das Thema ist beendet für mich. Aber durch Deine 2 Postings bin ich jetzt völlig ausgestiegen.

              Soll man jetzt $mail->SMTPSecure = "SSL"; oder $mail->SMTPSecure = "TLS"; nehmen?
              Und was ist jetzt der Unterschied?
              Welchen Port soll man nun nutzen?
              Ist eine via PHPMailer versendete Mail somit jetzt immer und in jedem Fall verschlüsselt gesendet worden, wenn sie angekommen ist?

              Ich hab gerade das Gefühl, mich noch weniger auszukernen als zu Beginn.

              Kommentar


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


                Richtig, so funktioniert es!
                Das ist die Kombination, die ich nehmen würde. Die funktioniert, ist vollverschlüsselt und der ganze Rest ist nur verwirrend.

                Kommentar


                  #23
                  Aber Du sagtest doch gerade im vorherigen Posting, "dass SSL auf Port 465 veraltet ist"!

                  Kommentar


                    #24
                    Zitat von Brombeermilchtrinker Beitrag anzeigen
                    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?
                    Wir prüfen das gerne, aber bitte nur, wenn es einen konkreten Anwendungszweck hat. Sonst ist das mehr vergebene Mühe und in sich halt aufwendig zu prüfen. Wenn Sie einen Anwendungszweck haben, dann bitte ein entsprechendes Setup erstellen und eine E-Mail verschicken. Bitte die genaue Zeit dann notieren und schauen, ob bei der Adresse, die Sie als Absender eingegeben haben, eine Fehlermeldung eintrifft. Falls das nicht passiert, teilen Sie uns bitte in einer Anfrage über das Kundenmenü an die Technik entsprechend innerhalb der Stunden danach mit, an wen Sie mit welchem Absender die E-Mail gesendet haben. Dazu die genaue Uhrzeit. Dann können wir das in den Logdateien noch nachvollziehen. Idealerweise bitte den Test innerhalb der Woche machen, da können wir schneller reagieren.

                    Mit freundlichen Grüßen

                    Nils Dornblut

                    Blog - Facebook - Twitter
                    Communitybetreiber: domainfactory GmbH
                    Impressum / Pflichtangaben

                    Kommentar


                      #25
                      Danke, Herr Dornblut, so wichtig ist das nicht für mich! Also nicht nötig!
                      Viel wichtiger wäre für mich, endlich Klarheit zu bekommen über die Verwendung von Host, Port und SSL/TLS Angabe in PHPMailer.
                      Mein ursprüngliches Problem ist zwar gelöst, ich kann jetzt Mails versenden via PHPMailer ... mein Problem ist nur, dass ich die ganze Sache nicht wirklich verstehe und das würde ich gerne. (Siehe vorhergehende Beiträge)

                      Kommentar


                        #26
                        Zitat von Brombeermilchtrinker Beitrag anzeigen
                        Danke, Herr Dornblut, so wichtig ist das nicht für mich! Also nicht nötig!
                        Viel wichtiger wäre für mich, endlich Klarheit zu bekommen über die Verwendung von Host, Port und SSL/TLS Angabe in PHPMailer.
                        Mein ursprüngliches Problem ist zwar gelöst, ich kann jetzt Mails versenden via PHPMailer ... mein Problem ist nur, dass ich die ganze Sache nicht wirklich verstehe und das würde ich gerne. (Siehe vorhergehende Beiträge)
                        Das Thema ist auch mir schon seit vielen Jahren bekannt und gerade das Skript sorgt immer wieder für Fragen. Die Aufarbeitung hier ist glaube ich vergleichsweise sehr gut und besser als andere alte Threads im alten Forum. Ich denke, dass wird sich noch weiter entwickeln über die Monate, also nur Geduld!

                        Mit freundlichen Grüßen

                        Nils Dornblut
                        Blog - Facebook - Twitter
                        Communitybetreiber: domainfactory GmbH
                        Impressum / Pflichtangaben

                        Kommentar


                          #27
                          Zitat von Nils Dornblut Beitrag anzeigen
                          Die Aufarbeitung hier ist glaube ich vergleichsweise sehr gut und besser als andere alte Threads im alten Forum.
                          Na kein Wunder bei meinem bemüht konstruktivem Wesen!

                          Kommentar


                            #28
                            Hallo,

                            Im Programm vom Brombeermilchtrinker vom 07.05.2020, 09:23

                            heißt es:

                            <?php

                            // HTML Mail mit ausgelagertem Inhalt in eigener html Datei


                            // Initialisierung der Seite:

                            namespace PHPMailer\PHPMailer;


                            ...


                            // 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';

                            <?php

                            ...


                            Wo genau, bzgl. des oben zitierten Programms, liegen denn jetzt die PHPMailer Dateien?
                            Ich nehme an, dass die im eigenen Webspace liegen.

                            Danke CADS11


                            Kommentar


                              #29
                              Hallo CADS11!

                              Zitat von CADS11 Beitrag anzeigen
                              Hallo,
                              Wo genau, bzgl. des oben zitierten Programms, liegen denn jetzt die PHPMailer Dateien?
                              Ich nehme an, dass die im eigenen Webspace liegen
                              Ja, das ist natürlich richtig!

                              Übrigens verwende ich jetzt folgende Einstellungen:

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


                              Folgende Angabe verwende ich nicht, weil auch das nur zu Problemen geführt hat damals:

                              $mail->SMTPSecure = "SSL";

                              Aber auch ohne dieser Angabe funktioniert es wunderbar!
                              Wenn ich mir mit dieser Konfiguration jetzt eine Mail senden lasse und mir dann in Outlook den Mailheader ansehe, dann steht dort:

                              Received: from [134.119.228.98] (helo=smtprelay08.ispgateway.de)
                              by mx14.ispgateway.de with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
                              Received: from [ ... ] (helo=examle.org)
                              by smtprelay08.ispgateway.de with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

                              Das bedeutet für mich, dass die Mail verschlüsselt bei mir angekommen ist und genau das war ja mein Ziel.



                              Kommentar


                                #30

                                >Aber auch ohne dieser Angabe funktioniert es wunderbar!

                                Und das ist mein Problem.
                                Ich bekomme das Programm nicht zum Laufen.

                                Was bedeutet
                                namespace PHPMailer\PHPMailer;

                                Wo müssen die Dateien vom PHPMailer sein.
                                Mit dem Befehl oben bleibt das Programm genau in dieser Zeile hängen.



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


                                Hier konnte ich einen relativen Pfad angeben und das Programm läuft auch über diese Zeilen.

                                Trotzdem mag er
                                require 'inc/OAuth.php';
                                nicht.

                                Der Aufruf sieht bei mir allerdings so aus
                                require '../../php/PHPMailer/src/Exception.php';
                                Ich habe nur einen relativen Pfad angeben können, keine absoluten.

                                Ich habe keine Idee mehr, was ich noch machen könnte.

                                Gruß CADS11






                                Kommentar

                                Lädt...
                                X