-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding the SMTP module for better mail handling.
- Loading branch information
Showing
9 changed files
with
4,758 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | ||
|
Oops, something went wrong.