2016-11-02 114 views
1

升級到php 5.6(mac os x sierra)之後,我無法在本地測試環境中發送郵件。Symfony swiftmailer通過本地主機上的smtp gmail openssl錯誤

但令人傷心的是,通過在Symfony中的swiftmailer發送郵件不起作用。

這是錯誤:

[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再次工作,但我無法通過smtp發送swiftmailer郵件。

這是我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 using STARTTLS and self signed certificates 但是對於這樣的硬編碼解決方案不是一種選擇,因爲我想部署代碼庫而不必每次都改變它。我更喜歡在系統級別解決這個問題。

+1

請註明您使用的OpenSSL版本。還請顯示設置OpenSSL使用的上下文的代碼。它應該類似於OpenSSL wiki上的[SSL/TLS Client](https://wiki.openssl.org/index.php/SSL/TLS_Client)。 – jww

回答

3

看來,這個問題是自簽名證書,因爲你是在本地機器上。

您必須添加以下到您的config.yml(或者,如果你喜歡從PROD在隨後config_dev.yml分開測試/開發):

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

這樣,它應該工作,你必須開發和prod env分開。

也看這裏:https://github.com/symfony/swiftmailer-bundle/tree/master/Tests/DependencyInjection/Fixtures/config/yml

+0

非常感謝。我想避免這種情況,但使用config_dev.yml似乎是一個好主意! –

相關問題