Drupal/PhpMailer - Wrong "From" Name via Contact Form
If you are using Drupal 6 with PHPMailer configured, then you might notice that after receiving an email through the contact form the "From" field is populated with the site name, instead of the user name. This can cause problems, or at least be a nuisance, since clicking the reply button in your email will automatically populate the “To” field with your site’s name. If you try to change the setting through PHPMailer (admin/settings/phpmailer), an advanced option with a field called “From Name”, and a description that reads “Enter a name that should appear as the sender for all messages. If left blank the site name will be used instead” is as close as it gets.It turns out that PHPMailer will populate the From field correctly if it receives the email in the format “Name <email@test.com>”. Luckily, Drupal has a hook which lets you alter the email message before sending it, function hook_mail_alter. You can read more about it at http://api.drupal.org/api/function/hook_mail_alter/6.Within your custom module, you can invoke the mail_alter hook, verify the message is coming from the contact form, and if so alter the email address to the correct format. Here is my solution:Note: You will need to change "MYMODULE" to the actual module name
<?php
function MYMODULE_mail_alter(&$message) {
switch ($message['id']) {
case 'contact_page_mail':
// set Fromname to user
if(!empty($message['from']) && !empty($message['params']['name'])) {
$message['from'] = $message['params']['name'].' <'.$message['from'].'>';
}
break;
}
}
?>
Comments (3)
<?php
function herk_site_mail_alter(&$message) {
switch ($message['id']) {
case "user_register_admin_created":
case "user_register_no_approval_required":
case "user_register_pending_approval":
case "user_status_blocked":
case "user_status_deleted":
break;
case "user_password_reset":
$message['headers']['From'] = $message['from'] = $message['params']['name'].' <'. $message['from'] .'>';
break;
}
}
?>
You can replace $message['params']['name'] and $message['from'] with hard-coded values as well for each case if needed.
You have saved my day to give such a basic information about sender name in email.
http://drupal.org/node/1204594#comment-6473618