How to send email notifications for comments in Drupal 7 with actions & triggers (or the Rules module)
Do you have a Drupal 7 web site? Do you want to get an email when someone comments, so you don't have to check your site all the time? Don't panic! Here's how you do it.
You don't need to install any new modules to do this in Drupal 7. All that's needed is a little configuring and to copy and paste in a short bit of code.
Update: Both the easiest & most powerful way to get these notification emails (in Drupal 6 or 7) is to install and configure the Rules Module. NodeOne has a great set of video tutorials on their site explaining how to use the Rules module. I've also put example code for a Rules-based email notification in the comments to this post for both Drupal 6 and Drupal 7.
- Step 1: Getting started
- Step 2: Taking action
- Step 3: Triggering your action
- Step 4: Testing it out
- For more information
Step 1: Getting started
Go to the Modules page, and make sure that you enable the Trigger module (at Modules > Trigger) and turn on Clean URLs (at Administer > Configuration > Search and metadata). These are core modules/settings in Drupal 7, so you don't have to install them, just turn them on.
Step 2: Taking action
Your next step will be to create an action, so that drupal can perform it when a comment is saved.
Go to Configuration > System > Actions.
On the Actions page, choose the dropdown for Create an Advanced Action at the bottom of the page, and click on Send email and then Create.
On the Configure an advanced action page, fill in the first 3 fields, as in these examples:
- Label: Send an email notification to site owner upon comment save
- Recipient: siteowner@adellefrank.com
- Subject: New Comment at AdelleFrank.com
The trickiest part of this entire endeavor is filling in the Message field, but here's some easy sample code that you could just copy and paste in:
### Node
[comment:node:title] at: [site:url]node/[comment:node:nid]#comment-[comment:cid]
### Comment
[comment:author:name]
[comment:title]
[comment:body]
### Review
[site:url]admin/content/comment/approval
Those bits of code within square brackets are called tokens. Tokens are placeholders, little bits of code that represent commonly-used values. To find more tokens in Drupal 7, you must have two modules enabled. First, turn on the core Help module, which you should have enabled anyway...because it's helpful. However, I find it bizarre that, even though you're only using tokens included in the Core, you must still install and turn on the Token module, too.
Only then can you point your web browser to the Help > Token page at http://www.yoursite.com/admin/help/token and get a list of all the tokens you can choose among.
Step 3: Triggering your action
At the top of the page, click on the Triggers link to go to the next step. This page can also be found underneath Structure > Triggers.
Be sure to choose the comments tab on the Triggers page.
You have a number of choices, but since mine is a solo blog, Trigger: After saving a new comment seems most appropriate. Click on the dropdown instructing you to Choose an action and click underneath system on the name of the Action (Send an email notification to site owner upon comment save) you created in Step 2 and then click Assign.
Step 4: Testing your comments form
Now, as far as you know, your web site is set up to email you when someone saves a comment. To be absolutely certain that your new action and trigger are working correctly, you need to test it.
Browse to any page, article, or blog post on your site and post a comment.
Check your email at the address you chose in step 2. Does this email give you the information you expected?
Remember to delete your test comment off of your site.
Comments
Adelle Frank
Rules module
To send it to all users, you would probably need to use the Rules Module. NodeOne has a great set of Rules tutorials on their site that you might find helpful.
Adelle Frank
Sample Email notification code if using Rules in Drupal 6
Here is some sample code you might use in your tokenized email notification.
For the SUBJECT:
[comment:comment-hostname] ipsays: [comment:comment-body]
For the MESSAGE:
### Block [comment:comment-hostname] IP at:
[:global:site-url]user/login?destination=admin/user/rules/add?mask=[comment:comment-hostname]
[:global:site-url]admin/user/rules/add?mask=[comment:comment-hostname]
### Approve this comment at:
[:global:site-url]user/login?destination=admin/content/comment/approval
[:global:site-url]admin/content/comment/approval
### Comment Title:
"[comment:comment-title]"
### Blog Post:
"[node:title]"
### Comment Body:
[comment:comment-body]
Some Important Notes about this Code:
[comment:comment-hostname]
) to be available for your use, you will probably have to apply this patch (http://drupal.org/node/847566#comment-3174456) to the token_comment.inc file in the token module.Visitor
Rules Module
Rules Module worked great. Exactly what I wanted to do.
The tutorial on NodeOne is excellent.
Thanks for pointing me in the right direction.
Michael
Adelle Frank
Textual comparison in Rules might help with SPAM checking
If you install the Rules module, there's a much more flexible way than that listed above to do email notification, you just browse to:
http://yoursite.com/admin/rules/trigger/list
and Add A Rule.
I was especially happy about the ability to check fields (such as the title or body of a comment) for spam keywords, using the "Textual Comparison" condition.
For example, you might compare the content of your comment's body to some spam words, by entering the following into the text comparison fields:
[comment:comment-body]
and this regular expression of spam keywords in the second text field (making sure to check the "Evaluate the second text as a regular expression." box)
[cheap|essays|thesis]
Thanks to http://drupal.org/node/880924 for pointing me in the right direction.
Anthony
IP Address is Vital
An absolute must to add into the data what to send, is the IP address of the user who posted the comment, so it would be easy to blacklist spammers. The token to display it is:
[comment:hostname]
Adelle Frank
Found IP token for Drupal 6!
There is a great patch (only 2 lines more of code) that can be added to the token_comment.inc file and you'll be able to use a token in your email to let you know the IP address of your spammer:
http://drupal.org/node/847566#comment-3174456
Adelle Frank
IP token a great idea
If I ever re-visit this post, I'll definitely add your brilliant idea into the standard set of information to return.
Although, I'll have to change my site to run Drupal 7, first, as I don't think version 6 of the Token module has the hostname/IP address as a token.
Thanks for sharing your brilliance!
Alexander
Thanks!
Thanks for this detailled description about the comments mails. I use self Drupal 7 and need it!
The Light Scriber
Muchas!
Your instructions are clear, direct and they (along with the modules) work fabulously well! Thank you for this great implementation documentation!
Visitor
Found it Thanks - Rules
Found it Thanks - Rules Module will do that