You are here

messaging_phpmailer.module in Messaging 6

HTML Mail using PHPMailer. Messaging method plug-in.

File

messaging_phpmailer/messaging_phpmailer.module
View 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

Namesort descending 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