ZendFramework Проблема c Zend\Mail из ZF2

A1x

Новичок
Обычно я всегда использовал для отправки почты Zend_Mail из ZF1

пробую его же из ZF2, беру пример из мануала
PHP:
use Zend\Mail;

$mail = new Mail\Message();
$mail->setBody('This is the text of the email.');
$mail->setFrom('[email protected]', 'Sender\'s name');
$mail->addTo('[email protected]', 'Name o. recipient');
$mail->setSubject('TestSubject');

$transport = new Mail\Transport\Sendmail();
$transport->send($mail);
получаю ошибку Unable to send mail: Unknown error
в Zend/Mail/Transport/Sendmail.php(288)

Transport\Sendmail - обертка над ф-цией mail()
смотрю что же он подставляет в эту ф-цию mail()
(изящно вставив команду die в код Transport/Sendmail)

PHP:
die("mail('$to', '$subject', '$message', '$headers', '$parameters');");
$result = mail($to, $subject, $message, $headers, $parameters);
результат:
PHP:
mail('Name o. recipient ', 'TestSubject', 'This is the text of the email.', 'Date: Wed, 19 Dec 2012 22:01:02 +0100 From: Sender`s name ', ' -r [email protected]');
собственно, тут я уже ничего не понимаю - почему первым параметром в mail() передается не адрес а имя?
(то же самое в заголовке From)
 

A1x

Новичок
на вид нормально
PHP:
/**
     * Add one or more addresses to the To recipients
     *
     * Appends to the list.
     *
     * @param  string|Address\AddressInterface|array|AddressList|Traversable $emailOrAddressOrList
     * @param  null|string $name
     * @return Message
     */
    public function addTo($emailOrAddressOrList, $name = null)
    {
        $addressList = $this->getTo();
        $this->updateAddressList($addressList, $emailOrAddressOrList, $name, __METHOD__);
        return $this;
    }
както надеялся обойтись без напильника
 

Redjik

Джедай-мастер
мне вот это не понравилось

PHP:
    /**
     * Prepare the textual representation of headers
     *
     * @param  \Zend\Mail\Message $message
     * @return string
     */
    protected function prepareHeaders(Mail\Message $message)
    {
        // On Windows, simply return verbatim
        if ($this->isWindowsOs()) {
            return $message->getHeaders()->toString();
        }

        // On *nix platforms, strip the "to" header
        $headers = clone $message->getHeaders();
        $headers->removeHeader('To');
        $headers->removeHeader('Subject');
        return $headers->toString();
    }
ЗЫ.нашел AbstractAddressList 112
 

craz

Нестандартное звание
Ну если это не рассылка админу, а пользователям, то нужно.

Как насчет попробовать Name <[email protected]> формат?
ну там функция

PHP:
/**
     * Add one or more addresses to the To recipients
     *
     * Appends to the list.
     *
     * @param  string|Address\AddressInterface|array|AddressList|Traversable $emailOrAddressOrList
     * @param  null|string $name
     * @return Message
     */
    public function addTo($emailOrAddressOrList, $name = null)
    {
        $addressList = $this->getTo();
        $this->updateAddressList($addressList, $emailOrAddressOrList, $name, __METHOD__);
        return $this;
    }
 

A1x

Новичок
проблема оказалась в том что Zend/Mail/Transport/Sendmail добавляет опцию -r в каждый вызов mail
эта опция у него hardcoded - Zend/Mail/Transport/Sendmail.php строки 248, 256

эта опция вызвала ошибку
sendmail: illegal option -- r
sendmail: usage: sendmail [ -t ] [ -fsender ] [ -Fname ] [ -bp ] [ -bs ] [ arg ... ]

man sendmail:
-rname An alternate and obsolete form of the -f flag.

после того как заменил -r на -f в коде Zend/Mail/Transport/Sendmail.php - почта начала отправляться нормально
(даже несмотря на то что в первом аргументе только имя вместо адреса, видимо это нормально при правильных заголовках)

на сервере где проводился тест используется qmail

хотел запостить баг репорт, зарегился на http://framework.zend.com/issues/secure/Dashboard.jspa
но при попытке Create Issue у меня только две опции

Zend Framework
Zend Framework Incubator

кто-то знает как запостить баг репорт для ZF2 ?
 

craz

Нестандартное звание
в G+ появились сообщества кстати... Го туда спрашивать про багрепорты?)
 

Вурдалак

Продвинутый новичок
Перед коммитом надо было тесты запустить. Из-за того, что ты их не исправил, он не стал мержить pull request, а закоммитил изменения сам.
 

craz

Нестандартное звание
Перед коммитом надо было тесты запустить. Из-за того, что ты их не исправил, он не стал мержить pull request, а закоммитил изменения сам.
ну и пусть) он же weierophinney как никак)

Кстати спасибо буду знать в следующие разы.
 

A1x

Новичок
вроде признал что есть смысл поменять. Посмотрим в 2.0.7
 

CodeKeeper

Новичок
Была такая проблема. Ошибку сыпал сам sendmail, из-за того что имя отправителя(а точнее домен) отличался от того, что был в конфиге сервиса.
 
Сверху