In this post, we will be sending a simple birthday greeting email to the users using cron.
First, we have to create a module file in our custom module folder. We will name it as 'MODULE_NAME.module'. Using the hook_cron(), we will call a function to send the emails to the users where the mail-body is defined.
function MODULE_NAME_cron() {
user_birthday_mails();
}
Now we will fetch the details of the users, namely User-Name, Email-ID & Date of Birth.
In this scenario, I'm fetching the user details from a custom table.
<?php
function user_birthday_mails() {
// this is used to send HTML emails
$send_mail = new \Drupal\Core\Mail\Plugin\Mail\PhpMail();
$current_m_d = date('m-d', \Drupal::time()->getRequestTime());
$fetch_query = \Drupal::database()->query("SELECT `firstname`, `email`, `dob` FROM `TABLE_NAME`");
$query_result = $fetch_query->fetchAll();
foreach($query_result as $result){
$birthday = explode('-', $result->dob);
$birth_m_d = $birthday[1].'-'.$birthday[2];
$user_name = $result->firstname;
$user_mail = $result->email;
if($birth_m_d == $current_m_d){
$from = 'sitename@example.com';
$to = $user_mail;
$message['headers'] = array(
'content-type' => 'text/html',
'MIME-Version' => '1.0',
'reply-to' => $from,
'from' => 'Site Admin <'.$from.'>'
);
$message['to'] = $to;
$message['subject'] = "Happy Birthday ".$user_name."!!!";
$message['body'] = 'Dear '.$user_name.',
<br><br>
We value your special day just as much as we value you. On your birthday, we send you our warmest and most heartfelt wishes..
<br><br>
Regards,<br>
Site Admin';
$send_mail->mail($message);
\Drupal::logger('userinfo')->notice('Birthday mail sent to '.$user_name);
};
}
}
I hope you find this simple use of cron helpful.
Top comments (0)