Swiftmailer - Anwendungsbeispiel

  • Hallo beisammen,


    bin gerade im Thema swiftmailer und komme nicht so richtig weiter.


    Ich habe die Dateien heruntergeladen und angezogen. Ich bekomme dann die Fehlermeldung:

    Fatal error: Uncaught Error: Call to undefined method Swift_SmtpTransport::newInstance() in C:\xampp\htdocs\pojekt\einsterneinberg\kontakt-swift.php:17 Stack trace: #0 {main} thrown in C:\xampp\htdocs\pojekt\einsterneinberg\kontakt-swift.php on line 17


    Linie 17 ist unten im Code:
    $oTransport = Swift_SmtpTransport::newInstance('smtp.strato.de', 587 );


    Code nun hier (Einlogdaten sind mit +++ und ####:


    Was läuft da bei mir falsch?


    Danke für die Hilfe schon im Voraus. Gerne auch mal ein Beispielcode der in der Anwendung funktioniert.

  • Der link hat mich weitergebracht. Danke JR Cologne.


    Dann habe ich Zeile für Zeile nochmals gecheckt und jetzt bekomme ich diese Anzeige:



    In dem gleichen Forum von diesem link habe ich dann auch nach diesem Fehler gesucht, aber leider keine Antwort bekommen als: Swiftmailer Installation war defekt. Daraufhin habe ich den Swiftmailer nochmals komplett neu installiert.


    Leider ohne Erfolg. Ausserdem sehe ich, dass der egulias/email-validator eingebaut werden sollte. Aber wo muss ich den hinterlegen? und warum ist der im swiftmailer nicht hinterlegt, wenn er dort gebraucht wird?


    Dann sehe ich in einem Kommentar dort, dass man das als "package" über composer einfügen muss. Als ich dort mich eingelesen habe, habe ich mal 5 Minuten Pause gemacht. Das Thema scheint doch ein wenig komplexer zu sein und deswegen will ich hier nochmal anklopfen.


    Jetzt stehe ich wieder mit leeren Händen da. Hat jemand eine Idee? Gibt es eine einfachere Lösung dazu?



    Die Frage an die Profis ist letztlich, ob ich erst einmal weiter in die Theorie von PHP mehr einsteigen soll bevor ich hier weitermache. Eigentlich wollte ich die Sachen aus den PHP DVDs (bin schon Mitte der 2. DV) ein wenig parallel mit eigenen Ideen anwenden (und vielleicht darüber hinaus). Falls das aber nicht sinnvoll ist, dann mache ich erst mal die kompletten DVDs durch.


    Schließlich will ich die Spezialisten hier im Forum nicht mit Kram "belästigen".

  • Komisch, kann jetzt auch nicht wirklich erkennen, wie eine manuelle Installation in dem Fall funktionieren sollte.


    Am besten ist es dann tatsächlich, wenn du einfach Composer nutzt.


    Dass dir die CDs dabei allzu viel helfen, bezweifel ich. Dir wird das Verständnis des Ganzen dann vielleicht höchstens ein bisschen leichter fallen.


    Also: Entweder du lässt es erstmal oder du setzt nochmal alles auf Null zurück und versuchst die Installation über Composer.


    Das wäre zumindest mein Ratschlag.

  • Hi JR Cologne,


    Habe mich mit composer doch einfach mal auseinander gesetzt. Alles soweit im System hinterlegt (war dann doch gar nicht so schwer), aber jetzt kommt diese Fehlermeldung:


    Warning: require(C:\xampp\htdocs\pojekt\einsterneinberg\vendor\composer/../../lib/swift_required.php): failed to open stream: No such file or directory in C:\xampp\htdocs\pojekt\einsterneinberg\vendor\composer\autoload_real.php on line 66
    Fatal error: require(): Failed opening required 'C:\xampp\htdocs\pojekt\einsterneinberg\vendor\composer/../../lib/swift_required.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\pojekt\einsterneinberg\vendor\composer\autoload_real.php on line 66


    Dabei habe ich geprüft, ob diese Datei: swift_required.php und auch autoload_real.php hinterlegt sind. Alles ist da.

    composer.json Datei vorhanden im Verzeichnis mit der oben genannten php Datei und die php Datei wurde auch erweitert mit:


    Code
    1. require __DIR__ . '/vendor/autoload.php';

    Was habe ich jetzt wieder falsch gemacht?

  • Hier der php Code (die sensiblen Daten sind mit++++++++ gekennzeichnet):

    die composer.json Datei (von swiftmailer):

    composer.lock folgt

  • composer.lock (unverändert, habe ich nicht angerührt nach installation). Leider mit 310 Zeilen zu lang für das Forum.

    Deshalb habe ich die als txt Datei angehängt. Hoffe das ist ok für Dich.

    composer.txt


    Vielen Dank für Dene Zeit JR Cologne.


    P.S.: Die php Datei ist jetzt nicht der Reißer. Ich will einfach nur mit einer php Basis Datei den composer verstehen, wie ich am Beispiel swiftmailer umsetzten kann. Bitte um Verständnis.

  • Ah, ne. So kann das nicht funktionieren.


    1. Entferne die Einbindung von swift_required.php. Der Sinn hinter dem Composer Autoloader ist, dass dieser bereits alle Dateien, die benötigt werden, einbindet. Das wäre also doppelt gemoppelt.


    2. Du hast einfach die composer.json vom Swift-Mailer kopiert. Das ist falsch, da dies die Datei ist, die das Swift-Mailer Package beschreibt. Wenn du selber ein Package für Composer entwickeln würdest, bräuchtest du eine ähnliche Datei.

    In deinem Fall reicht jedoch Folgendes aus:

    Code
    1. {
    2. "require": {
    3. "swiftmailer/swiftmailer": "^6.0"
    4. }
    5. }

    Dann noch composer install im Terminal ausführen und alles sollte installiert sein.


    Alternativ kannst du auch nur das Terminal nutzen und Folgendes innerhalb deines Projektordners ausführen:


    Code
    1. composer require "swiftmailer/swiftmailer:^6.0"


    Dies erstellt die composer.json dann automatisch und installiert alles.

  • Hi JR Cologne:


    Danke für Deine Geduld. Aber ich kann Dir sagen, dass Deine Kommentare und Korrekturen für mich sehr wichtig sind. Ich beginne langsam zu verstehen wie composer funktioniert.


    Kurz zum weiteren Vorgehen:

    1. -> erledigt

    (Frage wäre hier, warum dies in den vielen, vielen Beispielen von swiftmailer im Internet immer angezogen wird. Kann aber verstehen, dass das mit dem composer sich erledigt)

    2. -> erledigt (Jetzt verstehe ich auch die Hinweise in der composer documentation! Jetzt hat es klick gemacht.

    3. -> composer install und composer update im Verzeichnis von neuem composer,json gemacht.


    Dann habe ich die php Datei wieder mit xampp und localhost laufen lassen (ich unterschlage hier, dass in der php Datei noch ein Fehler mir unterlaufen ist; - jetzt aber korrigiert):



    Diesmal habe ich diesen Fehler:

    Fatal error: Uncaught Error: Call to undefined function Swift_Mailer() in C:\xampp\htdocs\pojekt\einsterneinberg\kontakt-swift1.php:33 Stack trace: #0 {main} thrown in C:\xampp\htdocs\pojekt\einsterneinberg\kontakt-swift1.php on line 33


    Dieser Fehler bezieht sich auf die Zeile:


    Code
    1. $oMailer = Swift_Mailer( $oTransport );

    ??? Aber die Zeile ist doch korrekt?


    Ich habe trotzdem das Gefühl, dass ich ziemlich nahe dran bin. Könntet Ihr mir trotzdem nochmals hier helfen?


    Eine weitere Frage für die Zukunft:

    Wenn Alles läuft und meine Unwissenheit sich in ein klein wenig Ahnung umgeschlagen hat: Wie bringe ich das Ganze dann auf meinen Server?

    - Kopiere ich das Ganze einfach auf den Webspace?

    - Oder muss ich dann wieder etwas komplett anderes anpacken (in der composer documentation wird hier was von "global" geredet; - habe ich aber auch nicht so ganz verstanden)


    Danke für Korrekturen der Experten. Gerne auch ein wenig Hintergrundwissen zu den anderen Fragen in diesem Kommentar hier.

  • Kurz zum weiteren Vorgehen:

    1. -> erledigt

    (Frage wäre hier, warum dies in den vielen, vielen Beispielen von swiftmailer im Internet immer angezogen wird. Kann aber verstehen, dass das mit dem composer sich erledigt)


    Das sollte eigentlich nur bei den Beispielen ohne Composer vorhanden sein.



    Dir fehlt das new-Keyword. Mit dem new-Keyword wird nämlich ein Objekt (bzw. Instanz) einer Klasse erstellt/erzeugt.

    Die Fehlermeldung bekommst du, weil PHP denkt, es würde sich um eine normale Funktion handeln, jedoch existiert diese logischerweise nicht.

    Es gibt lediglich eine Klasse, die so heißt.

  • Jep; korrekt.


    $oMailer = new Swift_Mailer($oTransport);


    Dann klappt das auch.


    Die jetzige Fehlermeldung:

    Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\pojekt\einsterneinberg\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php on line 162


    kommt vermutlich deswegen, weil ich das Ganze noch in XAMPP laufen lasse. Richtig?


    Wenn das so ist, sind wir bei meiner letzten Frage von oben: Wie bringe ich das Ganze (damit meine ich den composer Teil) auf meinen Webspace?

    Ich habe mal testweise einfach die Ganzen Dateien rüberkopiert und bekomme jetzt diese Fehlermeldung:


    Fatal error: Uncaught Swift_TransportException: Connection to smtp.strato.de:465 Timed Out in /mnt/web308/e0/53/58474953/htdocs/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:440 Stack trace: #0 /mnt/web308/e0/53/58474953/htdocs/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(325): Swift_Transport_AbstractSmtpTransport->getFullResponse(0) #1 /mnt/web308/e0/53/58474953/htdocs/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(130): Swift_Transport_AbstractSmtpTransport->readGreeting() #2 /mnt/web308/e0/53/58474953/htdocs/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php(67): Swift_Transport_AbstractSmtpTransport->start() #3 /mnt/web308/e0/53/58474953/htdocs/kontakt-swift1.php(36): Swift_Mailer->send(Object(Swift_Message)) #4 {main} thrown in /mnt/web308/e0/53/58474953/htdocs/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php on line 440



    Ich glaube ich habe mich zu früh gefreut, dass ich den composer zumindest ein wenig verstanden habe.

  • Schau ich mir morgen an. Der erste Fehler sollte eigentlich auch bei Xampp nicht auftreten.


    Die Vorgehensweise alles auf den Server zu kopieren, sollte eigentlich auch funktionieren.


    Letzteres scheint eher ein Konfigurationsproblem von deinem SMTP zu sein.

  • Danke für Deine Geduld JR Cologne.


    Das mit SMTP schaue ich mir auch bei Gelegenheit an.

    LAss Dir Zeit, ab morgen wieder bei mir Arbeit. Zugang zu Internet: Nur begrenzt.


    Schöne Woche.

  • Hey,


    ich habe nun mit dem SwiftMailer den Mailversand getestet. Wenn ich mir diesen vom github downloade und die Hauptdatei richtig einbinde kommt keine Fehlermeldung. Nun jedoch wurde der SourceCode des SwiftMailers schon auf PHP 7 geupdatet/aktualisiert. Das heißt ich bekomme bei einem FreeWebspace schonmal Fehlermeldungen, da diese noch die PHP 5.5 Version auf deren Server haben.


    olkostbe : Nutze doch einfach den PHP-Mailer. Mit dem hatte ich bisher null Probleme. Dieser bietet dir ebenso viele Funktionen. Ebenso unterstützt er auch noch PHP 5. Versionen. Ein gutes Tutorial zu dem findest du hier: http://www.php-rocks.de/thema/…senden-mit-phpmailer.html

  • olkostbe Hast du das Ganze denn schon mal auf deinem Server getestet? Vielleicht liegt es doch daran.


    Habe bisher leider auch nicht wirklich was zu diesen Fehler gefunden, scheint meist eher eine Fehlkonfiguration zu sein.