2016-11-02 1 views
1

После обновления до php 5.6 (mac os x sierra) я не могу отправлять письма в локальной тестовой среде.Symfony swiftmailer через smtp gmail на localhost opensl error

Но, к сожалению, доставка почты через swiftmailer в Symfony не работает.

Это ошибка:

[Symfony\Component\Debug\Exception\ContextErrorException] 
Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: 
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

То, что я обнаружил до сих пор:

Поскольку PHP 5.6 OpenSSL кажется требование: http://php.net/manual/en/migration56.openssl.php

Потому что после обновления я не был в состоянии использовать file_get_contents вообще без этой ошибки, так что я сделал, чтобы указать openssl.cafile = в моем php ini, как я нашел здесь: https://andrewyager.com/2016/10/04/php-on-macos-sierra-cant-access-ssl-data/

Теперь file_get_contents работает снова, но я не могу отправлять почту swiftmailer через smtp.

Это мой SwiftMailer конфигурация:

SwiftMailer:

transport:  "smtp" 
host:    "smtp.gmail.com" 
username:   "%mailer_user%" 
password:   "%mailer_password%" 
auth_mode:  login 
port:    587 
encryption:  tls 
delivery_address: "%mailer_delivery_address%" 
spool:   { type: memory } 

Должен ли я предоставить свой cafile на любом другом месте в симфони/Swiftmailer?

Я уже нашел это: PHP - Swiftmailer using STARTTLS and self signed certificates Но для таких решений, как это не вариант, потому что я хочу развернуть кодовую базу без изменения этого каждый раз. Я предпочитаю решать эту проблему на системном уровне.

+1

Пожалуйста, укажите версию OpenSSL вы используете. Также, пожалуйста, покажите код, который устанавливает контекст, используемый OpenSSL. Он должен выглядеть так, как [SSL/TLS Client] (https://wiki.openssl.org/index.php/SSL/TLS_Client) в вики OpenSSL. – jww

ответ

3

Кажется, что эта проблема является самостоятельно подписанный сертификат, как вы на локальном компьютере.

Вы должны добавить следующую строку в ваш config.yml (или, если вы предпочитаете, чтобы отделить тест/Dev от прода в последующем config_dev.yml):

swiftmailer: 
    # ... your other config 
    stream_options: 
     ssl: 
     allow_self_signed: true 
     verify_peer: false 

Таким образом, он должен работать, и у вас есть DEV и prod env разделены.

Смотри также здесь: https://github.com/symfony/swiftmailer-bundle/tree/master/Tests/DependencyInjection/Fixtures/config/yml

+0

большое спасибо. Я хотел этого избежать, но использование config_dev.yml кажется хорошей идеей! –