我尝试使用 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()以获得相同的结果
查看''Zend''Mail''Transport''Smtp和''Zend''Mail''Message类的源代码,在我看来你做对了;发送函数(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() 来设置"myemail@mydomain.com"地址。我不太了解它们之间的区别,但是查看prepareFromAddress函数,似乎您可以使用它来放置发件人地址。