问题描述
我有一个有效的sendmail.PHP文件,但是当用户从网页提交表单时,它将它单行发送给站点所有者。此外,标题显示不正确。
我只想使其成为一种非常简单的格式。
在诸如Outlook之类的邮件客户端中接收到消息时,它将显示发送电子邮件的人的姓名($ userName),然后在第二行显示主题($ userSubject),在第三行显示显示一些邮件正文。
用户单击电子邮件后,它将以段落形式(并非全部一行)显示$ message 用空格分隔并显示名称,然后输入电话号码,并在下一行发送发件人的电子邮件。
有关身体外观的示例:
消息:这是电子邮件的正文。可能是一行还是多行,具体取决于用户在表单中写电子邮件的方式。
例如,假设这是两行,他们就这样提交了。
名称:John Doe
电话:555-555-5555
这是我需要纠正的sendmail.PHP代码。任何帮助将不胜感激!
<?PHP
// Define some constants
define( "RECIPIENT_NAME","Testing Website" );
define( "RECIPIENT_EMAIL","captainObvIoU[email protected]" );
// Read the form values
$success = false;
$userName = isset( $_POST['username'] ) ? preg_replace( "/[^\s\S\.\-\_\@a-zA-Z0-9]/","",$_POST['username'] ) : "";
$senderEmail = isset( $_POST['email'] ) ? preg_replace( "/[^\.\-\_\@a-zA-Z0-9]/",$_POST['email'] ) : "";
$senderPhone = isset( $_POST['phone'] ) ? preg_replace( "/[^\.\-\_\@a-zA-Z0-9]/",$_POST['phone'] ) : "";
$userSubject = isset( $_POST['subject'] ) ? preg_replace( "/[^\s\S\.\-\_\@a-zA-Z0-9]/",$_POST['subject'] ) : "";
$message = isset( $_POST['message'] ) ? preg_replace( "/(From:|To:|BCC:|CC:|Subject:|Content-Type:)/",$_POST['message'] ) : "";
// If all values exist,send the email
if ( $userName && $senderEmail && $senderPhone && $userSubject && $message) {
$recipient = RECIPIENT_NAME . " <" . RECIPIENT_EMAIL . ">";
$headers = "$userName" . $userSubject . "";
$msgBody =
"" . $message .
" Name:". $userName .
" Email: ". $senderEmail .
" Phone: ". $senderPhone . "";
$success = mail( $recipient,$headers,$msgBody );
//Set Location After Successsfull Submission
header('Location: contact.html?message=Successful');
}
else{
//Set Location After Unsuccesssfull Submission
header('Location: contact.html?message=Failed');
}
?>
解决方法
在纯文本中,段落由两个换行符分隔。因此,您应该在邮件中用两个换行符替换单个换行符。
然后,您还需要在要放在邮件正文末尾的所有格式化行之间放置换行符。
$message = str_replace("\n","\n\n",$message);
$msgBody = $message . "\n\n" .
" Name:". $userName . "\n" .
" Email: ". $senderEmail . "\n" .
" Phone: ". $senderPhone . "";