Saltar al contenido

PHP – Swiftmailer usando STARTTLS y certificados autofirmados

Posterior a buscar en varios repositorios y páginas webs de internet al terminar hallamos la resolución que te enseñamos más adelante.

Solución:

Swiftmailer ahora se ha actualizado para incluir una opción para esto. Ahora se puede resolver usando el setStreamOptions método de su Swift_SmtpTransport instancia en lugar de editar la clase swift.

$transport = Swift_SmtpTransport::newInstance('smtp.server.com', 123, 'tls')
    ->setUsername('username')
    ->setPassword('password')
    ->setStreamOptions(array('ssl' => array('allow_self_signed' => true, 'verify_peer' => false)));

Tengo el mismo problema al usar Swiftmailer en Laravel.

Parece que no hay opción para esto en Swiftmailer. La solución limpia sería agregar su propia CA raíz a su servidor y firmar su certificado de servidor de correo con esta CA. El certificado sería válido después de esto. Ver por ejemplo este tutorial.

De todos modos, un truco rápido y sucio que no deberías usar sería editar swiftmailerswiftmailerlibclassesSwiftTransportStreamBuffer.php. En _establishSocketConnection() línea 253 reemplazar:

$options = array();

con algo como esto:

$options = array('ssl' => array('allow_self_signed' => true, 'verify_peer' => false));

Esto cambiará las opciones ssl de stream_context_create() (unas pocas líneas debajo $options):

$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, 
    $errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));

No necesitas editar /vendor archivos Puede especificar opciones (no documentadas) en su config/mail.php expediente:

'stream' => [
    'ssl' => [
        'allow_self_signed' => true,
        'verify_peer' => false,
        'verify_peer_name' => false,
    ],
],

Puedes comprobarlo tú mismo en vendor/laravel/framework/src/Illuminate/Mail/TransportManager.php en línea ~50:

...
if (isset($config['stream'])) 
    $transport->setStreamOptions($config['stream']);

...

valoraciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *