messaging_phpmailer.module in Messaging 6
HTML Mail using PHPMailer. Messaging method plug-in.
File
messaging_phpmailer/messaging_phpmailer.moduleView source
<?php
/**
* @file
* HTML Mail using PHPMailer. Messaging method plug-in.
*/
// Include messaging mail library
require_once drupal_get_path('module', 'messaging') . '/messaging.mail.inc';
/**
* Implementation of hook_menu().
*/
function messaging_phpmailer_menu() {
$items = array();
$items['admin/messaging/settings/method/phpmailer'] = array(
'title' => 'PHPMailer',
'description' => 'Configure PHPMailer.',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'messaging_phpmailer_settings_form',
),
'access arguments' => array(
'administer messaging',
),
'type' => MENU_LOCAL_TASK,
);
return $items;
}
/**
* Implementation of hook_messaging
*/
function messaging_phpmailer_messaging($op = 'info') {
switch ($op) {
case 'send methods':
$info['phpmailer'] = array(
'title' => 'PHPMailer',
'name' => t('HTML Mail'),
'group' => 'mail',
'destination' => 'mail',
'send callback' => 'messaging_phpmailer_send_msg',
'type' => MESSAGING_TYPE_SEND,
'glue' => "<br>",
// don't use <br/> nor <br /> for maximum HTML email client compatibility
'footer' => "<br><br>--",
'description' => t('Send HTML e-mails using PHPMailer'),
);
return $info;
}
}
/**
* Settings form callback
*/
function messaging_phpmailer_settings_form($form_state) {
$form['messaging_phpmailer_smtp_server'] = array(
'#title' => t('SMTP server'),
'#type' => 'textfield',
'#default_value' => variable_get('messaging_phpmailer_smtp_server', ini_get('SMTP')),
);
$form['messaging_phpmailer_debug'] = array(
'#title' => t('Debug mode'),
'#type' => 'radios',
'#options' => array(
t('Disabled'),
t('Enabled'),
),
'#default_value' => variable_get('messaging_phpmailer_debug', 0),
'#description' => t('If enabled, PHPMailer debugging will be activated and all messages logged to watchdog.'),
);
return system_settings_form($form);
}
/**
* Implementation of hook_theme()
*/
function messaging_phpmailer_theme() {
return array(
'messaging_phpmailer' => array(
'arguments' => array(
'mail' => NULL,
),
),
);
}
/**
* Send mail message to user account. Supports bulk sending
*
* @param $destination
* Single email address
* @param $message
* Message array
*/
function messaging_phpmailer_send_msg($destination, $message, $params = array()) {
$mail = messaging_mail_prepare($destination, $message, $params);
return messaging_phpmailer_drupal_mail($mail);
}
/**
* Send a message via PHPMailer.
* This function mimics drupal_mail. We do not use drupal_mail instead because we want
* to be able to send mail with both PHPMailer and MIMEMail.
*/
function messaging_phpmailer_drupal_mail($message) {
include_once './' . drupal_get_path('module', 'messaging_phpmailer') . '/PHPMailer/class.phpmailer.php';
$mail = new PHPMailer();
$mail
->IsSMTP();
// telling the class to use SMTP
$mail->CharSet = 'utf-8';
$mail->ContentType = 'text/html';
$host = variable_get('messaging_phpmailer_smtp_server', ini_get('SMTP'));
if ($host) {
$mail->Host = $host;
// SMTP server
}
else {
watchdog('messaging', 'SMTP server cannot be reached.', array(), WATCHDOG_ERROR);
return FALSE;
}
// Theme the mail message
list($subject, $body) = theme('messaging_phpmailer', $message);
// Add some headers. Look for rfc2822 "From" formatting (ex: "name" <foo@bar.com>)
$from = array();
preg_match('/["\']?(?<name>.*)["\']? <(?<email>.*)>/', $message['headers']['From'], $from);
$mail->From = !empty($from['email']) ? $from['email'] : $message['headers']['From'];
$mail->FromName = !empty($from['name']) ? $from['name'] : '';
$mail
->AddAddress($message['to']);
if (!empty($message['headers']['Message-ID'])) {
$mail
->AddCustomHeader('Message-ID: ' . $message['headers']['Message-ID']);
}
if (!empty($message['headers']['Reply-To'])) {
$mail
->AddReplyTo($message['headers']['Reply-To']);
}
// Strip HTML out of $body for plaintext equivalent of HTML email.
$mail->AltBody = drupal_html_to_text($body);
// The subject has been already filtered by messaging module
$mail->Subject = $subject;
$mail->Body = str_replace("\r", '', $body);
// If enabled debug option, log everything...
if (variable_get('messaging_phpmailer_debug', 0)) {
$mail->SMTPDebug = TRUE;
watchdog('messaging', 'PHPMailer debug message: ' . $mail
->Send() . ' - ' . $mail->ErrorInfo);
}
else {
return $mail
->Send();
}
}
/**
* Default theme messaging_phpmailer
*/
function theme_messaging_phpmailer($mail) {
return array(
$mail['subject'],
$mail['body'],
);
}
Functions
Name | Description |
---|---|
messaging_phpmailer_drupal_mail | Send a message via PHPMailer. This function mimics drupal_mail. We do not use drupal_mail instead because we want to be able to send mail with both PHPMailer and MIMEMail. |
messaging_phpmailer_menu | Implementation of hook_menu(). |
messaging_phpmailer_messaging | Implementation of hook_messaging |
messaging_phpmailer_send_msg | Send mail message to user account. Supports bulk sending |
messaging_phpmailer_settings_form | Settings form callback |
messaging_phpmailer_theme | Implementation of hook_theme() |
theme_messaging_phpmailer | Default theme messaging_phpmailer |