Laravel

Unable to connect with STARTTLS: stream_socket_enable_crypto(): SSL operation failed fixed

Hello buddy, I hope you are doing well, I know when we setup email on our live server it’s throws the error like STARTTLS stream_socket operation failed.

So, In this blog you will learn how to fix STARTTLS error in laravel project while setting up email on the live server.

I will show you step by step guide on how to fix STARTTLS SSL operation failed error fix.

Follow the below step to fix STARTTLS error

  1. Go to mail.php
  2. Add the SSL code

Step:1 Go to mail.php

First, open your laravel project and open this file config/mail.php

Step:2 Add the SSL code

Add the below code inside smtp array.

'verify_peer' => false,  

I have added a screenshot for your reference

Now add the below array in your last part of the code.
'stream' => [
        'ssl' => [
            'allow_self_signed' => true,
            'verify_peer' => false,
            'verify_peer_name' => false,
        ],
     ],

After adding both the code your entire, mail.php file looks like the below one.

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Mailer
    |--------------------------------------------------------------------------
    |
    | This option controls the default mailer that is used to send any email
    | messages sent by your application. Alternative mailers may be setup
    | and used as needed; however, this mailer will be used by default.
    |
    */

    'default' => env('MAIL_MAILER', 'smtp'),

    /*
    |--------------------------------------------------------------------------
    | Mailer Configurations
    |--------------------------------------------------------------------------
    |
    | Here you may configure all of the mailers used by your application plus
    | their respective settings. Several examples have been configured for
    | you and you are free to add your own as your application requires.
    |
    | Laravel supports a variety of mail "transport" drivers to be used while
    | sending an e-mail. You will specify which one you are using for your
    | mailers below. You are free to add additional mailers as required.
    |
    | Supported: "smtp", "sendmail", "mailgun", "ses",
    |            "postmark", "log", "array", "failover"
    |
    */

    'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'auth_mode' => null,
            'verify_peer' => false,  
        ],

        'ses' => [
            'transport' => 'ses',
        ],

        'mailgun' => [
            'transport' => 'mailgun',
        ],

        'postmark' => [
            'transport' => 'postmark',
        ],

        'sendmail' => [
            'transport' => 'sendmail',
            'path' => '/usr/sbin/sendmail -bs',
        ],

        'log' => [
            'transport' => 'log',
            'channel' => env('MAIL_LOG_CHANNEL'),
        ],

        'array' => [
            'transport' => 'array',
        ],

        'failover' => [
            'transport' => 'failover',
            'mailers' => [
                'smtp',
                'log',
            ],
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Global "From" Address
    |--------------------------------------------------------------------------
    |
    | You may wish for all e-mails sent by your application to be sent from
    | the same address. Here, you may specify a name and address that is
    | used globally for all e-mails that are sent by your application.
    |
    */

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],

    /*
    |--------------------------------------------------------------------------
    | Markdown Mail Settings
    |--------------------------------------------------------------------------
    |
    | If you are using Markdown based email rendering, you may configure your
    | theme and component paths here, allowing you to customize the design
    | of the emails. Or, you may simply stick with the Laravel defaults!
    |
    */

    'markdown' => [
        'theme' => 'default',

        'paths' => [
            resource_path('views/vendor/mail'),
        ],
    ],

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

];

I hope your issue has been fixed, still not fixed please add comment so our developer will reply you.

Shaiv Roy

Hy Myself shaiv roy, I am a passionate blogger and love to share ideas among people, I am having good experience with laravel, vue js, react, flutter and doing website and app development work from last 7 years.

Related Articles

2 Comments

  1. Symfony \Component \Mailer \Exception \TransportException
    PHP 8.1.22 9.52.5
    Unable to connect with STARTTLS: stream_socket_enable_crypto(): Peer certificate CN=`*.prod.bom1.secureserver.net’ did not match expected CN=`localhost’

    app /Http /Controllers /Auth /RegisterController.php: 99
    Mail::to($user->email)->send(new UserRegistration($message,$subject,$user));

  2. Still facing same issue when followed the suggested steps to fix step to fix STARTTLS error. Any further suggestion to fix the issue as still getting “Unable to connect with STARTTLS: stream_socket_enable_crypto(): Peer certificate CN=`*.prod.bom1.secureserver.net’ did not match expected CN=`localhost'” error when submitting the form in website or user registarion.
    ===============
    Error:
    ===============
    Symfony \Component \Mailer \Exception \TransportException PHP 8.1.22 9.52.5
    Unable to connect with STARTTLS: stream_socket_enable_crypto(): Peer certificate CN=`*.prod.bom1.secureserver.net’ did not match expected CN=`localhost’
    app /Http /Controllers /Auth /RegisterController.php: 99
    Mail::to($user->email)->send(new UserRegistration($message,$subject,$user));

    =============================
    Config\mail.php
    =============================
    env(‘MAIL_MAILER’, ‘smtp’),

    /*
    |————————————————————————–
    | Mailer Configurations
    |————————————————————————–
    |
    | Here you may configure all of the mailers used by your application plus
    | their respective settings. Several examples have been configured for
    | you and you are free to add your own as your application requires.
    |
    | Laravel supports a variety of mail “transport” drivers to be used while
    | sending an e-mail. You will specify which one you are using for your
    | mailers below. You are free to add additional mailers as required.
    |
    | Supported: “smtp”, “sendmail”, “mailgun”, “ses”,
    | “postmark”, “log”, “array”, “failover”
    |
    */

    ‘mailers’ => [
    ‘smtp’ => [
    ‘transport’ => ‘smtp’,
    ‘host’ => env(‘MAIL_HOST’, ‘smtp.mailgun.org’),
    ‘port’ => env(‘MAIL_PORT’, 587),
    ‘encryption’ => env(‘MAIL_ENCRYPTION’, ‘tls’),
    ‘username’ => env(‘MAIL_USERNAME’),
    ‘password’ => env(‘MAIL_PASSWORD’),
    ‘timeout’ => null,
    ‘auth_mode’ => null,
    ‘verify_peer’ => false,
    ‘local_domain’ => env(‘MAIL_EHLO_DOMAIN’),
    ],

    ‘ses’ => [
    ‘transport’ => ‘ses’,
    ],

    ‘mailgun’ => [
    ‘transport’ => ‘mailgun’,
    ],

    ‘postmark’ => [
    ‘transport’ => ‘postmark’,
    ],

    ‘sendmail’ => [
    ‘transport’ => ‘sendmail’,
    ‘path’ => env(‘MAIL_SENDMAIL_PATH’, ‘/usr/sbin/sendmail -bs -i’),
    ],

    ‘log’ => [
    ‘transport’ => ‘log’,
    ‘channel’ => env(‘MAIL_LOG_CHANNEL’),
    ],

    ‘array’ => [
    ‘transport’ => ‘array’,
    ],

    ‘failover’ => [
    ‘transport’ => ‘failover’,
    ‘mailers’ => [
    ‘smtp’,
    ‘log’,
    ],
    ],
    ],

    /*
    |————————————————————————–
    | Global “From” Address
    |————————————————————————–
    |
    | You may wish for all e-mails sent by your application to be sent from
    | the same address. Here, you may specify a name and address that is
    | used globally for all e-mails that are sent by your application.
    |
    */

    ‘from’ => [
    ‘address’ => env(‘MAIL_FROM_ADDRESS’, ‘hello@example.com’),
    ‘name’ => env(‘MAIL_FROM_NAME’, ‘Example’),
    ],

    /*
    |————————————————————————–
    | Markdown Mail Settings
    |————————————————————————–
    |
    | If you are using Markdown based email rendering, you may configure your
    | theme and component paths here, allowing you to customize the design
    | of the emails. Or, you may simply stick with the Laravel defaults!
    |
    */

    ‘markdown’ => [
    ‘theme’ => ‘default’,

    ‘paths’ => [
    resource_path(‘views/vendor/mail’),
    ],

    ‘stream’ => [
    ‘ssl’ => [
    ‘allow_self_signed’ => true,
    ‘verify_peer’ => false,
    ‘verify_peer_name’ => false,
    ],
    ],
    ],
    ];

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button