Zend框架1 Zend_Mail setFrom名称将缩短或删除

时间:2013-06-12 13:45:38

标签: php zend-framework zend-mail

嗨我将通过smtp发送一封包含zend邮件的正常电子邮件。它工作正常。 但是'from'必须但是fromemail应该是这样的:

$mail->setFrom('firt-studio@example-test.com', 'firt-studio@example-test.com');

我的目标是在电子邮件程序中有这样的东西:

"firt-studio@example-test.com" <firt-studio@example-test.com> 

但我只看到这个:

 <firt-studio@example-test.com> 

或类似的东西

"firtstudio@example-test.com" <firt-studio@example-test.com> 

结果:

"firtstudio@" <firt-studio@example-test.com> 

我需要全名。如何?

2 个答案:

答案 0 :(得分:1)

如果查看Zend_Mail,setFrom使用名为_formatAddress的内部函数来设置显示名称。功能如下:

/**
     * Formats e-mail address
     *
     * @param string $email
     * @param string $name
     * @return string
     */
    protected function _formatAddress($email, $name)
    {
        if ($name === '' || $name === null || $name === $email) {
            return $email;
        } else {
            $encodedName = $this->_encodeHeader($name);
            if ($encodedName === $name  &&  strcspn($name, '()<>[]:;@\\,') != strlen($name)) {
                $format = '"%s" <%s>';
            } else {
                $format = '%s <%s>';
            }
            return sprintf($format, $encodedName, $email);
        }
    }

如您所见,如果电子邮件和名称相同,则该功能仅返回电子邮件。以下是您可以尝试显示的一些内容:

$mailer->setFrom('firt-studio@example-test.com', 'Firt Studio');

会将其显示为Firt Studio

或者您可以编辑Zend_Mailer库中的_formatAddress函数以删除

 || $name === $email

条件,你会得到

firt-studio@example-test.com <firt-studio@example-test.com>

答案 1 :(得分:0)

如果名称与电子邮件地址完全相同,则Zend Mail不会写出该名称(请参阅Zend_Mail :: _ formatAddress)。

name属性(第二个参数)旨在成为电子邮件地址的通用名称。