lordxearo
Goto Top

PHP Mail Formular Problem - Umstellung PHP 7.0 auf 7.4

Hallo Zusammen,

mir wurde die Aufgabe zuteil, nach einem PHP Kontaktformular zuschauen, welches wohl nicht mehr nach dem Umstellung von PHP 7.0 auf 7.4 funktionieren soll.
Leider kenne ich mich kaum mit PHP aus, und der Fall ist auch eine einmalige Sache, daher hoffe ich das jemand dennoch so nett ist, mir hier unter die Arme zugreifen.

Nach Absenden des Kontaktformulars, soll dieses per E-Mail weitergereicht werden. Der Mailserver meldet jetzt folgenden Fehler.

 Letzter Fehler: 550 5.7.1
   Erklärung: Multiple Subject headers not allowed. See
              https://tools.ietf.org/html/rfc5322#page-21

Der Code müsste folgender sein:

<?php
if ($_POST["name"]!=""){  
$empfaenger = "info@.....de";   
$betreff    = "Kontaktanfrage von " . $_POST["name"];  
$betreff = "=?utf-8?b?".base64_encode($betreff)."?=";  
$mailtext   =  $_POST["message"];  
$absender   = $_POST["email"];  

$headers   = array();
$headers = "MIME-Version: 1.0";  
$headers = "Content-type: text/plain; charset=utf-8";  
$headers = "From: {$absender}";  
$headers = "Reply-To: {$absender}";  
$headers = "Subject: {$betreff}";  
$headers = "X-Mailer: PHP/".phpversion();  

mail($empfaenger, $betreff, $mailtext,implode("\r\n",$headers));  
}

?>

Gruß
Xearo

Content-ID: 663278

Url: https://administrator.de/contentid/663278

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

mhaendler
mhaendler 16.03.2021 um 14:40:42 Uhr
Goto Top
Dann les dir doch bitte einmal genau die Fehlermeldung durch, diese gibt an, dass du mehrere "Subjects" zu Deutsch "Betreffe" innerhalb einer E-Mail senden möchtest.

$headers = "Subject: {$betreff}";  

Setzt einen Header.

Desweiteren übergibst du der "Mail"-Funktion im zweiten Parameter den selben betreff.

mail($empfaenger, '', $mailtext,implode("\r\n",$headers));  

Versuch es bitte einmal so, ich hab leider gerade keine Testumgebung zur Hand.
LordXearo
LordXearo 16.03.2021 um 14:54:48 Uhr
Goto Top
Danke für deine Unterstützung. Die Fehlermeldung verstehe ich. Meiner Meinung nach, gibt es hier aber nur eine Zeile Betreff die übergeben wird.

Hier wird der Betreff gesetzt.
$betreff    = "Kontaktanfrage von " . $_POST["name"];  

und hier vermute ich, wird dieser blos nochmal umgeformt und neu gespeichert.

$betreff = "=?utf-8?b?".base64_encode($betreff)."?=";  

Alles klar, ich teste mal ohne bzw. mit leerem Betreff und melde mich nochmal.
BirdyB
Lösung BirdyB 16.03.2021 um 15:11:29 Uhr
Goto Top
Moin,
lass dir dein headers-Array doch einfach mal mit var_dump oder print_r ausgeben. Ggf. gibt dir das ja schon die Info, wo der zweite Betreff herkommt.

VG
LordXearo
LordXearo 16.03.2021 aktualisiert um 15:22:36 Uhr
Goto Top
Einfach ist gut, sagte ja das ich so gut wie nie was mit php mache. Ich kann mehr SQL, Java und C als php obwohl ich eher der Server / Infrastruktur Admin bin.

Auch mit leerer Zeichenkette, wie von mhaendler vorgeschlagen, kommt diese Fehlermeldung.

Edit: Hier der Inhalt.

Array (  => MIME-Version: 1.0 [1] => Content-type: text/plain; charset=utf-8 [2] => From: info@....de [3] => Reply-To: info@......de [4] => Subject: =?UTF-8?B?S29udGFrdGFuZnJhZ2Ugdm9uIERvaG1lbg==?= [5] => X-Mailer: PHP/7.4.15 ) Ihre Nachricht wurde erfolgreich versandt und wird schnellstmöglich bearbeitet.

Der Betreff wird ja einmal direkt als Parameter in der Mail Funktion übergeben und einmal über die Heady Variable.
LordXearo
LordXearo 16.03.2021 um 15:26:34 Uhr
Goto Top
Ok, jetzt geht es.
Habe das
$headers = "Subject: {$betreff}";  
weg gelassen.
147669
Lösung 147669 16.03.2021 aktualisiert um 16:22:18 Uhr
Goto Top
Ich würde heutzutage dringend zu einer entsprechenden Library wie PHPMailer raten die Mails auch Standardkonform aufbereiten, es gibt nämlich noch weitere Fallen bei der manuellen Erstellung die hier nicht beachtet wurden.
https://hellocoding.de/blog/coding-language/php/phpmailer-email-senden

Gruß SK