代码之家  ›  专栏  ›  技术社区  ›  tuomassalo

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

  •  1
  • tuomassalo  · 技术社区  · 14 年前

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

    我已经使用了一个很好的方法来验证电子邮件地址(我们现在不讨论这个问题……),但是在需要的时候,我如何正确地用qp编码$name呢?例如,如果收件人被称为“foo b··r”,我应该生成(例如)如下内容:

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

    更新: 早些时候,由于其他原因,我没有使用诸如phpmailer之类的现成邮件器(我们已经有了外部队列系统)。不管怎样,现在我要用 SwiftMailer . 谢谢你的回答!

    4 回复  |  直到 14 年前
        1
  •  1
  •   nikc.org    14 年前

    我已经用过 iconv_mime_encode 对主题标题进行编码。我想同样的方法也可以用于对to-header中的名称进行编码。

    不过,和其他人一样,我建议使用现有的库或包来为您处理编码。

    我已经用过 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>"
    );
    
        2
  •  1
  •   Gumbo    14 年前

    你可以使用 imap_rfc822_write_address 如果有的话。

        3
  •  1
  •   Rodolphe    14 年前

    您应该尝试使用第三方库,如phpmailer或zend戡u mail。 它们提供了设置所有这些参数的简单方法。 它们还负责编码,并对发送/验证启用一些强大的控制

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

        4
  •  0
  •   kingjeffrey    14 年前

    我是这样做的(有点过分):

    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);