1

嗨,我将通过 smtp 发送带有 zend 邮件的普通电子邮件。它工作正常。但“发件人”必须,但发件人电子邮件应如下所示:

$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> 

我需要全名。如何?

4

2 回答 2

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>
于 2013-06-12T14:07:17.200 回答
0

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

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

于 2013-06-12T14:06:53.187 回答