После обновления до 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 без этой ошибки, так что я сделал, чтобы указать
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 }
Должен ли я предоставить свое кафе в любом другом месте 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