После обновления до php 5.6 (mac os x sierra) я не могу отправлять письма в локальной тестовой среде.
Но, к сожалению, доставка почты через 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 без этой ошибки, так что я сделал это, чтобы указать opensl.cafile = в моем php ini, как я нашел здесь: https://andrewyager.com/2016/10/ 04 / PHP-на-MacOS-Сьерра-косяка-доступ-SSL-данные /
Теперь 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 в любом другом месте для symfony / swiftmailer?
Я уже нашел это: PHP – Swiftmailer с использованием STARTTLS и самоподписанных сертификатов. Но для таких жестких программ, как это, не вариант, потому что я хочу развернуть базу кода, не меняя ее каждый раз. Я предпочитаю решать эту проблему на системном уровне.
Кажется, проблема заключается в самозаверяющем сертификате, так как вы находитесь на своей локальной машине.
Вы должны добавить следующее в свой config.yml (или если вы хотите отделить test / dev от prod в следующем файле 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
Вы можете создать свой собственный сервис, который будет реализовывать это поведение. Проверьте это решение, также вы можете создать собственный завод для Swift_SmtpTransport:
https://github.com/swiftmailer/swiftmailer/issues/544#issuecomment-220103233