Changeset 25361


Ignore:
Timestamp:
11/06/13 20:12:18 (6 years ago)
Author:
mistic100
Message:

feature 2995: New email template
add function get_clean_recipients_list() allowing big flexibility for recipients lists

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/functions_mail.inc.php

    r25360 r25361  
    114114  if (is_array($input)) 
    115115  { 
     116    if (!isset($input['name'])) 
     117    { 
     118      $input['name'] = ''; 
     119    } 
    116120    return $input; 
    117121  } 
     
    132136  } 
    133137} 
     138 
     139/** 
     140 * Return a clean array of hashmaps (email, name) from various inputs 
     141 * - comma separated list 
     142 * - array of emails 
     143 * - single hashmap (email[, name]) 
     144 * @since 2.6 
     145 * 
     146 * @param mixed $data 
     147 * @return string[][] 
     148 */ 
     149function get_clean_recipients_list($data) 
     150{ 
     151  if (empty($data)) 
     152  { 
     153    return array(); 
     154  } 
     155  else if (is_array($data)) 
     156  { 
     157    $values = array_values($data); 
     158    if (!is_array($values[0])) 
     159    { 
     160      $keys = array_keys($data); 
     161      if (is_int($keys[0])) 
     162      { // simple array of emails 
     163        foreach ($data as &$item) 
     164        { 
     165          $item = array( 
     166            'email' => $item, 
     167            'name' => '', 
     168            ); 
     169        } 
     170        unset($item); 
     171      } 
     172      else 
     173      { // hashmap of one recipient 
     174        $data = array(unformat_email($data)); 
     175      } 
     176    } 
     177    else 
     178    { // array of hashmaps 
     179      $data = array_map('unformat_email', $data); 
     180    } 
     181  } 
     182  else 
     183  { 
     184    $data = explode(',', $data); 
     185    $data = array_map('unformat_email', $data); 
     186  } 
    134187   
     188  return $data; 
     189} 
    135190 
    136191/** 
     
    155210  return implode(',', array_unique($result)); 
    156211} 
    157  
    158212 
    159213/** 
     
    494548  $mail = new PHPMailer; 
    495549 
    496   $recipients = !is_array($to) ? explode(',', $to) : $to; 
    497   foreach ($recipients as $recipient) 
    498   { 
    499     $recipient = unformat_email($recipient); 
     550  foreach (get_clean_recipients_list($to) as $recipient) 
     551  { 
    500552    $mail->addAddress($recipient['email'], $recipient['name']); 
    501553  } 
     
    532584  if (!empty($args['Cc'])) 
    533585  { 
    534     foreach ($args['Cc'] as $cc) 
    535     { 
    536       $cc = unformat_email($cc); 
    537       $mail->addCC($cc['email'], $cc['name']); 
     586    foreach (get_clean_recipients_list($args['Cc']) as $recipient) 
     587    { 
     588      $mail->addCC($recipient['email'], $recipient['name']); 
    538589    } 
    539590  } 
    540591 
    541592  // Bcc 
     593  $Bcc = get_clean_recipients_list(@$args['Bcc']); 
    542594  if ($conf_mail['send_bcc_mail_webmaster']) 
    543595  { 
    544     $args['Bcc'][] = get_webmaster_mail_address(); 
    545   } 
    546   if (!empty($args['Bcc'])) 
    547   { 
    548     foreach ($args['Bcc'] as $bcc) 
    549     { 
    550       $bcc = unformat_email($bcc); 
    551       $mail->addBCC($bcc['email'], $bcc['name']); 
     596    $Bcc[] = get_webmaster_mail_address(); 
     597  } 
     598  if (!empty($Bcc)) 
     599  { 
     600    foreach ($Bcc as $recipient) 
     601    { 
     602      $mail->addBCC($recipient['email'], $recipient['name']); 
    552603    } 
    553604  } 
Note: See TracChangeset for help on using the changeset viewer.