更改php邮件FROM标头以显示名称和电子邮件(使用strip_tags)

时间:2014-08-14 06:07:56

标签: php email

我一直在尝试在邮件标题上获取此格式:“有些用户< my@mail.com>”,但我不能。

我有两个可以从表单中检索的变量。这些是$_POST['form_email'])$_POST['form_name'])

在php中我有:

$headers = "From: ". strip_tags($_POST['form_email']) . "\r\n";

但我不知道如何将$_POST['form_name'])添加到FROM

我想也许可能

$headers = "From: ". strip_tags($_POST['form_email']) . "\r\n";
$headers .= "From: ". strip_tags($_POST['form_name']) . "\r\n";

......但是不行。

谢谢你们。

2 个答案:

答案 0 :(得分:0)

我认为这应该有用

 $headers = "From: ". strip_tags($_POST['form_name']) . " <". strip_tags($_POST['form_email']) . ">\r\n". 

答案 1 :(得分:0)

不知道你想要完成什么,但strip_tags()是一个HTML操作函数,电子邮件标题必须是纯文本。 <my@mail.com>处的尖括号与HTML没有任何关系。

你基本上必须替换它:

$headers = "From: ". strip_tags($_POST['form_email']) . "\r\n";

......在这一行上有一些东西:

$form_name = filter_input(INPUT_POST, 'form_name');
$form_email = filter_input(INPUT_POST, 'form_email', FILTER_VALIDATE_EMAIL);

if( !preg_match('/[\r\n]/u', $form_name) && $form_email ){
    $headers = sprintf('From: "%s" <%s>\r\n', $form_name, $form_email);
}else{
    // Don't send anything: either email injection attack or missing data
}

完成?还没。您仍然需要encode $form_name properly,因为它可以包含引号或非ASCII字符。事实上,电子邮件很难,你不应该自己尝试。像Swift MailerPHPMailer这样的第三方软件包将是更好的选择。