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

  • Nils Dornblut
    antwortet
    Hallo Brombeermilchtrinker,

    vielen Dank auch von meiner/unserer Seite. Ich hatte mit der gleichen Problematik auch vor einigen Wochen meinen Spaß. Skripttechnisch kam ich zu einem ähnlichen Ergebnis wie Sie mit weniger genutzten Möglichkeiten. Hier als Alternative:
    PHP-Code:
    <?php
    $debug 
    true// or
    $debug false;

    use 
    PHPMailer\PHPMailer\PHPMailer;
    use 
    PHPMailer\PHPMailer\Exception;
    use 
    PHPMailer\PHPMailer\SMTP;
    require 
    'PHPMailer/src/Exception.php';
    require 
    'PHPMailer/src/PHPMailer.php';
    require 
    'PHPMailer/src/SMTP.php';


    try {
    $mail = new PHPMailer($debug);

     if (
    $debug) {
                    
    // gibt einen ausführlichen log aus
                    
    $mail->SMTPDebug SMTP::DEBUG_SERVER
            }

            
    // authentifiziere dich über den smtp-login
            
    $mail->isSMTP();
            
    $mail->SMTPAuth true;
     


    $mail->setFrom('[email protected]''xyz Absender');
    $mail->addAddress('Emfaeng[email protected]''xyz Empfänger');


    $htmltext='HTML formatierter Quelltext';

    $mail->isHTML(true);
            
    $mail->Subject "Das ist der Betreff";
            
    $mail->Body    $htmltext;
            
    // $mail->AltBody = "Text";

     
    /* SMTP parameters. */
    $mail->Host 'sslout.df.eu';
    $mail->SMTPSecure PHPMailer::ENCRYPTION_STARTTLS;
    $mail->SMTPSecure PHPMailer::ENCRYPTION_SMTPS;
    $mail->SMTPOptions = array(
                
    'ssl' => array(
                      
    'verify_peer' => false,
                      
    'verify_peer_name' => false,
                      
    'allow_self_signed' => true
                
    ),
                
    'tls' => array(
                    
    'verify_peer' => false,
                    
    'verify_peer_name' => false,
                    
    'allow_self_signed' => true
                
    )
            );
    $mail->Username '[email protected]';
    $mail->Password '12345678Passwort';
    $mail->Port 465;
     
    //Anhänge
    //$mail->addAttachment("Dateiname.pdf", "Name_in_Mail.pdf"); //Liegt in dem Fall im Verzeichnis des Skripts hier


    //Senden der E-Mail
    $mail->send();

    } catch (
    PHPMailer\PHPMailer\Exception $e) {
        echo 
    "Message could not be sent. Mailer Error: ".$mail->ErrorInfo
    }
    Mit freundlichen Grüßen

    Nils Dornblut

    Einen Kommentar schreiben:


  • CADS11
    antwortet
    Hallo Brombeermilchtrinker,
    ich habe die letzten Tage auch rumprobiert.
    Schritt für Schritt ging es nun vorwärts.
    Nun habe ich es geschafft. Meine Mails werden versandt.
    Ich danke dir für deine Hilfe und die Programmteile.
    Wie du schon geschrieben hast, ist es sehr mühsam, wenn man sein Programm startet und bekommt gar keine Ausgabe mehr.
    Aber jetzt funktioniert es.
    Besten Dank für deine Mühe.

    Viele Grüße

    CADS11

    Einen Kommentar schreiben:


  • Brombeermilchtrinker
    antwortet
    Zitat von CADS11 Beitrag anzeigen
    Ich habe keine Idee mehr, was ich noch machen könnte.
    Hallo CADS11!

    Ich weiß aus eigener Erfahrung, wie mühsam und frustrierend das erfolglose Herumspielen mit PHPMailer ist. Deshalb, und auch weil ich es selbst wieder mal durchspielen wollte, habe ich mich gestern nochmals 3 Stunden hingesetzt und gebe Dir hier nun eine Anleitung von Punkt Null weg, so wie ich es gemacht habe … so dass es auch bei Dir funktionieren sollte:

    1.) Du machst Dir zum Testen einen neuen Ordner auf Deinem Webspace, ich habe ihn als "mailtest" benannt. In diesem Ordner legst Du ein weiteres Verzeichnis an, in dem dann die PHPMailer Ressourcen liegen werden. Ich habe das Verzeichnis als "inc_files" benannt.

    2.) Du gehst auf https://github.com/PHPMailer/PHPMailer und suchst Dir dort im oberen Drittel den mitten im Text stehenden Link "download PHPMailer as a zip file" und ladest Dir die aktuelle Version runter. Entpacke die Datei und platziere die 6 Ressourcen aus dem Ordner "src" (Exception.php, OAuthTokenProvider.php, OAuth.php, PHPMailer.php, POP3.php und SMTP.php) in das zuvor erstellte Verzeichnis "inc_files".

    3.) Du erstellst im Kundenmenü eine neue Mailadresse für Deine Domain example.org. Wir nehmen jetzt an, Dein Name ist Max Mustermann, die neue Mailadresse ist [email protected] example.org und das Passwort, das Du eingerichtet hast dazu, lautet "meinpasswort".

    3.) Nun erstellst Du eine PHP Ressource, die Mails verschicken soll. Ich habe sie "mail.php" benannt. Die speicherst Du im Verzeichnis "mailtest".
    PHP-Code:
    <?php

    // Initialisierung:
    declare(strict_types 1);
    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');

    // Namespace der Klassen Exception, PHPMailer und SMTP:
    use PHPMailer\PHPMailer\Exception;
    use 
    PHPMailer\PHPMailer\PHPMailer;
    use 
    PHPMailer\PHPMailer\SMTP;

    // Einbindung der PHPMailer Ressourcen:
    require 'inc_files/Exception.php';
    require 
    'inc_files/OAuthTokenProvider.php'// Diese Zeile muss vor der nächsten stehen, damit OAuth.php keinen Fehler verrsacht!!!
    require 'inc_files/OAuth.php';
    require 
    'inc_files/PHPMailer.php';
    require 
    'inc_files/SMTP.php';

    // Konfigurationswerte: (Sollte idealerweise natürlich ausgelagert sein!)
    $S_user                 '[email protected] example.org';
    $S_password             'meinpasswort';
    $S_absenderName         'Max Mustermann ~ Mailsystem';
    $S_absenderMailadresse  '[email protected] example.org';

    // Meine Funktion zum Senden von Mails:
    function senden(array $A_mail): string
       
    {
          global 
    $S_user; global $S_password; global $S_absenderName; global $S_absenderMailadresse;
          
    $S_senderName $S_absenderName;
          
    $S_senderAddress $S_absenderMailadresse;
          
    $S_recipientName $A_mail['S_recipientName'];
          
    $S_recipientAddress $A_mail['S_recipientAddress'];
          
    $S_type $A_mail['S_type'] ?? 'TXT';
          
    $B_html = ($S_type === 'HTML') ? TRUE FALSE;
          
    $S_subject $A_mail['S_subject'];
          
    $S_body $A_mail['S_body'];
          
    $O_mail = new PHPMailer;
          
    $O_mail -> isSMTP();
          
    $O_mail -> SMTPDebug 2// 0 = OFF (Für on air Umgebung), 1 = Client Messages, 2 = Client und Server Messages
          
    $O_mail -> Host "ssl://sslout.df.eu";
          
    $O_mail -> Port 465;
          
    $O_mail -> CharSet 'UTF-8';
          
    $O_mail -> setFrom($S_senderAddress$S_senderName);
          
    $O_mail -> addAddress($S_recipientAddress$S_recipientName);
          
    $O_mail -> Subject $S_subject;
          
    $O_mail -> Body $S_body;
          if(
    $B_html)
             {
                
    $O_mail -> isHTML();
             }
          
    $O_mail -> SMTPSecure "TLS";
          
    $O_mail -> SMTPAuth TRUE;
          
    $O_mail -> Username $S_user;
          
    $O_mail -> Password $S_password;
          
    $S_msg = ($O_mail -> send()) ? 'Mail wurde gesendet!' 'Mail wurde nicht gesendet!';
          return 
    $S_msg;
       }

    // Mail senden:
    $A_mail['S_recipientName']    = 'Berta Musterfrau';
    $A_mail['S_recipientAddress'] = '[email protected]';
    $A_mail['S_subject']          = 'Testmail: Können Kühe nähen?';
    $A_mail['S_body']             = 'Das ist eine Testmail.';

    $S_senden senden($A_mail);

    // Erfolgsausgabe:
    echo $S_senden;

    ?>

    4.) Und wenn Du jetzt die Angaben mit Deinen Daten ersetzt, sollte beim Aufruf von example.org/mailtest/mail.php problemlos eine Mail versendet werden. Du kannst meine Funktion natürlich noch erweitern, um zB. mit $O_mail -> AddAttachment($attachement); Anhänge mitzuversenden. Ich hoffe, das war eine Hilfe, gib doch Feedback!

    Liebe Grüße

    Der Brombeermilchtrinker

    Einen Kommentar schreiben:


  • CADS11
    antwortet

    >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






    Einen Kommentar schreiben:


  • Brombeermilchtrinker
    antwortet
    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.



    Einen Kommentar schreiben:


  • CADS11
    antwortet
    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


    Einen Kommentar schreiben:


  • Brombeermilchtrinker
    antwortet
    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!

    Einen Kommentar schreiben:


  • Nils Dornblut
    antwortet
    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

    Einen Kommentar schreiben:


  • Brombeermilchtrinker
    antwortet
    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)

    Einen Kommentar schreiben:


  • Nils Dornblut
    antwortet
    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

    Einen Kommentar schreiben:


  • Brombeermilchtrinker
    antwortet
    Aber Du sagtest doch gerade im vorherigen Posting, "dass SSL auf Port 465 veraltet ist"!

    Einen Kommentar schreiben:


  • PanitaMango
    antwortet
    $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.

    Einen Kommentar schreiben:


  • Brombeermilchtrinker
    antwortet
    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.

    Einen Kommentar schreiben:


  • PanitaMango
    antwortet
    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).

    Einen Kommentar schreiben:


  • PanitaMango
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X