Skip to content

Commit

Permalink
Adding the SMTP module for better mail handling.
Browse files Browse the repository at this point in the history
  • Loading branch information
mwanberg committed Apr 14, 2016
1 parent fafd0f5 commit 39e8ce6
Show file tree
Hide file tree
Showing 9 changed files with 4,758 additions and 0 deletions.
339 changes: 339 additions & 0 deletions sites/all/modules/contrib/smtp/LICENSE.txt

Large diffs are not rendered by default.

42 changes: 42 additions & 0 deletions sites/all/modules/contrib/smtp/README.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
SMTP Authentication Support module for Drupal 7.x.
This module adds SMTP functionality to Drupal.

REQUIREMENTS
------------
* Access to an SMTP server
* The following PHP extensions need to be installed: ereg, hash, date & pcre.

* Optional: To connect to an SMTP server using SSL, you need to have the
openssl package installed on your server, and your webserver and PHP
installation need to have additional components installed and configured.

INSTALLATION INSTRUCTIONS
-------------------------
1. Copy the files included in the tarball into a directory named "smtp" in
your Drupal sites/all/modules/ directory.
2. Login as site administrator.
3. Enable the SMTP Authentication Support module on the Administer -> Modules
page.
4. Fill in required settings on the Administer -> Configuration -> System ->
SMTP Authentication Support page.
5. Enjoy.

NOTES
-----
This module sends email by connecting to an SMTP server. Therefore, you need
to have access to an SMTP server for this module to work.

Drupal will often use the email address entered into Administrator ->
Configuration -> Site information -> E-mail address as the from address. It is
important for this to be the correct address and some ISPs will block email that
comes from an invalid address.

This module no longer uses the PHPMailer package as an external library, instead
a slimmed down version of the library have been relicensed and integrated with the
smtp module.

Connecting to an SMTP server using SSL is possible only if PHP's openssl
extension is working. If the SMTP module detects openssl is available it
will display the options in the modules settings page.

Sending mail to Gmail requires SSL or TLS.
266 changes: 266 additions & 0 deletions sites/all/modules/contrib/smtp/smtp.admin.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,266 @@
<?php

/**
* @file
* Administrative page code for the smtp module.
*
*/


/**
* Administrative settings.
*
* @return
* An array containing form items to place on the module settings page.
*/
function smtp_admin_settings() {
// Override the smtp_library variable.
if (module_exists('mimemail') &&
strpos(variable_get('smtp_library', ''), 'mimemail')) {
// don't touch smtp_library
}
else {
if (variable_get('smtp_on', 0)) {
$smtp_path = drupal_get_filename('module', 'smtp');
if ($smtp_path) {
variable_set('smtp_library', $smtp_path);
drupal_set_message(t('SMTP.module is active.'));
}
// If drupal can't find the path to the module, display an error.
else {
drupal_set_message(t("SMTP.module error: Can't find file."), 'error');
}
}
// If this module is turned off, delete the variable.
else {
variable_del('smtp_library');
drupal_set_message(t('SMTP.module is INACTIVE.'));
}
}

$logging = variable_get('smtp_debugging', SMTP_LOGGING_ERRORS);

$form['onoff'] = array(
'#type' => 'fieldset',
'#title' => t('Install options'),
);
$form['onoff']['smtp_on'] = array(
'#type' => 'radios',
'#title' => t('Turn this module on or off'),
'#default_value' => variable_get('smtp_on', 0),
'#options' => array(1 => t('On'), 0 => t('Off')),
'#description' => t('To uninstall this module you must turn it off here first.'),
);
$form['onoff']['smtp_queue'] = array(
'#type' => 'checkbox',
'#title' => t('Send mail by queue'),
'#default_value' => variable_get('smtp_queue', FALSE),
'#description' => t('Mails will be sent by drupal queue api.'),
);
$form['onoff']['smtp_queue_fail'] = array(
'#type' => 'checkbox',
'#title' => t('Retry sending mail on error.'),
'#default_value' => variable_get('smtp_queue_fail', FALSE),
'#description' => t('Mails will be added to the queue and sent by drupal queue api.'),
);

$form['server'] = array(
'#type' => 'fieldset',
'#title' => t('SMTP server settings'),
);
$form['server']['smtp_host'] = array(
'#type' => 'textfield',
'#title' => t('SMTP server'),
'#default_value' => variable_get('smtp_host', ''),
'#description' => t('The address of your outgoing SMTP server.'),
);
$form['server']['smtp_hostbackup'] = array(
'#type' => 'textfield',
'#title' => t('SMTP backup server'),
'#default_value' => variable_get('smtp_hostbackup', ''),
'#description' => t('The address of your outgoing SMTP backup server. If the primary server can\'t be found this one will be tried. This is optional.'),
);
$form['server']['smtp_port'] = array(
'#type' => 'textfield',
'#title' => t('SMTP port'),
'#size' => 6,
'#maxlength' => 6,
'#default_value' => variable_get('smtp_port', '25'),
'#description' => t('The default SMTP port is 25, if that is being blocked try 80. Gmail uses 465. See !url for more information on configuring for use with Gmail.', array('!url' => l(t('this page'), 'http://gmail.google.com/support/bin/answer.py?answer=13287'))),
);

// Only display the option if openssl is installed.
if (function_exists('openssl_open')) {
$encryption_options = array(
'standard' => t('No'),
'ssl' => t('Use SSL'),
'tls' => t('Use TLS'),
);
$encryption_description = t('This allows connection to an SMTP server that requires SSL encryption such as Gmail.');
}
// If openssl is not installed, use normal protocol.
else {
variable_set('smtp_protocol', 'standard');
$encryption_options = array('standard' => t('No'));
$encryption_description = t('Your PHP installation does not have SSL enabled. See the !url page on php.net for more information. Gmail requires SSL.', array('!url' => l(t('OpenSSL Functions'), 'http://php.net/openssl')));
}
$form['server']['smtp_protocol'] = array(
'#type' => 'select',
'#title' => t('Use encrypted protocol'),
'#default_value' => variable_get('smtp_protocol', 'standard'),
'#options' => $encryption_options,
'#description' => $encryption_description,
);

$form['auth'] = array(
'#type' => 'fieldset',
'#title' => t('SMTP Authentication'),
'#description' => t('Leave blank if your SMTP server does not require authentication.'),
);
$form['auth']['smtp_username'] = array(
'#type' => 'textfield',
'#title' => t('Username'),
'#default_value' => variable_get('smtp_username', ''),
'#description' => t('SMTP Username.'),
);
$form['auth']['smtp_password'] = array(
'#type' => 'password',
'#title' => t('Password'),
'#default_value' => variable_get('smtp_password', ''),
'#description' => t('SMTP password. If you have already entered your password before, you should leave this field blank, unless you want to change the stored password.'),
);

$form['email_options'] = array(
'#type' => 'fieldset',
'#title' => t('E-mail options'),
);
$form['email_options']['smtp_from'] = array(
'#type' => 'textfield',
'#title' => t('E-mail from address'),
'#default_value' => variable_get('smtp_from', ''),
'#description' => t('The e-mail address that all e-mails will be from.'),
);
$form['email_options']['smtp_fromname'] = array(
'#type' => 'textfield',
'#title' => t('E-mail from name'),
'#default_value' => variable_get('smtp_fromname', ''),
'#description' => t('The name that all e-mails will be from. If left blank will use the site name of:') . ' ' . variable_get('site_name', 'Drupal powered site'),
);
$form['email_options']['smtp_allowhtml'] = array(
'#type' => 'checkbox',
'#title' => t('Allow to send e-mails formatted as Html'),
'#default_value' => variable_get('smtp_allowhtml', 0),
'#description' => t('Checking this box will allow Html formatted e-mails to be sent with the SMTP protocol.'),
);

// If an address was given, send a test e-mail message.
$test_address = variable_get('smtp_test_address', '');
if ($test_address != '') {
// Clear the variable so only one message is sent.
variable_del('smtp_test_address');
global $language;
$params['subject'] = t('Drupal SMTP test e-mail');
$params['body'] = array(t('If you receive this message it means your site is capable of using SMTP to send e-mail.'));
drupal_mail('smtp', 'smtp-test', $test_address, $language, $params);

if ($logging === SMTP_LOGGING_NONE) {
drupal_set_message(t('A test e-mail has been sent to @email.', array('@email' => $test_address)));
}
else {
drupal_set_message(t('A test e-mail has been sent to @email. You may want to !check for any error messages.', array('@email' => $test_address, '!check' => l(t('check the logs'), 'admin/reports/dblog'))));
}
}

$form['email_test'] = array(
'#type' => 'fieldset',
'#title' => t('Send test e-mail'),
);
$form['email_test']['smtp_test_address'] = array(
'#type' => 'textfield',
'#title' => t('E-mail address to send a test e-mail to'),
'#default_value' => '',
'#description' => t('Type in an address to have a test e-mail sent there.'),
);

$form['debugging'] = array(
'#type' => 'fieldset',
'#title' => t('Debugging and logging'),
);

$logging_options = array(
SMTP_LOGGING_ALL => t('Log everything'),
SMTP_LOGGING_ERRORS => t('Errors only'),
SMTP_LOGGING_NONE => t('No logging'),
);
$form['debugging']['smtp_debugging'] = array(
'#type' => 'select',
'#title' => t('Logging'),
'#options' => $logging_options,
'#default_value' => $logging,
'#description' => t('Choose the appropriate log level. "Log everything" will log errors and informational messages when an email is sent. "Errors only" will only create a log entry when sending failed. "No logging" will disable all logging for this module.'),
);

$form['#submit'][] = 'smtp_admin_settings_form_submit';

return system_settings_form($form);
} // End of smtp_admin_settings().



/**
* Validation for the administrative settings form.
*
* @param form
* An associative array containing the structure of the form.
* @param form_state
* A keyed array containing the current state of the form.
*/
function smtp_admin_settings_validate($form, &$form_state) {
if ($form_state['values']['smtp_on'] == 1 && $form_state['values']['smtp_host'] == '') {
form_set_error('smtp_host', t('You must enter an SMTP server address.'));
}

if ($form_state['values']['smtp_on'] == 1 && $form_state['values']['smtp_port'] == '') {
form_set_error('smtp_port', t('You must enter an SMTP port number.'));
}

if ($form_state['values']['smtp_from'] && !valid_email_address($form_state['values']['smtp_from'])) {
form_set_error('smtp_from', t('The provided from e-mail address is not valid.'));
}

// If username is set empty, we must set both username/password empty as well.
if (empty($form_state['values']['smtp_username'])) {
$form_state['values']['smtp_password'] = '';
}

// A little hack. When form is presentend, the password is not shown (Drupal way of doing).
// So, if user submits the form without changing the password, we must prevent it from being reset.
elseif (empty($form_state['values']['smtp_password'])) {
unset($form_state['values']['smtp_password']);
}
} // End of smtp_admin_settings_validate().

/**
* Submit handler().
*/
function smtp_admin_settings_form_submit($form, &$form_state) {
// Check if SMTP status has been changed.
if (
(!variable_get('smtp_on', FALSE) && $form_state['values']['smtp_on']) ||
(variable_get('smtp_on', FALSE) && !$form_state['values']['smtp_on'])
) {
$mail_modes = variable_get('mail_system', array('default-system' => 'DefaultMailSystem'));

// Turning on.
if ($form_state['values']['smtp_on']) {
variable_set('smtp_previous_mail_system', $mail_modes['default-system']);
$mail_modes['default-system'] = 'SmtpMailSystem';
}
// Turning off.
else {
$mail_modes['default-system'] = variable_get('smtp_previous_mail_system', 'DefaultMailSystem');
}

variable_set('mail_system', $mail_modes);
}
}
15 changes: 15 additions & 0 deletions sites/all/modules/contrib/smtp/smtp.info
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
name = SMTP Authentication Support
description = "Allow for site emails to be sent through an SMTP server of your choice."
core = 7.x
package = Mail
configure = admin/config/system/smtp
files[] = smtp.mail.inc
files[] = smtp.phpmailer.inc
files[] = smtp.transport.inc

; Information added by Drupal.org packaging script on 2015-12-08
version = "7.x-1.3"
core = "7.x"
project = "smtp"
datestamp = "1449607140"

Loading

0 comments on commit 39e8ce6

Please sign in to comment.