2013-10-31 112 views
2

时不能“从”字段设置我尝试使用ZF2Zend框架2 - 发送电子邮件

$message = new \Zend\Mail\Message(); 
    $message->setBody('This is the body'); 
    $message->setFrom('[email protected]'); 
    $message->addTo('[email protected]'); 
    $message->setSubject('Test subject'); 

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

    $smtpOptions->setHost('smtp.gmail.com') 
     ->setConnectionClass('login') 
     ->setName('smtp.gmail.com') 
     ->setConnectionConfig(array(
      'username' => '[email protected]', 
      'password' => 'mypassword', 
      'ssl' => 'tls', 
      'port' => '123', 
     )); 

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

我希望发件人是“[email protected]”,但它总是'发送电子邮件[email protected]'

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

编辑:

我也具有相同的结果

+0

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

+0

它只在一个地方,谢谢 – Thermech

回答

0

综观源代码\ Zend的\邮件\传输\的smtp\ Zend的\邮件\试图与setSender()消息在我看来,你做的是正确的类; 发送函数(Smtp类)首先连接到smtp服务器,然后准备消息。其中一项任务是从地址获取,这是导致您遇到问题的一个地址。这是代码:

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()得到;?或者,也许它从$ sender-> getEmail();

有一两件事你可以尝试是使用setSender()代替setFrom()方法在定义消息设置“[email protected]”地址。我不太了解他们之间的区别,但看着prepareFromAddress函数,似乎你可以用它来放置地址地址。

+0

我已经尝试过,使用setSender()失败。如果发件人已设置,则以发件人为准,否则为发件人。我检查标题并将数据正确发送到gmail服务器 – Thermech

相关问题