条件语句中带行距的PHP变量
*注意 我发现问题是试图在用于“From”标题值(duh)的电子邮件变量中输入空格/换行符。这当然不行。因此,我将这些值附加到消息体。请参阅下面的正确代码条件语句中带行距的PHP变量,php,variables,conditional-statements,Php,Variables,Conditional Statements,*注意 我发现问题是试图在用于“From”标题值(duh)的电子邮件变量中输入空格/换行符。这当然不行。因此,我将这些值附加到消息体。请参阅下面的正确代码 <?php $send_to = "[MY@EMAIL.COM]"; $send_subject = "contact form from website"; $f_name = cleanupentries($_POST["namn"]); $f_message = cleanupentries($_POST["meddeland
<?php
$send_to = "[MY@EMAIL.COM]";
$send_subject = "contact form from website";
$f_name = cleanupentries($_POST["namn"]);
$f_message = cleanupentries($_POST["meddelande"]);
$from_ip = $_SERVER['REMOTE_ADDR'];
$from_browser = $_SERVER['HTTP_USER_AGENT'];
function cleanupentries($entry) {
$entry = trim($entry);
$entry = stripslashes($entry);
$entry = htmlspecialchars($entry);
return $entry;
}
$message = $f_message . "\n\n" . $f_name . "can be reached on:\n";
if(($_POST["epost"]) == "epost" || ($_POST["epost"]) == ""){
$f_email = $send_to;
$f_email_check = "";
}else{
$f_email_check = cleanupentries($_POST["epost"]);
$f_email = $f_email_check;
$message .= $f_email_check;
$message .= "\n";
}
if(($_POST["telefon"]) == "telefon" || ($_POST["telefon"]) == ""){
$f_phone_check = "";
}else{
$f_phone_check = cleanupentries($_POST["telefon"]);
$message .= $f_phone_check;
$message .= "\n";
}
$message .= "\nTechnical info:\n" . $from_ip . "," . $from_browser;
$headers = "From: " . $f_email . "\r\n" .
"Reply-To: " . $f_email . "\r\n" .
"X-Mailer: PHP/" . phpversion();
if (!$f_email) {
echo '<p>No email.</p><br /><p>< <a style="text-decoration: none; color: blue;" href="/" target="_self">Pleas try again</a></p>';
exit;
}else if (!$f_name){
echo '<p>No name.</p><br /><p>< <a style="text-decoration: none; color: blue;" href="/" target="_self">Pleas try again</a></p>';
exit;
}else{
if (filter_var($f_email, FILTER_VALIDATE_EMAIL)) {
mail($send_to, $send_subject, $message, $headers);
echo "true";
}else{
echo '<p>Invalid email.</p><br /><p>< <a style="text-decoration: none; color: blue;" href="/" target="_self">Pleas try again</a></p>';
exit;
}
}
?>
您似乎正在发送一封HTML格式的电子邮件。HTML忽略空白
使用
获取换行符。您也可以将nl2br()
放在cleanupentries
函数中,但这可能不是您想要的。阅读带有filter\u VALIDATE\u电子邮件的filter\u var(注释)手册不是最好的选择()
而不是:
if (filter_var($f_email, FILTER_VALIDATE_EMAIL)) {
mail($send_to, $send_subject, $message, $headers);
echo "true";
}else{
echo '<p>Invalid email.</p><br /><p>< <a style="text-decoration: none; color: blue;" href="/" target="_self">Please try again</a></p>';
exit;
}
或
不被送怎么办
mail()
返回布尔值false?您的邮件服务器拒绝邮件?邮件在接收端变成垃圾邮件?请为那些无意中发现此问题的人投票编辑代码!(也是一个非常好且明确的问题):-)我应该提到,在我最初的帖子中,我已经尝试了这两种方法:P我什么都做不到:(你能给我举个例子,说明我应该如何将附加到else语句内容中吗?我已经尝试了nl2br,
,
,\n…我只是无法让它们中的任何一个正常工作。这让我发疯了哈哈:)我肯定这只是一个空格、引号或某处的点的问题,但我看不出这对我来说有什么意义。也许你的电子邮件客户端很糟糕?要么以纯文本发送邮件,然后
\n
就可以了,
就可以用于HTML。如果一些邮件客户端不喜欢纯文本,他们会退回到纯文本版本HTML,确保您也正确设置了邮件的纯文本部分(用\n
替换
,并且条带标签将覆盖大部分)。好的,但是这不应该工作吗?$f\u email\u check=cleanupentries($\u POST[“epost”]。“
”)
因为其他一切都正常工作。我看不出电子邮件客户端是问题所在。很可能我在编写else语句时遗漏了什么。否:)cleanupentries
是否会对您的HTML进行htmlencode(您就是这样编写的!)。不要把你想要的HTML放进去<代码>$f_email_check=cleanupentries($_POST[“epost”])。“
”代码>可以工作。不,f\u email\u check=cleanupentries($\u POST[“epost”])。“
”代码>也不起作用:(以前试过;)我就是这么说的,有些奇怪。。。我还尝试删除了cleanupentries函数,以查看它是否会导致问题,但这也没有帮助。我认为即使您的问题非常好且清楚,也很难说出实际问题!:-)很难说为什么邮件没有被发送。可能是由于某种原因,邮件没有被验证,也可能是邮件服务器出了问题。我不认为这和邮件服务器有任何关系(我听起来不像),这个答案是基于一个有保留的猜测。根据这里被接受的答案,我离真相并不远:-)
if (filter_var($f_email, FILTER_VALIDATE_EMAIL)) {
mail($send_to, $send_subject, $message, $headers);
echo "true";
}else{
echo '<p>Invalid email.</p><br /><p>< <a style="text-decoration: none; color: blue;" href="/" target="_self">Please try again</a></p>';
exit;
}
try {
mail($send_to, $send_subject, $message, $headers);
}
catch (Exception $e) {
throw new Exception($e->__toString();
}
$mail = mail($send_to, $send_subject, $message, $headers);
//check result of $mail.
//...