我设置了一个HTML联系人表单,该表单将数据转发到php脚本,然后该脚本将电子邮件发送到指定的帐户。
以某种方式VALIDATE_MAIL过滤器不起作用,我看不到错误在哪里...你们中的某人可以帮助我吗?
此处显示HTML代码:
<form method="post" action="send_email.php">
<h3>Kontaktieren Sie uns</h3>
<input type=text id=name name=name placeholder=Name>
<input type=text id=organisation name=organisation placeholder=Organisation>
<input type=text id=Email name=Email placeholder=Email>
<input type=text id=betreff name=betreff placeholder=Betreff>
<textarea type=text id=subject name=subject placeholder=Nachricht style=height:200px></textarea>
<div class=g-recaptcha data-sitekey=6Lf1GGsUAAAAAJJTsKuFXZkO6UPhfCspnOmInRlS style="transform:scale(0.85);-webkit-transform:scale(0.85);transform-origin:0 0;-webkit-transform-origin:0 0"></div>
<input type=submit value="Nachricht senden">
<div id=info onclick=change()>Kontaktinformation</div>
</form>
这是PHP代码:
<?php
//send_email.php
$email_from = "Absender"; //Absender falls keiner angegeben wurde
$sendermail_antwort = true; //E-Mail Adresse des Besuchers als Absender. false= Nein ; true = Ja
$name_von_emailfeld = "Email"; //Feld in der die Absenderadresse steht
$empfaenger = "info@drupe.ch"; //Empfänger-Adresse
$mail_cc = ""; //CC-Adresse, diese E-Mail-Adresse bekommt einer weitere Kopie
$betreff = "Neue Kontaktanfrage"; //Betreff der Email
$url_ok = "http://www.drupe.ch/contactsuccess.html"; //Zielseite, wenn E-Mail erfolgreich versendet wurde
$url_fehler = "http://www.drupe.ch/error.html"; //Zielseite, wenn E-Mail nicht gesendet werden konnte
//Diese Felder werden nicht in der Mail stehen
$ignore_fields = array('submit');
//Datum, wann die Mail erstellt wurde
$name_tag = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
$num_tag = date("w");
$tag = $name_tag[$num_tag];
$jahr = date("Y");
$n = date("d");
$monat = date("m");
$time = date("H:i");
//Erste Zeile unserer Email
$msg = ":: Gesendet am $tag, den $n.$monat.$jahr - $time Uhr ::\n\n";
//Hier werden alle Eingabefelder abgefragt
foreach($_POST as $name => $value) {
if (in_array($name, $ignore_fields)) {
continue; //Ignore Felder wird nicht in die Mail eingefügt
}
$msg .= "::: $name :::\n$value\n\n";
}
$a = "@";
//E-Mail Adresse des Besuchers als Absender
if ($sendermail_antwort and isset($_POST[$name_von_emailfeld]) and filter_var($_POST[$name_von_emailfeld], FILTER_VALIDATE_EMAIL)) {
$email_from = $_POST[$name_von_emailfeld];
}
$header="From: $email_from";
if (!empty($mail_cc)) {
$header .= "\n";
$header .= "Cc: $mail_cc";
}
//Email als UTF-8 senden
$header .= "\nContent-type: text/plain; charset=utf-8";
$mail_senden = mail($empfaenger,$betreff,$msg,$header);
//Weiterleitung, hier konnte jetzt per echo auch Ausgaben stehen
if($mail_senden){
header("Location: ".$url_ok); //Mail wurde gesendet
exit();
} else{
header("Location: ".$url_fehler); //Fehler beim Senden
exit();
}
电子邮件确实已发送。因此,一切都可以解决,但只有过滤器不起作用。我究竟做错了什么?如果你们中的任何一个可以为我指出正确的方向,那将真的很有帮助。
非常感谢:)
答案 0 :(得分:0)
根据php.net manual,filter_var
返回成功时的过滤值,如果出错则返回false
。
所以也许filter_var
部分应该是……。喜欢:
filter_var($_POST[$name_von_emailfeld], FILTER_VALIDATE_EMAIL) !== false
在if子句中有效。
当然,您也应该处理其他情况,以免在电子邮件地址无效的情况下不发送电子邮件。