| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 | 
							- <?php
 
- /**
 
-  * @file
 
-  * Implements Mandrill as a Drupal MailSystemInterface
 
-  */
 
- /**
 
-  * Modify the drupal mail system to use Mandrill when sending emails.
 
-  */
 
- class MandrillMailSystem implements MailSystemInterface {
 
-   /**
 
-    * Concatenate and wrap the email body for either plain-text or HTML emails.
 
-    *
 
-    * @param array $message
 
-    *   A message array, as described in hook_mail_alter().
 
-    *
 
-    * @return array
 
-    *   The formatted $message.
 
-    */
 
-   public function format(array $message) {
 
-     // Join the body array into one string.
 
-     if (is_array($message['body'])) {
 
-       $message['body'] = implode("\n\n", $message['body']);
 
-     }
 
-     return $message;
 
-   }
 
-   /**
 
-    * Send the email message.
 
-    *
 
-    * @see drupal_mail()
 
-    *
 
-    * @param array $message
 
-    *   A message array, as described in hook_mail_alter().
 
-    *
 
-    * @return bool
 
-    *   TRUE if the mail was successfully accepted, otherwise FALSE.
 
-    */
 
-   public function mail(array $message) {
 
-     // Optionally log mail keys not using Mandrill already. Helpful in
 
-     // configuring Mandrill.
 
-     if (variable_get('mandrill_log_defaulted_sends', FALSE)) {
 
-       $systems = mailsystem_get();
 
-       $registered = FALSE;
 
-       foreach ($systems as $key => $system) {
 
-         if ($message['id'] == $key) {
 
-           $registered = TRUE;
 
-         }
 
-         if (!$registered) {
 
-           watchdog(
 
-             'mandrill',
 
-             "Module: %module Key: %key invoked Mandrill to send email because Mandrill is configured as the default mail system. Specify alternate configuration for this module & key in !mailsystem if this is not desirable.",
 
-             array(
 
-               '%module' => $message['module'],
 
-               '%key' => $message['key'],
 
-               '!mailsystem' => l(t('Mail System'), 'admin/config/system/mailsystem'),
 
-             ),
 
-             WATCHDOG_INFO
 
-           );
 
-         }
 
-       }
 
-     }
 
-     $mailer = mandrill_get_api_object();
 
-     // Apply input format to body.
 
-     $format = variable_get('mandrill_filter_format', '');
 
-     if (!empty($format)) {
 
-       $message['body'] = check_markup($message['body'], $format);
 
-     }
 
-     // Extract an array of recipients.
 
-     $to = mandrill_get_to($message['to']);
 
-     // Prepare headers, defaulting the reply-to to the from address since
 
-     // Mandrill needs the from address to be configured separately.
 
-     // Note that only Reply-To and X-* headers are allowed.
 
-     $headers = isset($message['headers']) ? $message['headers'] : array();
 
-     if (!empty($message['from']) && empty($headers['Reply-To'])) {
 
-       $headers['Reply-To'] = $message['from'];
 
-     }
 
-     // Prepare attachments.
 
-     $attachments = array();
 
-     if (isset($message['attachments']) && !empty($message['attachments'])) {
 
-       foreach ($message['attachments'] as $attachment) {
 
-         if (is_file($attachment)) {
 
-           $attachments[] = $mailer->getAttachmentStruct($attachment);
 
-         }
 
-       }
 
-     }
 
-     // Determine if content should be available for this message.
 
-     $blacklisted_keys = explode(',', mandrill_mail_key_blacklist());
 
-     $view_content = TRUE;
 
-     foreach ($blacklisted_keys as $key) {
 
-       if ($message['id'] == drupal_strtolower(trim($key))) {
 
-         $view_content = FALSE;
 
-         break;
 
-       }
 
-     }
 
-     // The Mime Mail module (mimemail) expects attachments as an array of file
 
-     // arrays in $message['params']['attachments']. As many modules assume you
 
-     // will be using Mime Mail to handle attachments, we need to parse this
 
-     // array as well.
 
-     if (isset($message['params']['attachments']) && !empty($message['params']['attachments'])) {
 
-       foreach ($message['params']['attachments'] as $attachment) {
 
-         $attachment_path = drupal_realpath($attachment['uri']);
 
-         if (is_file($attachment_path)) {
 
-           $struct = $mailer->getAttachmentStruct($attachment_path);
 
-           // Allow for customised filenames.
 
-           if (!empty($attachment['filename'])) {
 
-             $struct['name'] = $attachment['filename'];
 
-           }
 
-           $attachments[] = $struct;
 
-         }
 
-       }
 
-       // Remove the file objects from $message['params']['attachments'].
 
-       // (This prevents double-attaching in the drupal_alter hook below.)
 
-       unset($message['params']['attachments']);
 
-     }
 
-     // Account for the plaintext parameter provided by the mimemail module.
 
-     $plain_text = empty($message['params']['plaintext']) ? drupal_html_to_text($message['body']) : $message['params']['plaintext'];
 
-     // Get metadata.
 
-     $metadata = isset($message['metadata']) ? $message['metadata'] : array();
 
-     $from = mandrill_from();
 
-     $mandrill_message = array(
 
-       'html' => $message['body'],
 
-       'text' => $plain_text,
 
-       'subject' => $message['subject'],
 
-       'from_email' => $from['email'],
 
-       'from_name' => $from['name'],
 
-       'to' => $to,
 
-       'headers' => $headers,
 
-       'track_opens' => variable_get('mandrill_track_opens', TRUE),
 
-       'track_clicks' => variable_get('mandrill_track_clicks', TRUE),
 
-       // We're handling this with drupal_html_to_text().
 
-       'auto_text' => FALSE,
 
-       'url_strip_qs' => variable_get('mandrill_url_strip_qs', FALSE),
 
-       'bcc_address' => isset($message['bcc_email']) ? $message['bcc_email'] : NULL,
 
-       'tags' => array($message['id']),
 
-       'google_analytics_domains' => (variable_get('mandrill_analytics_domains', NULL)) ? explode(',', variable_get('mandrill_analytics_domains')) : array(),
 
-       'google_analytics_campaign' => variable_get('mandrill_analytics_campaign', ''),
 
-       'attachments' => $attachments,
 
-       'view_content_link' => $view_content,
 
-       'metadata' => $metadata,
 
-     );
 
-     $subaccount = variable_get('mandrill_subaccount', FALSE);
 
-     if ($subaccount) {
 
-       $mandrill_message['subaccount'] = $subaccount;
 
-     }
 
-     // Allow other modules to alter the Mandrill message, and sender/args.
 
-     $mandrill_params = array(
 
-       'message' => $mandrill_message,
 
-       'function' => 'mandrill_sender_plain',
 
-       'args' => array(),
 
-     );
 
-     drupal_alter('mandrill_mail', $mandrill_params, $message);
 
-     // Queue for processing during cron or send immediately.
 
-     $status = NULL;
 
-     if (mandrill_process_async()) {
 
-       $queue = DrupalQueue::get(MANDRILL_QUEUE, TRUE);
 
-       $queue->createItem($mandrill_params);
 
-       if (variable_get('mandrill_batch_log_queued', TRUE)) {
 
-         watchdog('mandrill', 'Message from %from to %to queued for delivery.',
 
-           array(
 
-             '%from' => $from['email'],
 
-             '%to' => $to[0]['email'],
 
-           ), WATCHDOG_NOTICE);
 
-       }
 
-       return TRUE;
 
-     }
 
-     else {
 
-       return mandrill_mailsend($mandrill_params['message'], $mandrill_params['function'], $mandrill_params['args']);
 
-     }
 
-   }
 
- }
 
 
  |