Mav23Sa's avatar

Address::__construct(): Argument #1 ($address) must be of type string, null given

hi everyone, I am having this problem when I try to send the verification email to the user.

This problem started when upgrading to Laravel 9. Checking my mail.php configuration I see that I have multiple email accounts through which I send email. I think the problem is there but I can't figure it out.

'mailers' => [
        'support' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME_SUPPORT'),
            'password' => env('MAIL_PASSWORD_SUPPORT'),
            'name' => env('MAIL_NAME_SUPPORT'),
            'timeout' => null,
            'auth_mode' => null,
        ],
        'mailing' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME_MAILING'),
            'password' => env('MAIL_PASSWORD_MAILING'),
            'from' => [
                    'address' => env('MAIL_FROM_ADDRESS_MAILING'),
                    'name' => env('MAIL_FROM_NAME_MAILING'),
                ],
            'timeout' => null,
            'auth_mode' => null,
        ],
        '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,
        ],
0 likes
8 replies
Sinnbeck's avatar

Make sure that you have a sender address set. Swiftmailer works without it (laravel 8) while symfony mailer does not (laravel 9)

Mav23Sa's avatar

@Sinnbeck ok, i have the sender configured.

<?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"
    |
    */

    'mailers' => [
        'support' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME_SUPPORT'),
            'password' => env('MAIL_PASSWORD_SUPPORT'),
            'name' => env('MAIL_NAME_SUPPORT'),
            'timeout' => null,
            'auth_mode' => null,
        ],
        'mailing' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME_MAILING'),
            'password' => env('MAIL_PASSWORD_MAILING'),
            'from' => [
                    'address' => env('MAIL_FROM_ADDRESS_MAILING'),
                    'name' => env('MAIL_FROM_NAME_MAILING'),
                ],
            'timeout' => null,
            'auth_mode' => null,
        ],
        '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,
        ],

        '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',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | 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', '[email protected]'),
        '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'),
        ],
    ],
];

and my .env

MAIL_MAILER=smtp
MAIL_HOST=mail.********.com
MAIL_PORT=465
MAIL_ENCRYPTION=ssl

MAIL_USERNAME=sistema@********.com
MAIL_PASSWORD=*******
MAIL_FROM_ADDRESS=sistema@*****.com
MAIL_FROM_NAME='*****'

MAIL_FROM_ADDRESS_SUPPORT=notificaciones@******.com
MAIL_FROM_NAME_SUPPORT='*****'
MAIL_USERNAME_SUPPORT=notificaciones@*****.com
MAIL_PASSWORD_SUPPORT=********

MAIL_FROM_ADDRESS_MAILING=newsletter@******.com
MAIL_FROM_NAME_MAILING=********
MAIL_USERNAME_MAILING=newsletter@*****.com
MAIL_PASSWORD_MAILING=*****

Mav23Sa's avatar

@Sinnbeck the code is in laravel framework, i call the event, Registered. but this code worked before the update. and in my local server it works without problems, but in production it throws me that error.

event(new Registered($user));
Sinnbeck's avatar
Sinnbeck
Best Answer
Level 102

@Mav23Sa the env data you posted, was that from production? Make sure it has all the same variables set, and then redo your cache on production with php artisan config:cache

Mav23Sa's avatar

@Sinnbeck ok, it was solved by executing these commands

php artisan clear-compiled 
composer dump-autoload
php artisan optimize

probably the problem was in some class that was not loaded correctly ty sinnbeck

1 like

Please or to participate in this conversation.