Support for Drupal 7 is ending on 5 January 2025—it’s time to migrate to Drupal 10! Learn about the many benefits of Drupal 10 and find migration tools in our resource center.
The 2007 version when somebody clicks on Send the email, it doesn't show anything and the 2008 version shows a page not found when people click on the email contact form link.
I have to say the 2007 version works better than the one of 2008
Please revise (filename: email.module):
====2008 version====
// $Id: email.module,v 1.9.2.8 2008/04/15 11:56:09 mh86 Exp $
/**
* Implementation of hook_help().
*/
function email_help($section) {
switch ($section) {
case 'admin/modules#description':
return t('Defines a field type for email addresses. <em>Note: Requires content.module.</em>');
}
}
/**
* Implementation of hook_field_info().
*/
function email_field_info() {
return array(
'email' => array('label' => t('E-Mail')),
);
}
/**
* Implementation of hook_field_settings().
*/
function email_field_settings($op, $field) {
switch ($op) {
case 'database columns':
$columns = array(
'email' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE, 'default' => "''"),
);
return $columns;
}
}
/**
* Implementation of hook_field_formatter_info().
*
*/
function email_field_formatter_info() {
$formats = array(
'default' => array(
'label' => 'Default Email-Link',
'field types' => array('email'),
),
'contact' => array(
'label' => 'Email-Contact Form',
'field types' => array('email'),
),
);
if (module_exists('invisimail')) {
$formats['invisi'] = array(
'label' => 'Email-Invisimail',
'field types' => array('email'),
);
}
return $formats;
}
function email_field_formatter($field, $item, $formatter, $node) {
if (empty($item['email'])) {
return '';
}
else {
if ($formatter == 'contact') {
$mailto = l(t('Email Contact Form'), 'email/'.$node->nid.'/'.$field['field_name']);
}
elseif ($formatter == 'invisi' && module_exists('invisimail')) {
$format = $GLOBALS['invisimail_format'];
if (!(variable_get('invisimail_link_'.$format, TRUE))) {
variable_set('invisimail_link_'.$format, TRUE);
variable_set('invisimail_js_'.$format, TRUE);
}
$mailto = invisimail_ascii_encode($item['email']);
}
else {
$mailto = '<a href="mailto:'. $item['email']. '">'. check_plain($item['email']) .'</a>';
}
return $mailto;
}
}
/**
* Implementation of hook_widget_info().
*/
function email_widget_info() {
return array(
'email' => array(
'label' => t('Textfield'),
'field types' => array('email'),
),
);
}
/**
* Implementation of hook_widget_settings().
*/
function email_widget_settings($op, $widget) {
switch ($op) {
case 'form':
$form = array();
$form['size'] = array(
'#type' => 'textfield',
'#title' => t('Size'),
'#default_value' => isset($widget['size']) ? $widget['size'] : 60,
'#required' => FALSE,
'#description' => t('Size of textfield'),
);
return $form;
case 'validate':
if (!empty($widget['size']) && (!is_numeric($widget['size']) || intval($widget['size']) != $widget['size'] || $widget['size'] <= 0)) {
form_set_error('size', t('"Size" must be a positive integer.'));
}
break;
case 'save':
return array('size');
}
}
/**
* Implementation of hook_widget().
*/
function email_widget($op, &$node, $field, &$node_field) {
switch ($op) {
case 'form':
$form = array();
$form[$field['field_name']] = array(
'#tree' => TRUE,
'#weight' => $field['widget']['weight'],
);
if ($field['multiple']) {
$form[$field['field_name']]['#type'] = 'fieldset';
$form[$field['field_name']]['#title'] = t($field['widget']['label']);
foreach (range(0,2) as $delta) {
$default_value = "";
if (isset($field['widget']['default_value'][$delta]['email'])) {
$default_value = $field['widget']['default_value'][$delta]['email'];
}
$form[$field['field_name']][$delta]['email'] = array(
'#type' => 'textfield',
'#title' => '',
'#default_value' => isset($node_field[$delta]['email']) ? $node_field[$delta]['email'] : $default_value,
'#required' => $field['required'] ? $field['required'] : FALSE,
'#maxlength' => 255,
'#size' => isset($field['widget']['size']) ? $field['widget']['size'] : 60,
'#description' => isset($field['widget']['description']) ? $field['widget']['description'] : '',
);
}
}
else {
$default_value = "";
if (isset($field['widget']['default_value'][0]['email'])) {
$default_value = $field['widget']['default_value'][0]['email'];
}
$form[$field['field_name']][0]['email'] = array(
'#type' => 'textfield',
'#title' => $field['widget']['label'],
'#default_value' => isset($node_field[0]['email']) ? $node_field[0]['email'] : $default_value,
'#required' => $field['required'] ? $field['required'] : FALSE,
'#maxlength' => 255,
'#size' => isset($field['widget']['size']) ? $field['widget']['size'] : 60,
'#description' => isset($field['widget']['description']) ? $field['widget']['description'] : '',
);
}
return $form;
case 'validate':
if (is_array($node_field)) {
foreach ($node_field as $delta => $item) {
if ($item['email'] != '' && !valid_email_address(trim($item['email']))) {
form_set_error($field['field_name'],t('"%mail" is not a valid email address',array('%mail' => $item['email'])));
}
}
}
break;
}
}
/**
* Implementation of hook_menu().
*/
function email_menu($may_cache) {
$items = array();
if ($may_cache) {
$items[] = array('path' => 'email',
'title' => t('Email Contact Form'),
'callback' => 'email_mail_page',
'access' => user_access('access content'),
'type' => MENU_CALLBACK,
);
}
return $items;
}
/**
* The contact form page.
*/
function email_mail_page($nid=null, $fieldname=null) {
if (empty($nid) || empty($fieldname)) {
drupal_not_found();
return;
}
$node = node_load(intval($nid));
if (!$node) {
drupal_not_found();
return;
}
// Validate field name
$types = content_types($node->type);
if (!isset($types['fields'][$fieldname]) ||
$types['fields'][$fieldname]['type'] != 'email' ||
($types['fields'][$fieldname]['display_settings']['teaser']['format'] != 'contact' &&
$types['fields'][$fieldname]['display_settings']['full']['format'] != 'contact')) {
drupal_not_found();
return;
}
$field = $node->$fieldname;
if (empty($field) || empty($field[0]['email'])) {
drupal_not_found();
return;
}
if (!flood_is_allowed('email', variable_get('email_hourly_threshold', 3))) {
$output = t("You cannot send more than %number messages per hour. Please try again later.", array('%number' => variable_get('email_hourly_threshold', 3)));
}
else {
$output = drupal_get_form('email_mail_page_form');
}
return $output;
}
function email_mail_page_form() {
global $user;
if ($user->uid) {
$edit['name'] = $user->name;
$edit['mail'] = $user->mail;
}
$form['#token'] = $user->name . $user->mail;
$form['name'] = array('#type' => 'textfield',
'#title' => t('Your name'),
'#maxlength' => 255,
'#default_value' => $edit['name'],
'#required' => TRUE,
);
$form['mail'] = array('#type' => 'textfield',
'#title' => t('Your e-mail address'),
'#maxlength' => 255,
'#default_value' => $edit['mail'],
'#required' => TRUE,
);
$form['subject'] = array('#type' => 'textfield',
'#title' => t('Subject'),
'#maxlength' => 255,
'#required' => TRUE,
);
$form['message'] = array('#type' => 'textarea',
'#title' => t('Message'),
'#required' => TRUE,
);
$form['submit'] = array('#type' => 'submit',
'#value' => t('Send e-mail'),
);
return $form;
}
/**
* Validate the site-wide contact page form submission.
*/
function email_mail_page_form_validate($form_id, $form_values) {
if (!valid_email_address($form_values['mail'])) {
form_set_error('mail', t('You must enter a valid e-mail address.'));
}
if (preg_match("/\r|\n/", $form_values['subject'])) {
form_set_error('subject', t('The subject cannot contain linebreaks.'));
watchdog('mail', 'Email injection exploit attempted in email form subject: '.check_plain($form_values['subject']), WATCHDOG_NOTICE);
}
}
/**
* Process the site-wide contact page form submission.
*/
function email_mail_page_form_submit($form_id, $edit) {
$nid = intval(arg(1));
$fieldname = arg(2);
if (empty($nid) || empty($fieldname)) {
drupal_not_found();
return;
}
$node = node_load($nid);
if (!$node) {
drupal_not_found();
return;
}
// Validate field name
$types = content_types($node->type);
if (!isset($types['fields'][$fieldname]) ||
$types['fields'][$fieldname]['type'] != 'email') {
drupal_not_found();
return;
}
$field = $node->$fieldname;
if (empty($field) || empty($field[0]['email'])) {
drupal_not_found();
return;
}
$email = $field[0]['email'];
// E-mail address of the sender: as the form field is a text field,
// all instances of \r and \n have been automatically stripped from it.
$from = $edit['mail'];
// Compose the body:
$message[] = t("@name sent a message using the contact form at @form.", array('@name' => $edit['name'], '@form' => url($_GET['q'], NULL, NULL, TRUE)));
$message[] = $edit['message'];
// Tidy up the body:
foreach ($message as $key => $value) {
$message[$key] = wordwrap($value);
}
// Format the category:
$subject = t('[@title - @contact] @subject', array('@title' => preg_replace("/\r|\n/",'',$node->title), '@contact' => $types['fields'][$fieldname]['widget']['label'], '@subject' => $edit['subject']));
// Prepare the body:
$body = implode("\n\n", $message);
// Send the e-mail to the recipients:
drupal_mail($fieldname, $email, $subject, $body, $from);
// Log the operation:
flood_register_event('email');
watchdog('mail', t('%name-from sent an e-mail at %form.', array('%name-from' => theme('placeholder', $edit['name'] ." <$from>"), '%form' => url($_GET['q'], NULL, NULL, TRUE))));
// Update user:
drupal_set_message(t('Your message has been sent.'));
// Jump to home page rather than back to contact page to avoid contradictory messages if flood control has been activated.
return 'node/'.$node->nid;
}
/**
* Token Integration
*/
/**
* Implementation of hook token_list
*/
function email_token_list($type = 'all') {
if ($type == 'field' || $type == 'all') {
$tokens['email']['email'] = t("Email Address");
return $tokens;
}
}
/**
* Implementation of hook token_values
*/
function email_token_values($type, $object = NULL, $options = array()) {
if ($type == 'field') {
$item = $object[0];
$tokens['email'] = check_plain($item['email']);
return $tokens;
}
}
====2007 version====
// $Id: email.module,v 1.9.2.3 2007/04/17 05:58:31 mh86 Exp $
/**
* Implementation of hook_help().
*/
function email_help($section) {
switch ($section) {
case 'admin/modules#description':
return t('Defines a field type for email addresses. <em>Note: Requires content.module.</em>');
}
}
/**
* Implementation of hook_field_info().
*/
function email_field_info() {
return array(
'email' => array('label' => t('E-Mail')),
);
}
/**
* Implementation of hook_field_settings().
*/
function email_field_settings($op, $field) {
switch ($op) {
case 'database columns':
$columns = array(
'email' => array('type' => 'varchar', 'length' => 255, 'not null' => TRUE),
);
return $columns;
}
}
/**
* Implementation of hook_field().
*/
function email_field($op, &$node, $field, &$node_field, $teaser, $page) {
switch ($op) {
case 'view':
foreach ($node_field as $delta => $item) {
$node_field[$delta]['view'] = content_format($field, $item, 'email', $node);
}
return theme('field', $node, $field, $node_field, $teaser, $page);
}
}
/**
* Implementation of hook_field_formatter_info().
*
*/
function email_field_formatter_info() {
return array(
'default' => array(
'label' => 'Default Email-Link',
'field types' => array('email'),
),
'invisi' => array(
'label' => 'Email-Invisimail',
'field types' => array('email'),
),
'contact' => array(
'label' => 'Email-Contact Form',
'field types' => array('email'),
),
);
}
function email_field_formatter($field, $item, $formatter, $node) {
if (empty($item['email'])) {
return '';
}
else {
if ($field['widget']['link_type'] == 'form' || $formatter == 'contact') {
$mailto = l(t('Email Contact Form'), 'email/'.$node->nid.'/'.$field['field_name']);
}
elseif (($field['widget']['link_type'] == 'mailto_encrypt' || $formatter == 'invisi') && module_exists('invisimail')) {
$format = $GLOBALS['invisimail_format'];
if (!(variable_get('invisimail_link_'.$format, TRUE))) {
variable_set('invisimail_link_'.$format, TRUE);
variable_set('invisimail_js_'.$format, TRUE);
}
$mailto = invisimail_ascii_encode($item['email']);
}
else {
$mailto = '<a href="mailto:'. $item['email']. '">'. check_plain($item['email']) .'</a>';
}
return $mailto;
}
}
/**
* Implementation of hook_widget_info().
*/
function email_widget_info() {
return array(
'email' => array(
'label' => t('Textfield'),
'field types' => array('email'),
),
);
}
/**
* Implementation of hook_widget_settings().
*/
function email_widget_settings($op, $widget) {
switch ($op) {
case 'form':
$form = array();
$form['size'] = array(
'#type' => 'textfield',
'#title' => t('Size'),
'#default_value' => isset($widget['size']) ? $widget['size'] : 60,
'#required' => FALSE,
'#description' => t('Size of textfield'),
);
$options = array(
'mailto' => t('Mailto: Direct link'),
'form' => t('Contact form'),
);
if (module_exists('invisimail')) {
$options += array('mailto_encrypt' => t('Mailto: Direct link with invisimail encryption'));
}
$form['link_type'] = array(
'#type' => 'radios',
'#title' => t('Email Link Type'),
'#default_value' => isset($widget['link_type']) ? $widget['link_type'] : 'mailto',
'#options' => $options,
);
return $form;
case 'validate':
if (!empty($widget['size']) && (!is_numeric($widget['size']) || intval($widget['size']) != $widget['size'] || $widget['size'] <= 0)) {
form_set_error('size', t('"Size" must be a positive integer.'));
}
break;
case 'save':
return array('size', 'link_type');
}
}
/**
* Implementation of hook_widget().
*/
function email_widget($op, &$node, $field, &$node_field) {
switch ($op) {
case 'form':
$form = array();
$form[$field['field_name']] = array(
'#tree' => TRUE,
'#weight' => $field['widget']['weight'],
);
if ($field['multiple']) {
$form[$field['field_name']]['#type'] = 'fieldset';
$form[$field['field_name']]['#title'] = t($field['widget']['label']);
foreach (range(0,2) as $delta) {
$default_value = "";
if (isset($field['widget']['default_value'][$delta]['email'])) {
$default_value = $field['widget']['default_value'][$delta]['email'];
}
$form[$field['field_name']][$delta]['email'] = array(
'#type' => 'textfield',
'#title' => '',
'#default_value' => isset($node_field[$delta]['email']) ? $node_field[$delta]['email'] : $default_value,
'#required' => $field['required'] ? $field['required'] : FALSE,
'#maxlength' => 255,
'#size' => isset($field['widget']['size']) ? $field['widget']['size'] : 60,
'#description' => isset($field['widget']['description']) ? $field['widget']['description'] : '',
);
}
}
else {
$default_value = "";
if (isset($field['widget']['default_value'][0]['email'])) {
$default_value = $field['widget']['default_value'][0]['email'];
}
$form[$field['field_name']][0]['email'] = array(
'#type' => 'textfield',
'#title' => $field['widget']['label'],
'#default_value' => isset($node_field[0]['email']) ? $node_field[0]['email'] : $default_value,
'#required' => $field['required'] ? $field['required'] : FALSE,
'#maxlength' => 255,
'#size' => isset($field['widget']['size']) ? $field['widget']['size'] : 60,
'#description' => isset($field['widget']['description']) ? $field['widget']['description'] : '',
);
}
return $form;
case 'validate':
if (is_array($node_field)) {
foreach ($node_field as $delta => $item) {
if ($item['email'] != '' && !valid_email_address($item['email'])) {
form_set_error($field['field_name'],t('"%mail" is not a valid email address',array('%mail' => $item['email'])));
}
}
}
break;
}
}
/**
* Implementation of hook_menu().
*/
function email_menu($may_cache) {
$items = array();
if ($may_cache) {
$items[] = array('path' => 'email',
'title' => t('Email Contact Form'),
'callback' => 'email_mail_page',
'access' => user_access('access content'),
'type' => MENU_CALLBACK,
);
}
return $items;
}
/**
* The contact form page.
*/
function email_mail_page($nid=null, $fieldname=null) {
if (empty($nid) || empty($fieldname)) {
drupal_not_found();
return;
}
$node = node_load(intval($nid));
if (!$node) {
drupal_not_found();
return;
}
// Validate field name
$types = content_types($node->type);
if (!isset($types['fields'][$fieldname]) ||
$types['fields'][$fieldname]['type'] != 'email' ||
$types['fields'][$fieldname]['widget']['link_type'] != 'form') {
drupal_not_found();
return;
}
$field = $node->$fieldname;
if (empty($field) || empty($field[0]['email'])) {
drupal_not_found();
return;
}
if (!flood_is_allowed('email', variable_get('email_hourly_threshold', 3))) {
$output = t("You cannot send more than %number messages per hour. Please try again later.", array('%number' => variable_get('email_hourly_threshold', 3)));
}
else {
$output = drupal_get_form('email_mail_page_form');
}
return $output;
}
function email_mail_page_form() {
global $user;
if ($user->uid) {
$edit['name'] = $user->name;
$edit['mail'] = $user->mail;
}
$form['#token'] = $user->name . $user->mail;
$form['name'] = array('#type' => 'textfield',
'#title' => t('Your name'),
'#maxlength' => 255,
'#default_value' => $edit['name'],
'#required' => TRUE,
);
$form['mail'] = array('#type' => 'textfield',
'#title' => t('Your e-mail address'),
'#maxlength' => 255,
'#default_value' => $edit['mail'],
'#required' => TRUE,
);
$form['subject'] = array('#type' => 'textfield',
'#title' => t('Subject'),
'#maxlength' => 255,
'#required' => TRUE,
);
$form['message'] = array('#type' => 'textarea',
'#title' => t('Message'),
'#required' => TRUE,
);
$form['submit'] = array('#type' => 'submit',
'#value' => t('Send e-mail'),
);
return $form;
}
/**
* Validate the site-wide contact page form submission.
*/
function email_mail_page_form_validate($form_id, $form_values) {
if (!valid_email_address($form_values['mail'])) {
form_set_error('mail', t('You must enter a valid e-mail address.'));
}
if (preg_match("/\r|\n/", $form_values['subject'])) {
form_set_error('subject', t('The subject cannot contain linebreaks.'));
watchdog('mail', 'Email injection exploit attempted in email form subject: '.check_plain($form_values['subject']), WATCHDOG_NOTICE);
}
}
/**
* Process the site-wide contact page form submission.
*/
function email_mail_page_form_submit($form_id, $edit) {
$nid = intval(arg(1));
$fieldname = arg(2);
if (empty($nid) || empty($fieldname)) {
drupal_not_found();
return;
}
$node = node_load($nid);
if (!$node) {
drupal_not_found();
return;
}
// Validate field name
$types = content_types($node->type);
if (!isset($types['fields'][$fieldname]) ||
$types['fields'][$fieldname]['type'] != 'email' ||
$types['fields'][$fieldname]['widget']['link_type'] != 'form') {
drupal_not_found();
return;
}
$field = $node->$fieldname;
if (empty($field) || empty($field[0]['email'])) {
drupal_not_found();
return;
}
$email = $field[0]['email'];
// E-mail address of the sender: as the form field is a text field,
// all instances of \r and \n have been automatically stripped from it.
$from = $edit['mail'];
// Compose the body:
$message[] = t("%name sent a message using the contact form at %form.", array('%name' => $edit['name'], '%form' => url($_GET['q'], NULL, NULL, TRUE)));
$message[] = $edit['message'];
// Tidy up the body:
foreach ($message as $key => $value) {
$message[$key] = wordwrap($value);
}
// Format the category:
$subject = t('[%title - %contact] %subject', array('%title' => preg_replace("/\r|\n/",'',$node->title), '%contact' => $types['fields'][$fieldname]['widget']['label'], '%subject' => $edit['subject']));
// Prepare the body:
$body = implode("\n\n", $message);
// Send the e-mail to the recipients:
drupal_mail($fieldname, $email, $subject, $body, $from);
// Log the operation:
flood_register_event('email');
watchdog('mail', t('%name-from sent an e-mail at %form.', array('%name-from' => theme('placeholder', $edit['name'] ." <$from>"), '%form' => url($_GET['q'], NULL, NULL, TRUE))));
// Update user:
drupal_set_message(t('Your message has been sent.'));
// Jump to home page rather than back to contact page to avoid contradictory messages if flood control has been activated.
return 'node/'.$node->nid;
}
Comments
Comment #1
rootwork