Beiträge von Elly

    Bei Hotmail muss wohl der SMTP-Server und die Mailadresse, an die das Formular geschickt wird, dieselbe sein.


    Dann bleib ich wohl bei Google.

    Achso, klingt logisch. Danke!

    Das habe ich allerdings hier so nicht rausgelesen.

    Warum ist das überhaupt nötig? Es stört doch eigentlich keinen.


    Die Daten von Outlook findet man hier. Hat aber nicht geklappt. Die Authentifizierung klappt, aber es wird danach trotzdem angezeigt als wäre eine falsche Mailadresse eingegeben.

    Erstmal ist alles gut und am Ende steht dann folgendes:

    Zitat


    2021-05-14 19:28:03 SERVER -> CLIENT: 554 5.2.0 STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied; Failed to process message due to a permanent exception with message Cannot submit message. 0.35250:0A002D67, 1.36674:0A000000, 1.61250:00000000, 1.45378:02000000, 1.44866:67020000, 1.36674:0E000000, 1.61250:00000000, 1.45378:6C020000, 1.44866:94010000, 16.55847:F8020000, 17.43559:0000000024020000000000000000000000000000, 20.52176:140F21901A004010F1030000, 20.50032:140F21908A174010F1030000, 0.35180:00000000, 255.23226:0


    2021-05-14 19:28:03 SMTP ERROR: DATA END command failed: 554 5.2.0 STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied; Failed to process message due to a permanent exception with message Cannot submit message. 0.35250:0A002D67, 1.36674:0A000000, 1.61250:00000000, 1.45378:02000000, 1.44866:67020000, 1.36674:0E000000, 1.61250:00000000, 1.45378:6C020000, 1.44866:94010000, 16.55847:F8020000, 17.43559:0000000024020000000000000000000000000000, 20.52176:140F21901A004010F1030000, 20.50032:140F21908A174010F1030000, 0.35180:00000000, 255.23226:0


    SMTP Error: data not accepted.

    Ja, das schon. Weil ich das mit den Tipps von dir und von der Tutorial-Seite nicht rausbekommen habe. Und da es ja nur eine Notiz ist und die eine Seite ja schrieb, dass das auch gar nicht so wichtig sei, das wegzubekommen, habe ich mich erstmal drum gekümmert, dass das Ding sonst läuft.


    Ich verstehe ja nicht, warum das Ding mit Gmail läuft, mit den Daten vom Hoster aber nicht. Der Hoster meinte, es sei alles richtig angegeben. Allerdings lande ich da in einem Timeout mit Server Error 503, jedenfalls mit TLS und Port 465 (so die Daten vom Hoster). Mit SMTPS und 465 passiert zumindest was, aber da schlägt dann die Authentifizierung fehl. Warum auch immer... Und mit Outlook wird mir die Seite nach dem Senden so angezeigt als hätte ich eine falsche Mailadresse angegeben. Das müsste doch auch mit anderen Adressen als nur mit Gmail laufen...

    Noch ein Problem tut sich auf. Wenn ich auf die Mails, die vom Formular gesendet wurden, antworte, dann kommt diese Antwort im Spamordner an. Wie kann man das verhindern?

    Ich hatte da ja auch noch einen Thread darüber, bei dem ich einiges gesammelt hatte: Suche modernes Kontaktformular mit Spamschutz

    Da ist im Ausgangspost auch unter anderem dieses Kontaktformular.com dabei, das man allerdings nur für private Zwecke verwenden darf - hat mir also nix genutzt.

    Ich hab dann mit der mail-Funktion ein Script erstellt nach diversen Tutorials, das auch super funktioniert hat bis ich zu einem anderen Hoster gewechselt habe. Und ab da ging nix mehr. Leider ist es heutzutage tatsächlich so, dass die meisten Hoster Mails über SMTP verschickt haben wollen.

    Nun hab ich mich mit dem PHPMailer zusammengerauft...kann man so sagen. Zumindest das Formular wie es vorher war geht jetzt auch mit dem PHPMailer.

    Wenn du dir was vom CSS abkupfern willst, kannst du gern vorbeischauen. (zB Input anklicken mit rechter Maustaste - Element untersuchen - dann kannst du im Inspektor sehen, welche Styles angewendet wurden). Mit den Pseudoklassen :valid und :focus bzw. Pseudoelement ::placeholder lässt sich da einiges Hübsches draus machen.

    Das Formular findest du im PHP-Bereich: Hilfe bei phpMailer.

    Fertig.


    Naja, gestern war ich noch mehr als verzweifelt. Dieses Standard-Example verstehe ich heute auch noch nicht. Aus dem hätt ich nichts Vernünftiges rausgekriegt. Mit dem Contactform-Example ging's dann offensichtlich doch.


    Mal ne Frage noch. Es steht ja in den Kommentaren drinnen, dass man aus Sicherheitsgründen nicht die Daten des Users als setFrom eintragen soll. Wäre das denn wirklich so tragisch? Ist doch irgendwie doof, wenn man sich quasi selbst Mails schickt. Immerhin gibt's das addReplyTo...

    Juhu, ich hab's geschafft!

    Danke, dazu muss man erstmal das Stichwort SMTP-Debugging kennen. Wenn man nicht weiß, wonach man suchen muss, wird's schwierig...

    Hier nochmal der Code.



    Das mit dem readfile änder ich später in allen Dateien.

    Zitat

    <br /><b>Notice</b>: Undefined index: name in <b>/var/www/vhosts/nf-fotogruppe-innsbruck.at/httpdocs/kontakt_phpmailer2.php</b> on line <b>200</b><br />

    Das ist die Fehlermeldung. Dasselbe mit allen Variablen der Inputs.


    Das hier habe ich dann dazu gefunden und dann den oben zitierten Code draus gebastelt.



    Gleich noch eine Frage. Wie schaff ich es, dass die Mails in UTF-8 versendet werden? Ich sehe in den Notizen (oder wie man das nennt), dass das ISO-8859-1 ist und Umlaute gehen dort nicht.


    Meine Funktionen habe ich sogar richtig eingebaut, zumindest funktioniert alles. Bis eben auf UTF-8. Das Client-Server-Protokol nach dem Senden ist allerdings noch sichtbar. Wie krieg ich das weg? Hab schon das Error-Reporting abgestellt, es ist aber trotzdem da.

    Code
    1. if (isset($_POST['email']))
    2. {
    3. // Hier der Teil mit der Mail-Aktion
    4. }

    if (array_key_exists('email', $_POST)) { steht ja in meinem Formular schon drinnen. Kommt dein Code dann nochmal davor hin oder wo sollte der dann genau rein? Mit submit statt email geht's ja auch oder sollte man beides abfragen? In meinem alten Script hatte ich das mit submit ja drin, die Undefined Variables hatte ich trotzdem.



    Ich wollte jetzt alle abfragen, das hilft aber der undefined variable auch nicht weiter.

    Code
    1. if(isset($_POST['submit']) || isset($_POST['message']) || isset($_POST['subject']) || isset($_POST['email']) || isset($_POST['name'])) {



    Dann hab ich jetzt noch wie hier beschrieben folgendes probiert, aber das undefined kommt trotzdem. Dort steht allerdings auch, dass es eig nicht nötig ist, das wegzubekommen.


    Es ist ja nicht weiter störend, es funktioniert ja.


    Jetzt muss ich noch schauen, dass ich die anderen Sachen gereglet krieg, die ich eben im alten Script hatte.

    Oh wow, wenn ich meine Gmail-Daten eingebe, kommt das Mail sogar an! Da muss dann zusätzlich noch was mit den Daten vom Hoster nicht stimmen...dann werd ich dort nochmal nachfragen.


    So, nun wär's noch schön, wenn wir es schafften, die Funktionen meines alten Scripts einzubauen.

    Ein Lichtblick ist schon mal da!

    Danke fürs Denkenhelfen!


    Wegen dem Error-Reporting. Ich dachte, du meinst einfach im Admin CP die Errors einzuschalten - das ist dort nämlich standardmäßig auf off und das hab ich natürlich auf on geschaltet. Aber ich hab jetzt noch deinen Code eingefügt.


    Ich bin davon ausgegangen, dass - wenn ich ein Example von GitHub übernehme - das Grundlegende dort einfach stimmt. Folglich hätte - meiner Logik nach - das mit der Überprüfung auch passen müssen, also dass das nicht vor dem Senden überprüft wird.


    Ich hab mir jetzt mal das andere Example geschnappt, mit dem komm ich auch besser klar. Das basiert zumindest auf Usereingaben in einem Kontaktformular. Da krieg ich diesen Fehler beim Aufruf jedenfalls nicht (//Don't run this unless we're handling a form submission). Allerdings lande ich in einer Endlosschleife mit Error 503, sobald ich das Formular absende. Die Meldungen mit undefined Variable (nach deinem Einfügen deines Codes) krieg ich hier auch, die kenne ich von meinem localhost. Die hatte ich auch beim alten Script mit der mail-Funktion, aber eben nur auf dem localhost und nicht am Server, daher habe ich das ignoriert.


    Verstehe, eig logisch. Beim Aufruf will er das Echo laden, aber das ist natürlich nicht da. Er hat sich aber beschwert, dass die Mailadresse falsch ist und nicht dass name nicht existiert.


    Hier jetzt mal das Kontaktformular-Beispiel von Github mit meinen Mailadressen und SMTP-Server. Den Code aus dem alten Formular hab ich jetzt mal noch nicht eingetragen.

    Ich hab mich noch gewundert, warum hier Backslash steht. Bei use wird ja auch Backslash verwendet.

    Kann mir einer den Pfad von use erklären? Ich hab da jedenfalls nichts liegen...


    Jetzt hab ich das so stehen:

    Code
    1. use PHPMailer\PHPMailer\PHPMailer;
    2. use PHPMailer\PHPMailer\Exception;
    3. require 'phpmailer/src/Exception.php';
    4. require 'phpmailer/src/PHPMailer.php';
    5. require 'phpmailer/src/SMTP.php';


    Denselben Fehler gibt's zwar nicht mehr, aber nun findet er die SMTP-Klasse nicht. Warum? Die ist ja auch korrekt verlinkt. Das File findet er, die Klasse aber nicht... Ich versteh ja nicht, warum das nicht unter use gleich drinsteht - ich hab das ja direkt aus dem GitHub-Example.

    Ich war mal eben so schlau und hab das noch hinzugefügt zu use. Nun wird die Seite wenigstens geladen, aber direkt mit einem Fehler. Ich hätte eine ungültige Mailadresse eingegeben. Ich habe noch gar nichts eingegeben, nur die Seite geladen. Da sollte eigentlich noch nichts überprüft werden, hab ja nicht auf Submit geklickt.


    https://nf-fotogruppe-innsbruck.at/kontakt_phpmailer.php


    Jetzt geht es halt wirklich darum, das Script korrekt umzucoden. Ich weiß wirklich nicht wie, denn mehr als grundlegende einfache PHP-Kenntnisse hab ich nicht. Wie gesagt, deswegen habe ich das damals auch mit der mail-Funktion gemacht, das hab ich wenigstens verstanden.


    Ich hab mal das Formular ausgefüllt und abgeschickt, da kam dann


    Hier noch ein anderes Beispiel von GitHub: https://github.com/PHPMailer/P…examples/contactform.phps

    Vielleicht hilft es ja demjenigen, der mir damit helfen kann. Wie ich das sehe, wäre es wohl besser, gleich auf dem hier aufzubauen.

    Danke, du machst mir ja Mut! Funktionieren tut hier trotzdem gar nix. Geht mit dem Aufruf der required files schon los...

    Zitat

    Warning: require(phpmailer\src\Exception.php): failed to open stream: No such file or directory in /var/www/vhosts/nf-fotogruppe-innsbruck.at/httpdocs/kontakt_phpmailer.php on line 7



    Warning: require(phpmailer\src\Exception.php): failed to open stream: No such file or directory in /var/www/vhosts/nf-fotogruppe-innsbruck.at/httpdocs/kontakt_phpmailer.php on line 7



    Fatal error: require(): Failed opening required 'phpmailer\src\Exception.php' (include_path='.:/opt/plesk/php/7.2/share/pear') in /var/www/vhosts/nf-fotogruppe-innsbruck.at/httpdocs/kontakt_phpmailer.php on line 7


    Mein localhost meldet übrigens was anderes:

    Zitat


    Fatal error: Uncaught Error: Class 'SMTP' not found in D:\Dokumente\Webdesign\XAMPP\htdocs\Fotoclub Naturfreunde Innsbruck\kontakt_phpmailer.php:20
    Stack trace:
    #0 {main} thrown in D:\Dokumente\Webdesign\XAMPP\htdocs\Fotoclub Naturfreunde Innsbruck\kontakt_phpmailer.php on line 20


    Zur Info. Ich hab die kontakt_phpmailer.php im Hauptverzeichnis, darin den Order phpmailer (klein geschrieben) und dessen Inhalte so wie sie aus der ZIP-Datei kommen. Wieso also bitte schön sollen die Dateien nicht gefunden werden? Und warum findet der localhost sie schon...?



    *******


    Zu meinen allgemeinen Includes. Danke erst mal für den Tipp, aber kannst du mir auch erklären warum? Meinen Recherchen zufolge ist zwischen include und require die bessere Wahl dann require. Das readfile ist mir da gar nicht untergekommen. Was macht da den Unterschied bzw warum ist das für HTML-Dateien besser? Das sollte ich ja dann auch mit der Navigation und dem Footer machen, das sind auch HTML-Dateien.

    Naja, ich hab das Script noch nicht wirklich fertig umgebaut, weil ich nichts davon verstehe. Das krieg ich allein nicht hin. Ist wie "schreib mal nen Aufsatz auf Chinesisch". :-(

    NEU mit phpMailer

    So, hier mal die Codes.


    ALT mit mail-Funktion