2

I want to send a welcome email to the user when they sign up (not an activation email).

I can see the email and edit its text in the Control Panel, but the email doesn't send when a new user registers.

Here is my code:

Event::on(SystemMessages::class, SystemMessages::EVENT_REGISTER_MESSAGES, function(RegisterEmailMessagesEvent $event) {
    $event->messages[] = [
        'key' => 'after_activate_user',
        'heading' => 'When someone registers:',
        'subject' => 'Subject',
        'body' => 'Message text',
    ];
});

My question, is there anything else I need to do to get this email to send? Do I need to define a recipient?

Brad Bell
  • 67,440
  • 6
  • 73
  • 143
Jed
  • 21
  • 2

1 Answers1

2

This will only register your message with Craft. To then send it you would do something like this:

Event::on(
    Elements::class, 
    Elements::EVENT_AFTER_SAVE_ELEMENT,
    function(Event $event) {
        if ($event->element instanceof \craft\elements\User) {
            $user = $event->element;
            if($event->isNew) {
                Craft::$app
                    ->getMailer()
                    ->composeFromKey('after_activate_user')
                    ->setTo($user)
                    ->send();
            }
        }
    }
);

This will listen for the EVENT_AFTER_SAVE_ELEMENT event, make sure it's a User being saved, check that it's a new user then send the message.

Oli
  • 7,495
  • 9
  • 17