29. august 2023 - 09:20Der er
21 kommentarer og 1 løsning
opdatering af gamle PHPformularer
Nu er det jo sådan, at mine formularer med PHPMailer har fungeret i 13-14 år eller mere med php5,6 på webhotellet. Det var jo ret let at opdatere et par filer og et par linjer i koden og så køre videre. Foreløbig kan jeg opdatere til cLASS.PHPMailer version 5.2.9 fra 2014, så når webhotellet ikke længere understøtter PHP 5,6 er jeg stadig konvertibel med PHP 7.x. Den gamle opskrift på en fungerende PHPMailer er denne:
require_once('class.phpmailer.php'); include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded $mail = new PHPMailer();
Som der blev skrevet i en tidligere tråd, kan det være en god ide at starte ud med at lave noget meget simpelt, og så se om man kan få hul igennem.
F.eks. kunne du starte med at lægge Phpmailer-filerne (Exception.php, PHPMailer.php, SMTP.php) i en mappe. I samme mappe oprette en ny php-fil, som du putter følgende ind i:
<?php
use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; use PHPMailer\PHPMailer\SMTP;
Har prøvet noget lignende før og har nu prøvet denne kode. Jeg kan ikke få den til at virke, Har prøvet at ændre porten 587 til 25 som den er i den gamle kode, men det virker heller ikke. filen skal vel også kaldes for at gå i aktion?
Ja, du skal naturligvis gå ind på php-filen fra din browser, for at aktivere den. Når du gør det, burde du få en fejlmelding, hvis ikke det virker. Den kan du prøve at lægge herind.
DEt har jeg lige prøvet, men synes ikke helt, det virker. Det får dog heller ikke betydning for mig, da subjekt er et af felterne i formularen. jeg fortsætter mine eksperimenter i morgen. Langt om længe er der hul igennem :-)
Har nu prøvet adskillige gange at putte indhold fra mine formularer ind sammen med den nye maildel. Prøvefilen virker, men lige så snart der kommer flere ting på får jeg "virker ikke". Der må være en fejl et sted.
Det må der være. Hvis vi skal kunne hjælpe herindefra skal du nok skrive lidt mere: Ligger den nye fil samme sted, som den gamle? Hvad har du ændret? Hvilken fejlmelding får du?
Det er lige så snart jeg tilføjer definitioner fra formularerne til den mail, der virker og kalder den "response.php" fx $navn = ($_POST['navn']); $adresse = ($_POST['adresse']); $postnummer = ($_POST['postnummer']); $by = ($_POST['by']); altså en simpel tilmeldingsformular. fejlmeldingerne er alle error 500.
Hvilken php-version kører du med? Hvis du har opgraderet til php8 skal du nemlig være opmærksom på, at hvis man prøver at trække en $_POST-variabel ud, der ikke er sat, får man fejlmeldinger
Den hurtige løsning er i så fald noget lignende: $navn = ($_POST['navn']); udvides til: $navn = ($_POST['navn'] ?? null);
På min server på webhotellet er der stadigvæk PHP 5.6, men min nye PHPMailer er vist noget med 6.8.x. Så måske er det en god ide at udvide felternes variabel til $navn = ($_POST['navn'] ?? null);
Du kan jo prøve det, men er nok lidt skeptisk så. Hvis du kun har tilføjet de variable, som du viser ovenfor, og php-filen ligger det samme sted (blot med et nyt navn), burde det ikke slå phpmailer ud af kurs.
$mail->send(); echo 'Mailen er blevet sendt med alle oplysninger'; } catch (Exception $e) { echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; }
?> PS koden der designer den sendte mail virker, når der ikke er variabler
Jeg antager at du aktivt har anonymiseret dine logonoplysninger (username, password, osv), hvilket selvfølgelig er meget smart. Men hvis det faktisk er disse oplysninger, der står derinde, så kan det nok bøvle.
Derudover kan jeg kun få øje på "$_POST['bem']" som et potentielt problem, men det burde kun være, hvis du kører nyeste php, hvilket du jo ikke gør -- og uanset ville det højst være en warning, den gav af sig...
Mit råd vil nok være, at prøve at fjerne alle variable igen, og så indsætte én af gangen, for at se hvilken der giver bøvl.
Det er i øvrigt ikke så underligt, hvis du subjekt stadig bøvler, da du jo stadig sætter subjekt til "Prøveemail" EFTER den linje, jeg foreslog. Og at du ikke har givet variablen $subject noget indhold.
Du kan jo sådan set måske også bare fjerne den linje, som jeg foreslog: $mail->Subject = "=?UTF-8?B?".base64_encode((string) $subject)."?="; ...og så indsætte følgende i stedet: $mail -> CharSet = "UTF-8"; (men det er ikke dette, der laver den store fejl...)
Nu er jeg kommet så langt med variablerne for navn, adresse osv virker perfekt også $subject virker, hvor subject er med i kaldet fra formularen. (den oprindelige subject i prøvemailen er fjernet) Derfor er jeg fortsat med svarene fra formularen ".$v1." ".$v2." osv. De er sat ind i mailens tekst. Det virker så heller ikke lige nu, måske fordi jeg har sat denne fuktion øverst i responsen:
function createNewUser() { if(isset($_POST['send'])) {
begge med slut-tuborg til sidst i responsen
Sådan var det nemlig i den gamle version, Det er måske her fejlen ligger, men hvad gør jeg så?
Så fik jeg fjernet de to linjer og flyttede definitionerne fra formular-felterne ned under $mail = new PHPMailer(true); hvor de andre variabler også står NU VIRKER DET HELE! en lille detalje er den lange responsskærm. I en anden tråd foreslår du at fjerne linjen $mail->SMTPDebug = SMTP::DEBUG_SERVER; eller bruge en anden version med forkellige indstllinger. Det er en detalje, så skriv et svar, som jeg kan markere som løsning:-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.