【问题标题】:Zend framework 2 - cannot set the 'from' field when sending a emailZend 框架 2 - 发送电子邮件时无法设置“发件人”字段
【发布时间】:2013-10-31 19:46:53
【问题描述】:

我尝试使用 ZF2 发送电子邮件

    $message = new \Zend\Mail\Message();
    $message->setBody('This is the body');
    $message->setFrom('myemail@mydomain.com');
    $message->addTo('someone@somedomain.com');
    $message->setSubject('Test subject');

    $smtpOptions = new \Zend\Mail\Transport\SmtpOptions();

    $smtpOptions->setHost('smtp.gmail.com')
        ->setConnectionClass('login')
        ->setName('smtp.gmail.com')
        ->setConnectionConfig(array(
            'username' => 'admin@mydomain.com',
            'password' => 'mypassword',
            'ssl' => 'tls',
            'port' => '123',
        ));

    $transport = new \Zend\Mail\Transport\Smtp($smtpOptions);
    $transport->send($message);

我希望发件人是“myemail@mydomain.com”,但始终是“admin@mydomain.com.com”

我该如何解决这个问题?我做错了什么?

编辑:

我也尝试使用 setSender() 得到相同的结果

【问题讨论】:

  • 在您的所有项目中搜索admin@mydomain.com.com - 很可能,您不会找到它。如果是这样,那么您的服务器配置设置为在发送之前简单地覆盖特定的邮件标头。
  • 只有一处,谢谢

标签: php gmail zend-framework2


【解决方案1】:

查看 \Zend\Mail\Transport\Smtp\Zend\Mail\Message 类的源代码,在我看来你做得对; send 函数(Smtp 类)首先连接到 smtp 服务器,然后准备消息。其中一项任务是获取 from 地址,这是给您带来问题的地址。这是代码:

protected function prepareFromAddress(Message $message)
{
    $sender = $message->getSender();
    if ($sender instanceof Address\AddressInterface) {
        return $sender->getEmail();
    }

    $from = $message->getFrom();
    if (!count($from)) { // Per RFC 2822 3.6
        throw new Exception\RuntimeException(sprintf(
            '%s transport expects either a Sender or at least one From address in the Message; none provided',
            __CLASS__
        ));
    }

    $from->rewind();
    $sender = $from->current();
    return $sender->getEmail();
}

我自己没有测试过,你能检查一下它是否从 $message->getFrom(); 中获取了 from 吗?或者它可能从 $sender->getEmail(); 获得它?

您可以尝试的一件事是在定义邮件时使用 setSender() 而不是 setFrom() 来设置“myemail@mydomain.com”地址.我不太了解它们之间的区别,但是查看 prepareFromAddress 函数,您似乎可以使用它来放置 from 地址。

【讨论】:

  • 我已经尝试过使用 setSender(),但没有成功。如果设置了发件人,则采用发件人,否则采用发件人。我检查了标头,数据已正确发送到 gmail 服务器
猜你喜欢
  • 2017-07-13
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2015-06-08
  • 2012-07-18
  • 2014-03-03
  • 2012-01-20
  • 1970-01-01
相关资源
最近更新 更多