如何使用PHP格式化电子邮件地址行(带名称)?

时间:2010-04-22 07:53:32

标签: php email

我正在尝试生成电子邮件。收件人的电子邮件地址和名称由用户指定。使用PHP执行此操作的正确方法是什么:

$to_header = "To: $name <$email>" # incorrect!

我已经使用了一个不错的方法来验证电子邮件地址(现在不要再去了......),但是我如何用例如正确编码$ name。 QP何时需要?例如,如果收件人被称为“FooBär”,我应该生成(例如)以下内容:

To: =?utf-8?Q?Foo_B=C3=A4r?= <foo.bar@example.com>

更新:之前由于其他原因(我们已经有一个外部队列系统),我没有使用像PHPMailer这样的现成邮件程序。无论如何,现在我最终使用SwiftMailer。谢谢你的所有答案!

4 个答案:

答案 0 :(得分:1)

如果可用,您可以使用imap_rfc822_write_address

答案 1 :(得分:1)

您应该尝试使用第三方库,例如PhpMailer或Zend_Mail。 它们提供了设置所有这些参数的简单方法。 他们也负责编码,并对发送/验证进行强大的控制

否则,尝试使用不同的imap方法去硬路: http://fr2.php.net/manual/fr/book.imap.php

答案 2 :(得分:1)

我使用iconv_mime_encode对Subject -header进行编码。我认为同样可以用于在To -header中对名称进行编码。

但是,我确实像其他人一样,建议使用现有的库或包来处理编码。

我使用了PEAR提供的Mail mime。不是最好的,但作为其他建议的替代品。

var_dump(
    iconv_set_encoding('output_encoding', 'UTF-8'),
    iconv_set_encoding('internal_encoding', 'UTF-8'),
    iconv_set_encoding('input_encoding', 'UTF-8'),
    iconv_mime_encode('To', 'Bäråör Zückefém') .  " <foo@bar.com>"
);

答案 3 :(得分:0)

我是这样做的(有点矫枉过正):

function check_referrer($referrers) {
    if (count($referrers)) {
        $found = false;
        $temp = explode("/",getenv("HTTP_referrer"));
        $referrer = $temp[2];
            if ($referrer == "") {
            $referrer = $_SERVER['HTTP_referrer'];
            list($remove, $stuff) = split('//', $referrer, 2);
            list($home, $stuff) = split('/', $stuff, 2);
            $referrer = $home;
        }
            for ($x = 0; $x < count($referrers); $x++) {
            if (eregi ($referrers[$x], $referrer)) {
                $found = true;
            }
        }
        if ($referrer == "") {
            $found = false;
        }
        if (!$found){
            error_log("[Store Checkout] Illegal Referrer. (".getenv("HTTP_referrer").")", 0);
            return "<div id='error'><p>You are coming from an <strong>unauthorized domain.</strong></p>\r\n"."\t<ul>\r\n".$error_list."\t</ul>\r\n"."</div>\r\n";
        }
        return $found;
    } else {
    return "<div id='error'><p>You are coming from an <strong>unauthorized domain.</strong></p>\r\n"."\t<ul>\r\n".$error_list."\t</ul>\r\n"."</div>\r\n";
    }
} /* end function check_referrer */

function mail_it($content, $subject, $sender, $recipient) {
    $referrers = array("example.com");

    $authorizedDomain = check_referrer($referrers);
    if($authorizedDomain === FALSE) {
        return $authorizedDomain;
    }
    $sender = remove_headers($sender);
    $recipient = remove_headers($recipient);

    if($content !== FALSE && $subject !== FALSE && $sender !== FALSE && $recipient !== FALSE) {
        $headers = "from: ".$sender."\r\n"; 
        mail($recipient, $subject, $content, $headers);
    }
    return;
} /* end function mail_it */

$content = "email body content";
$subject = "email subject";
$sender = "Your Name <yname@example.com>";
$recipient = $name . "<" . $email . ">";


mail_it($content, $subject, $sender, $recipient);