2016-11-02 1 views
1

Nach dem Upgrade auf PHP 5.6 (Mac OS x Sierra) kann ich keine Mails in meiner lokalen Testumgebung senden.Symfony swiftmailer über smtp gmail auf localhost openssl Fehler

Aber leider funktioniert die Zustellung per E-Mail via swiftmailer in Symfony nicht.

Dies ist der Fehler:

[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 

Was ich bis jetzt entdeckt:

Seit PHP 5.6 openssl eine Anforderung scheint: http://php.net/manual/en/migration56.openssl.php

Denn nach dem Update I nicht in der Lage war file_get_contents zu verwenden überhaupt ohne diesen Fehler, so was ich getan habe, war eine openssl.cafile = in meinem php ini wie ich hier gefunden: https://andrewyager.com/2016/10/04/php-on-macos-sierra-cant-access-ssl-data/

Jetzt file_get_contents funktioniert wieder, aber ich bin nicht in der Lage, Swiftmailer Mails via SMTP zu senden.

Das ist mein Swiftmailer config:

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 } 

Muss ich auf meine CaFile an einem anderen Ort, um symfony/Swiftmailer zur Verfügung stellen?

Ich habe bereits gefunden: PHP - Swiftmailer using STARTTLS and self signed certificates Aber solche Lösungen hardcodieren ist keine Option, weil ich die Codebasis bereitstellen möchte, ohne dies jedes Mal zu ändern. Ich bevorzuge es, dieses Problem auf Systemebene zu lösen.

+1

Bitte geben Sie die Version von OpenSSL Sie verwenden. Bitte zeigen Sie auch den Code, der den von OpenSSL verwendeten Kontext einrichtet. Es sollte ähnlich aussehen wie [SSL/TLS-Client] (https://wiki.openssl.org/index.php/SSL/TLS_Client) im OpenSSL-Wiki. – jww

Antwort

3

Es scheint, dass das Problem der selbst signiertes Zertifikat ist, wie Sie auf Ihrem lokalen Rechner sind.

Sie müssen Folgendes zu Ihrem config.yml hinzufügen (oder wenn Sie es vorziehen Test/dev aus prod in der nachfolgenden config_dev.yml zu trennen):

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

Auf diese Weise sollte es funktionieren, und Sie haben dev und prod env getrennt.

Schauen Sie auch hier: https://github.com/symfony/swiftmailer-bundle/tree/master/Tests/DependencyInjection/Fixtures/config/yml

+0

vielen Dank. Ich wollte das vermeiden, aber die Verwendung von config_dev.yml scheint eine gute Idee zu sein! –

Verwandte Themen