| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391 | 
							- <?php
 
- /**
 
-  * @file
 
-  * Component module for sending Mime-encoded emails.
 
-  */
 
- /**
 
-  * Implements hook_menu().
 
-  */
 
- function mimemail_menu() {
 
-   $path = drupal_get_path('module', 'mimemail') . '/includes';
 
-   // Configuration links.
 
-   $items['admin/config/system/mimemail'] = array(
 
-     'title' => 'Mime Mail',
 
-     'description' => 'Manage mime mail system settings.',
 
-     'page callback' => 'drupal_get_form',
 
-     'page arguments' => array('mimemail_admin_settings'),
 
-     'access arguments' => array('administer site configuration'),
 
-     'file' => 'mimemail.admin.inc',
 
-     'file path' => $path,
 
-   );
 
-   $items['mimemail'] = array(
 
-     'page callback' => 'mimemail_post',
 
-     'access callback' => 'mimemail_incoming_access',
 
-     'type' => MENU_CALLBACK,
 
-     'file' => 'mimemail.incoming.inc',
 
-     'file path' => $path,
 
-   );
 
-   return $items;
 
- }
 
- /**
 
-  * Implements hook_permission().
 
-  */
 
- function mimemail_permission() {
 
-   return array(
 
-     'edit mimemail user settings' => array(
 
-       'title' => t('Edit Mime Mail user settings'),
 
-       'description' => t('Edit user specific settings for Mime Mail.'),
 
-     ),
 
-     'send arbitrary files' => array(
 
-       'title' => t('Send arbitrary files'),
 
-       'description' => t('Attach or embed files located outside the public files directory.'),
 
-       'restrict access' => TRUE,
 
-     ),
 
-   );
 
- }
 
- /**
 
-  * Access callback to process incoming messages.
 
-  */
 
- function mimemail_incoming_access() {
 
-   return variable_get('mimemail_incoming', FALSE);
 
- }
 
- /**
 
-  * Implements hook_field_extra_fields().
 
-  */
 
- function mimemail_field_extra_fields() {
 
-   $extra['user']['user'] = array(
 
-     'form' => array(
 
-       'mimemail' => array(
 
-         'label' => t('Email'),
 
-         'description' => t('Mime Mail module settings form elements.'),
 
-         'weight' => 0,
 
-       ),
 
-     ),
 
-     'display' => array(
 
-       'mimemail' => array(
 
-         'label' => t('Email'),
 
-         'description' => t('Mime Mail module settings form elements.'),
 
-         'weight' => 0,
 
-       ),
 
-     ),
 
-   );
 
-   return $extra;
 
- }
 
- /**
 
-  * Implements hook_user_view().
 
-  */
 
- function mimemail_user_view($account, $view_mode, $langcode) {
 
-   $account->content['mimemail'] = array(
 
-     '#type' => 'user_profile_category',
 
-     '#title' => t('Email'),
 
-   );
 
-   $account->content['mimemail']['textonly'] = array(
 
-     '#type' => 'user_profile_item',
 
-     '#title' => t('Plaintext email only'),
 
-     '#markup' => empty($account->data['mimemail_textonly']) ? t('No') : t('Yes'),
 
-   );
 
- }
 
- /**
 
-  * Implements hook_form_FORM_ID_alter().
 
-  *
 
-  * Adds the Mime Mail settings on the user settings page.
 
-  */
 
- function mimemail_form_user_profile_form_alter(&$form, &$form_state) {
 
-   if ($form['#user_category'] == 'account') {
 
-     $account = $form['#user'];
 
-     $form['mimemail'] = array(
 
-       '#type' => 'fieldset',
 
-       '#title' => t('Email settings'),
 
-       '#weight' => 5,
 
-       '#collapsible' => TRUE,
 
-       '#access' => user_access('edit mimemail user settings'),
 
-     );
 
-     $form['mimemail']['mimemail_textonly'] = array(
 
-       '#type' => 'checkbox',
 
-       '#title' => t('Plaintext email only'),
 
-       '#default_value' => !empty($account->data['mimemail_textonly']) ? $account->data['mimemail_textonly'] : FALSE,
 
-       '#description' => t('Check this option if you do not wish to receive email messages with graphics and styles.'),
 
-     );
 
-   }
 
- }
 
- /**
 
-  * Implements hook_user_presave().
 
-  */
 
- function mimemail_user_presave(&$edit, $account, $category) {
 
-   $edit['data']['mimemail_textonly'] = isset($edit['mimemail_textonly']) ? $edit['mimemail_textonly'] : 0;
 
- }
 
- /**
 
-  * Implements hook_theme().
 
-  */
 
- function mimemail_theme() {
 
-   module_load_include('inc', 'mimemail', 'theme/mimemail.theme');
 
-   return mimemail_theme_theme();
 
- }
 
- /**
 
-  * Implements hook_mail().
 
-  */
 
- function mimemail_mail($key, &$message, $params) {
 
-   $context = $params['context'];
 
-   $options = array('clear' => TRUE);
 
-   // Prepare the array of the attachments.
 
-   $attachments = array();
 
-   $attachments_string = trim($params['attachments']);
 
-   if (!empty($attachments_string)) {
 
-     $attachment_lines = array_filter(explode("\n", trim($attachments_string)));
 
-     foreach ($attachment_lines as $filepath) {
 
-       $attachments[] = array(
 
-         'filepath' => trim($filepath),
 
-       );
 
-     }
 
-   }
 
-   // We handle different address headers if set.
 
-   $address_headers = array(
 
-     'cc' => 'Cc',
 
-     'bcc' => 'Bcc',
 
-     'reply-to' => 'Reply-to',
 
-   );
 
-   foreach ($address_headers as $param_key => $address_header) {
 
-     $params[$param_key] = empty($params[$param_key]) ? array() : explode(',', $params[$param_key]);
 
-     if (!empty($params[$param_key])) {
 
-       foreach ($params[$param_key] as $key => $address) {
 
-         $params[$param_key][$key] = token_replace($address, $context, $options);
 
-       }
 
-       $message['headers'][$address_header] = implode(',', $params[$param_key]);
 
-     }
 
-   }
 
-   $message['to'] = token_replace($message['to'], $context, $options);
 
-   $message['subject'] = token_replace($context['subject'], $context, $options);
 
-   $message['body'][] = token_replace($context['body'], $context, $options);
 
-   $message['params']['plaintext'] = token_replace($params['plaintext'], $context, $options);
 
-   $message['params']['attachments'] = $attachments;
 
- }
 
- /**
 
-  * Retreives a list of all available mailer engines.
 
-  *
 
-  * @return array
 
-  *   Mailer engine names.
 
-  */
 
- function mimemail_get_engines() {
 
-   $engines = array();
 
-   foreach (module_implements('mailengine') as $module) {
 
-     $engines[$module] = module_invoke($module, 'mailengine', 'list');
 
-   }
 
-   return $engines;
 
- }
 
- /**
 
-  * Implements hook_mailengine().
 
-  *
 
-  * @param string $op
 
-  *   The operation to perform on the message.
 
-  * @param array $message
 
-  *   The message to perform the operation on.
 
-  *
 
-  * @return boolean
 
-  *   Returns TRUE if the operation was successful or FALSE if it was not.
 
-  */
 
- function mimemail_mailengine($op, $message = array()) {
 
-   module_load_include('inc', 'mimemail');
 
-   switch ($op) {
 
-     case 'list':
 
-       $engine = array(
 
-         'name' => t('Mime Mail'),
 
-         'description' => t("Default mailing engine."),
 
-       );
 
-       return $engine;
 
-     case 'settings':
 
-       // Not implemented.
 
-       break;
 
-     case 'multiple':
 
-     case 'single':
 
-     case 'send':
 
-       // Default values.
 
-       $default = array(
 
-         'to' => '',
 
-         'subject' => '',
 
-         'body' => '',
 
-         'from' => '',
 
-         'headers' => ''
 
-       );
 
-       $message = array_merge($default, $message);
 
-       // If 'Return-Path' isn't already set in php.ini, we pass it separately
 
-       // as an additional parameter instead of in the header.
 
-       // However, if PHP's 'safe_mode' is on, this is not allowed.
 
-       if (isset($message['headers']['Return-Path']) && !ini_get('safe_mode')) {
 
-         $return_path_set = strpos(ini_get('sendmail_path'), ' -f');
 
-         if (!$return_path_set) {
 
-           $return_path = trim($message['headers']['Return-Path'], '<>');
 
-           unset($message['headers']['Return-Path']);
 
-         }
 
-       }
 
-       $crlf = variable_get('mimemail_crlf', MAIL_LINE_ENDINGS);
 
-       $recipients = (!is_array($message['to'])) ? array($message['to']) : $message['to'];
 
-       $subject = mime_header_encode($message['subject']);
 
-       $body = preg_replace('@\r?\n@', $crlf, $message['body']);
 
-       $headers = mimemail_rfc_headers($message['headers']);
 
-       $result = TRUE;
 
-       foreach ($recipients as $to) {
 
-         if (isset($return_path) && !empty($return_path)) {
 
-           if (isset($_SERVER['WINDIR']) || strpos($_SERVER['SERVER_SOFTWARE'], 'Win32') !== FALSE) {
 
-             // On Windows, PHP will use the value of sendmail_from for the
 
-             // Return-Path header.
 
-             $old_from = ini_get('sendmail_from');
 
-             ini_set('sendmail_from', $return_path);
 
-             $result = @mail($to, $subject, $body, $headers) && $result;
 
-             ini_set('sendmail_from', $old_from);
 
-           }
 
-           else {
 
-             // On most non-Windows systems, the "-f" option to the sendmail command
 
-             // is used to set the Return-Path.
 
-             $result = @mail($to, $subject, $body, $headers, '-f' . $return_path) && $result;
 
-           }
 
-         }
 
-         else {
 
-           // The optional $additional_parameters argument to mail() is not allowed
 
-           // if safe_mode is enabled. Passing any value throws a PHP warning and
 
-           // makes mail() return FALSE.
 
-           $result = @mail($to, $subject, $body, $headers) && $result;
 
-         }
 
-       }
 
-       return $result;
 
-   }
 
-   return FALSE;
 
- }
 
- /**
 
-  * Prepares the message for sending.
 
-  *
 
-  * @param array $message
 
-  *   An array containing the message data. The optional parameters are:
 
-  *   - plain: Whether to send the message as plaintext only or HTML. If evaluates to TRUE,
 
-  *     then the message will be sent as plaintext.
 
-  *   - plaintext: Optional plaintext portion of a multipart email.
 
-  *   - attachments: An array of arrays which describe one or more attachments.
 
-  *     Existing files can be added by path, dinamically-generated files
 
-  *     can be added by content. The internal array contains the following elements:
 
-  *      - filepath: Relative Drupal path to an existing file (filecontent is NULL).
 
-  *      - filecontent: The actual content of the file (filepath is NULL).
 
-  *      - filename: The filename of the file.
 
-  *      - filemime: The MIME type of the file.
 
-  *      The array of arrays looks something like this:
 
-  *      Array
 
-  *      (
 
-  *        [0] => Array
 
-  *        (
 
-  *         [filepath] => '/sites/default/files/attachment.txt'
 
-  *         [filecontent] => 'My attachment.'
 
-  *         [filename] => 'attachment.txt'
 
-  *         [filemime] => 'text/plain'
 
-  *        )
 
-  *      )
 
-  *
 
-  * @return array
 
-  *   All details of the message.
 
-  */
 
- function mimemail_prepare_message($message) {
 
-   module_load_include('inc', 'mimemail');
 
-   $module = $message['module'];
 
-   $key = $message['key'];
 
-   $to = $message['to'];
 
-   $from = $message['from'];
 
-   $subject = $message['subject'];
 
-   $body = $message['body'];
 
-   $headers = isset($message['params']['headers']) ? $message['params']['headers'] : array();
 
-   $plain = isset($message['params']['plain']) ? $message['params']['plain'] : NULL;
 
-   $plaintext = isset($message['params']['plaintext']) ? $message['params']['plaintext'] : NULL;
 
-   $attachments = isset($message['params']['attachments']) ? $message['params']['attachments'] : array();
 
-   $site_name = variable_get('site_name', 'Drupal');
 
-   $site_mail = variable_get('site_mail', ini_get('sendmail_from'));
 
-   $simple_address = variable_get('mimemail_simple_address', 0);
 
-   // Override site mails default sender when using default engine.
 
-   if ((empty($from) || $from == $site_mail)
 
-       && variable_get('mimemail_engine', 'mimemail') == 'mimemail') {
 
-     $mimemail_name = variable_get('mimemail_name', $site_name);
 
-     $mimemail_mail = variable_get('mimemail_mail', $site_mail);
 
-     $from = array(
 
-       'name' => !empty($mimemail_name) ? $mimemail_name : $site_name,
 
-       'mail' => !empty($mimemail_mail) ? $mimemail_mail : $site_mail,
 
-     );
 
-   }
 
-   // Body is empty, this is a plaintext message.
 
-   if (empty($body)) {
 
-     $plain = TRUE;
 
-   }
 
-   // Try to determine recipient's text mail preference.
 
-   elseif (is_null($plain)) {
 
-     if (is_object($to) && isset($to->data['mimemail_textonly'])) {
 
-       $plain = $to->data['mimemail_textonly'];
 
-     }
 
-     elseif (is_string($to) && valid_email_address($to)) {
 
-       if (is_object($account = user_load_by_mail($to)) && isset($account->data['mimemail_textonly'])) {
 
-         $plain = $account->data['mimemail_textonly'];
 
-         // Might as well pass the user object to the address function.
 
-         $to = $account;
 
-       }
 
-     }
 
-   }
 
-   // Removing newline character introduced by _drupal_wrap_mail_line();
 
-   $subject = str_replace(array("\n"), '', trim(drupal_html_to_text($subject)));
 
-   $hook = array(
 
-     'mimemail_message__' . $key,
 
-     'mimemail_message__' . $module .'__'. $key,
 
-   );
 
-   $variables = array(
 
-     'module' => $module,
 
-     'key' => $key,
 
-     'recipient' => $to,
 
-     'subject' => $subject,
 
-     'body' => $body
 
-   );
 
-   $body = theme($hook, $variables);
 
-   foreach (module_implements('mail_post_process') as $module) {
 
-     $function = $module . '_mail_post_process';
 
-     $function($body, $key);
 
-   }
 
-   $plain = $plain || variable_get('mimemail_textonly', 0);
 
-   $from = mimemail_address($from);
 
-   $mail = mimemail_html_body($body, $subject, $plain, $plaintext, $attachments);
 
-   $headers = array_merge($message['headers'], $headers, $mail['headers']);
 
-   $message['to'] = mimemail_address($to, $simple_address);
 
-   $message['from'] = $from;
 
-   $message['subject'] = $subject;
 
-   $message['body'] = $mail['body'];
 
-   $message['headers'] = mimemail_headers($headers, $from);
 
-   return $message;
 
- }
 
 
  |