Sending an email when a form is submitted using form_alter and drupal_mail
For my blog I thought it would be great if I was notified when a comment was submitted. Like most of my articles, I try to explain how to accomplish something by implementing your own module hooks. In this article I’ll explain how I modified the comment form using a form_alter hook, and added an additional submit handler to send an email using drupal_mail.
First I defined a form_alter hook to modify the comment form submit handlers
<?php
function MYMODULE_form_alter(&$form, $form_state, $form_id) {
// test for comment form
if ($form_id == 'comment_form') {
// add an additional submit handler
$form['#submit'][] = '_MYMODULE_comment_form_submit';
}
}
?>
Next I created the submit handler function:
<?php
function _MYMODULE_comment_form_submit($form, &$form_state) {
// create an array of parameters
$params = array(
// NOTE: I tried using l() here,
// but links don't work very well in text emails
// this link will send me back to the node with an anchor to the comment
'commentLink' => 'http://' . $_SERVER['HTTP_HOST'] . base_path() .
$form_state['redirect'][0] . '#' . $form_state['redirect'][2]
);
// call mail function and send email
drupal_mail('MYMODULE', 'comment_submitted',
variable_get('site_mail','MYDEFAULTEMAIL'), language_default(), $params);
}
?>
Last I defined the mail hook:
<?php
function MYMODULE_mail($key, &$message, $params) {
$language = $message['language'];
switch($key) {
case 'comment_submitted':
// create an array of variables from the parameters argument
$variables = array(
'!commentLink' => $params['commentLink'],
);
// define subject and body
$message['subject'] = t("A comment has been submitted");
$message['body'] = t("!commentLink", $variables, $language->language);
break;
}
}
?>
Now when a comment is posted, my submit handler is called which notifies me of the new comment.