source: trunk/include/functions_mail.inc.php @ 4304

Last change on this file since 4304 was 4304, checked in by Eric, 14 years ago

Escape all login and username characters in database
Display correctly usernames

(I hope not to have made mistakes)

  • Property svn:eol-style set to LF
File size: 22.4 KB
Line 
1<?php
2// +-----------------------------------------------------------------------+
3// | Piwigo - a PHP based picture gallery                                  |
4// +-----------------------------------------------------------------------+
5// | Copyright(C) 2008-2009 Piwigo Team                  http://piwigo.org |
6// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
7// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
8// +-----------------------------------------------------------------------+
9// | This program is free software; you can redistribute it and/or modify  |
10// | it under the terms of the GNU General Public License as published by  |
11// | the Free Software Foundation                                          |
12// |                                                                       |
13// | This program is distributed in the hope that it will be useful, but   |
14// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
15// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
16// | General Public License for more details.                              |
17// |                                                                       |
18// | You should have received a copy of the GNU General Public License     |
19// | along with this program; if not, write to the Free Software           |
20// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
21// | USA.                                                                  |
22// +-----------------------------------------------------------------------+
23
24// +-----------------------------------------------------------------------+
25// |                               functions                               |
26// +-----------------------------------------------------------------------+
27
28
29/**
30 * Encodes a string using Q form if required (RFC2045)
31 * mail headers MUST contain only US-ASCII characters
32 */
33function encode_mime_header($str)
34{
35  $x = preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
36  if ($x==0)
37  {
38    return $str;
39  }
40  // Replace every high ascii, control =, ? and _ characters
41  $str = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e',
42                  "'='.sprintf('%02X', ord('\\1'))", $str);
43
44  // Replace every spaces to _ (more readable than =20)
45  $str = str_replace(" ", "_", $str);
46
47  global $lang_info;
48  return '=?'.get_pwg_charset().'?Q?'.$str.'?=';
49}
50
51/*
52 * Returns the name of the mail sender :
53 *
54 * @return string
55 */
56function get_mail_sender_name()
57{
58  global $conf;
59
60  return (empty($conf['mail_sender_name']) ? $conf['gallery_title'] : $conf['mail_sender_name']);
61}
62
63/*
64 * Returns an array of mail configuration parameters :
65 *
66 * - mail_options: see $conf['mail_options']
67 * - send_bcc_mail_webmaster: see $conf['send_bcc_mail_webmaster']
68 * - email_webmaster: mail corresponding to $conf['webmaster_id']
69 * - formated_email_webmaster: the name of webmaster is $conf['gallery_title']
70 * - text_footer: Piwigo and version
71 *
72 * @return array
73 */
74function get_mail_configuration()
75{
76  global $conf;
77
78  $conf_mail = array(
79    'mail_options' => $conf['mail_options'],
80    'send_bcc_mail_webmaster' => $conf['send_bcc_mail_webmaster'],
81    'default_email_format' => $conf['default_email_format'],
82    'alternative_email_format' => $conf['alternative_email_format'],
83    'use_smtp' => !empty($conf['smtp_host']),
84    'smtp_host' => $conf['smtp_host'],
85    'smtp_user' => $conf['smtp_user'],
86    'smtp_password' => $conf['smtp_password']
87    );
88
89  // we have webmaster id among user list, what's his email address ?
90  $conf_mail['email_webmaster'] = get_webmaster_mail_address();
91
92  // name of the webmaster is the title of the gallery
93  $conf_mail['formated_email_webmaster'] =
94    format_email(get_mail_sender_name(), $conf_mail['email_webmaster']);
95
96  $conf_mail['boundary_key'] = generate_key(32);
97
98  return $conf_mail;
99}
100
101/**
102 * Returns an email address with an associated real name
103 *
104 * @param string name
105 * @param string email
106 */
107function format_email($name, $email)
108{
109  // Spring cleaning
110  $cvt_email = trim(preg_replace('#[\n\r]+#s', '', $email));
111  $cvt_name = trim(preg_replace('#[\n\r]+#s', '', $name));
112
113  if ($cvt_name!="")
114  {
115    $cvt_name = encode_mime_header(
116              '"'
117              .addcslashes($cvt_name,'"')
118              .'"');
119    $cvt_name .= ' ';
120  }
121
122  if (strpos($cvt_email, '<') === false)
123  {
124    return $cvt_name.'<'.$cvt_email.'>';
125  }
126  else
127  {
128    return $cvt_name.$cvt_email;
129  }
130}
131
132/**
133 * Returns an email address list with minimal email string
134 *
135 * @param string with email list (email separated by comma)
136 */
137function get_strict_email_list($email_list)
138{
139  $result = array();
140  $list = explode(',', $email_list);
141  foreach ($list as $email)
142  {
143    if (strpos($email, '<') !== false)
144    {
145       $email = preg_replace('/.*<(.*)>.*/i', '$1', $email);
146    }
147    $result[] = trim($email);
148  }
149
150  return implode(',', $result);
151}
152
153/**
154 * Returns an completed array template/theme
155 * completed with get_default_template()
156 *
157 * @params:
158 *   - args: incompleted array of template/theme
159 *       o template: template to use [default get_default_template()]
160 *       o theme: template to use [default get_default_template()]
161 */
162function get_array_template_theme($args = array())
163{
164  global $conf;
165
166  $res = array();
167
168  if (empty($args['template']) or empty($args['theme']))
169  {
170    list($res['template'], $res['theme']) = explode('/', get_default_template());
171  }
172
173  if (!empty($args['template']))
174  {
175    $res['template'] = $args['template'];
176  }
177
178  if (!empty($args['theme']))
179  {
180    $res['theme'] = $args['theme'];
181  }
182
183  return $res;
184}
185
186/**
187 * Return an new mail template
188 *
189 * @params:
190 *   - email_format: mail format
191 *   - args: function params of mail function:
192 *       o template: template to use [default get_default_template()]
193 *       o theme: template to use [default get_default_template()]
194 */
195function & get_mail_template($email_format, $args = array())
196{
197  $args = get_array_template_theme($args);
198
199  $mail_template = new Template(PHPWG_ROOT_PATH.'template/'.$args['template'], $args['theme']);
200  $mail_template->set_template_dir(PHPWG_ROOT_PATH.'template/'.$args['template'].'/mail/'.$email_format);
201  return $mail_template;
202}
203
204/**
205 * Return string email format (html or not)
206 *
207 * @param string format
208 */
209function get_str_email_format($is_html)
210{
211  return ($is_html ? 'text/html' : 'text/plain');
212}
213
214/*
215 * Switch language to param language
216 * All entries are push on language stack
217 *
218 * @param string language
219 */
220function switch_lang_to($language)
221{
222  global $switch_lang, $user, $lang, $lang_info;
223
224  if (count($switch_lang['stack']) == 0)
225  {
226    $prev_language = $user['language'];
227  }
228  else
229  {
230    $prev_language = end($switch_lang['stack']);
231  }
232
233  $switch_lang['stack'][] = $language;
234
235  if ($prev_language != $language)
236  {
237    if (!isset($switch_lang['language'][$prev_language]))
238    {
239      $switch_lang[$prev_language]['lang_info'] = $lang_info;
240      $switch_lang[$prev_language]['lang'] = $lang;
241    }
242
243    if (!isset($switch_lang['language'][$language]))
244    {
245      // Re-Init language arrays
246      $lang_info = array();
247      $lang  = array();
248
249      // language files
250      load_language('common.lang', '', array('language'=>$language) );
251      // No test admin because script is checked admin (user selected no)
252      // Translations are in admin file too
253      load_language('admin.lang', '', array('language'=>$language) );
254      trigger_action('loading_lang');
255      load_language('local.lang', '', array('language'=>$language, 'no_fallback'=>true));
256
257      $switch_lang[$language]['lang_info'] = $lang_info;
258      $switch_lang[$language]['lang'] = $lang;
259    }
260    else
261    {
262      $lang_info = $switch_lang[$language]['lang_info'];
263      $lang = $switch_lang[$language]['lang'];
264    }
265
266    $user['language'] = $language;
267  }
268}
269
270/*
271 * Switch back language pushed with switch_lang_to function
272 *
273 * @param: none
274 */
275function switch_lang_back()
276{
277  global $switch_lang, $user, $lang, $lang_info;
278
279  $last_language = array_pop($switch_lang['stack']);
280
281  if (count($switch_lang['stack']) > 0)
282  {
283    $language = end($switch_lang['stack']);
284  }
285  else
286  {
287    $language = $user['language'];
288  }
289
290  if ($last_language != $language)
291  {
292    if (!isset($switch_lang['language'][$language]))
293    {
294      $lang_info = $switch_lang[$language]['lang_info'];
295      $lang = $switch_lang[$language]['lang'];
296    }
297    $user['language'] = $language;
298  }
299}
300
301/**
302 * Returns email of all administrator
303 *
304 * @return string
305 */
306/*
307 * send en notification email to all administrators
308 * if a administrator is doing action,
309 * he's be removed to email list
310 *
311 * @param:
312 *   - keyargs_subject: mail subject on l10n_args format
313 *   - keyargs_content: mail content on l10n_args format
314 *
315 * @return boolean (Ok or not)
316 */
317function pwg_mail_notification_admins($keyargs_subject, $keyargs_content)
318{
319  // Check arguments
320  if
321    (
322      empty($keyargs_subject) or
323      empty($keyargs_content)
324    )
325  {
326    return false;
327  }
328
329  global $conf, $user;
330  $return = true;
331
332  $admins = array();
333
334  $query = '
335select
336  U.'.$conf['user_fields']['username'].' as username,
337  U.'.$conf['user_fields']['email'].' as mail_address
338from
339  '.USERS_TABLE.' as U,
340  '.USER_INFOS_TABLE.' as I
341where
342  I.user_id =  U.'.$conf['user_fields']['id'].' and
343  I.status in (\'webmaster\',  \'admin\') and
344  I.adviser = \'false\' and
345  '.$conf['user_fields']['email'].' is not null and
346  I.user_id <> '.$user['id'].'
347order by
348  username
349';
350
351  $datas = pwg_query($query);
352  if (!empty($datas))
353  {
354    while ($admin = mysql_fetch_assoc($datas))
355    {
356      if (!empty($admin['mail_address']))
357      {
358        array_push($admins, format_email($admin['username'], $admin['mail_address']));
359      }
360    }
361  }
362
363  if (count($admins) > 0)
364  {
365    $keyargs_content_admin_info = array
366    (
367      get_l10n_args('Connected user: %s', stripslashes($user['username'])),
368      get_l10n_args('IP: %s', $_SERVER['REMOTE_ADDR']),
369      get_l10n_args('Browser: %s', $_SERVER['HTTP_USER_AGENT'])
370    );
371
372    switch_lang_to(get_default_language());
373
374    $return = pwg_mail
375    (
376      '',
377      array
378      (
379        'Bcc' => $admins,
380        'subject' => '['.$conf['gallery_title'].'] '.l10n_args($keyargs_subject),
381        'content' =>
382           l10n_args($keyargs_content)."\n\n"
383          .l10n_args($keyargs_content_admin_info)."\n",
384        'content_format' => 'text/plain'
385      )
386    ) and $return;
387
388    switch_lang_back();
389  }
390
391  return $return;
392}
393
394/*
395 * send en email to user's group
396 *
397 * @param:
398 *   - group_id: mail are sent to group with this Id
399 *   - email_format: mail format
400 *   - keyargs_subject: mail subject on l10n_args format
401 *   - dirname: short name of directory including template
402 *   - tpl_shortname: short template name without extension
403 *   - assign_vars: array used to assign_vars to mail template
404 *   - language_selected: send mail only to user with this selected language
405 *
406 * @return boolean (Ok or not)
407 */
408function pwg_mail_group(
409  $group_id, $email_format, $keyargs_subject,
410  $tpl_shortname,
411  $assign_vars = array(), $language_selected = '')
412{
413  // Check arguments
414  if
415    (
416      empty($group_id) or
417      empty($email_format) or
418      empty($keyargs_subject) or
419      empty($tpl_shortname)
420    )
421  {
422    return false;
423  }
424
425  global $conf;
426  $return = true;
427
428  $query = '
429SELECT
430  distinct language, template
431FROM
432  '.USER_GROUP_TABLE.' as ug
433  INNER JOIN '.USERS_TABLE.' as u  ON '.$conf['user_fields']['id'].' = ug.user_id
434  INNER JOIN '.USER_INFOS_TABLE.' as ui  ON ui.user_id = ug.user_id
435WHERE
436        '.$conf['user_fields']['email'].' IS NOT NULL
437    AND group_id = '.$group_id;
438
439  if (!empty($language_selected))
440  {
441    $query .= '
442    AND language = \''.$language_selected.'\'';
443  }
444
445    $query .= '
446;';
447
448  $result = pwg_query($query);
449
450  if (mysql_num_rows($result) > 0)
451  {
452    $list = array();
453    while ($row = mysql_fetch_assoc($result))
454    {
455      $row['template_theme'] = $row['template'];
456      list($row['template'], $row['theme']) = explode('/', $row['template_theme']);
457      $list[] = $row;
458    }
459
460    foreach ($list as $elem)
461    {
462      $query = '
463SELECT
464  u.'.$conf['user_fields']['username'].' as username,
465  u.'.$conf['user_fields']['email'].' as mail_address
466FROM
467  '.USER_GROUP_TABLE.' as ug
468  INNER JOIN '.USERS_TABLE.' as u  ON '.$conf['user_fields']['id'].' = ug.user_id
469  INNER JOIN '.USER_INFOS_TABLE.' as ui  ON ui.user_id = ug.user_id
470WHERE
471        '.$conf['user_fields']['email'].' IS NOT NULL
472    AND group_id = '.$group_id.'
473    AND language = \''.$elem['language'].'\'
474    AND template = \''.$elem['template_theme'].'\'
475;';
476
477      $result = pwg_query($query);
478
479      if (mysql_num_rows($result) > 0)
480      {
481        $Bcc = array();
482        while ($row = mysql_fetch_assoc($result))
483        {
484          if (!empty($row['mail_address']))
485          {
486            array_push($Bcc, format_email(stripslashes($row['username']), $row['mail_address']));
487          }
488        }
489
490        if (count($Bcc) > 0)
491        {
492          switch_lang_to($elem['language']);
493
494          $mail_template = get_mail_template($email_format, $elem);
495          $mail_template->set_filename($tpl_shortname, $tpl_shortname.'.tpl');
496
497          $mail_template->assign(
498            trigger_event('mail_group_assign_vars', $assign_vars));
499
500          $return = pwg_mail
501          (
502            '',
503            array
504            (
505              'Bcc' => $Bcc,
506              'subject' => l10n_args($keyargs_subject),
507              'email_format' => $email_format,
508              'content' => $mail_template->parse($tpl_shortname, true),
509              'content_format' => $email_format,
510              'template' => $elem['template'],
511              'theme' => $elem['theme']
512            )
513          ) and $return;
514
515          switch_lang_back();
516        }
517      }
518    }
519  }
520
521  return $return;
522}
523
524/*
525 * sends an email, using Piwigo specific informations
526 *
527 * @param:
528 *   - to: receiver(s) of the mail (list separated by comma).
529 *   - args: function params of mail function:
530 *       o from: sender [default value webmaster email]
531 *       o Cc: array of carbon copy receivers of the mail. [default value empty]
532 *       o Bcc: array of blind carbon copy receivers of the mail. [default value empty]
533 *       o subject  [default value 'Piwigo']
534 *       o content: content of mail    [default value '']
535 *       o content_format: format of mail content  [default value 'text/plain']
536 *       o email_format: global mail format  [default value $conf_mail['default_email_format']]
537 *       o template: template to use [default get_default_template()]
538 *       o theme: template to use [default get_default_template()]
539 *
540 * @return boolean (Ok or not)
541 */
542function pwg_mail($to, $args = array())
543{
544  global $conf, $conf_mail, $lang_info, $page;
545
546  if (empty($to) and empty($args['Cc']) and empty($args['Bcc']))
547  {
548    return true;
549  }
550
551  if (!isset($conf_mail))
552  {
553    $conf_mail = get_mail_configuration();
554  }
555
556  if (empty($args['email_format']))
557  {
558    $args['email_format'] = $conf_mail['default_email_format'];
559  }
560
561  // Compute root_path in order have complete path
562  set_make_full_url();
563
564  if (empty($args['from']))
565  {
566    $args['from'] = $conf_mail['formated_email_webmaster'];
567  }
568  else
569  {
570    $args['from'] = format_email('', $args['from']);
571  }
572
573  if (empty($args['subject']))
574  {
575    $args['subject'] = 'Piwigo';
576  }
577  // Spring cleaning
578  $cvt_subject = trim(preg_replace('#[\n\r]+#s', '', $args['subject']));
579  // Ascii convertion
580  $cvt_subject = encode_mime_header($cvt_subject);
581
582  if (!isset($args['content']))
583  {
584    $args['content'] = '';
585  }
586
587  if (empty($args['content_format']))
588  {
589    $args['content_format'] = 'text/plain';
590  }
591
592  if ($conf_mail['send_bcc_mail_webmaster'])
593  {
594    $args['Bcc'][] = $conf_mail['formated_email_webmaster'];
595  }
596
597  $args = array_merge($args, get_array_template_theme($args));
598
599  $headers = 'From: '.$args['from']."\n";
600  $headers.= 'Reply-To: '.$args['from']."\n";
601
602  if (!empty($args['Cc']))
603  {
604    $headers.= 'Cc: '.implode(',', $args['Cc'])."\n";
605  }
606
607  if (!empty($args['Bcc']))
608  {
609    $headers.= 'Bcc: '.implode(',', $args['Bcc'])."\n";
610  }
611
612  $headers.= 'Content-Type: multipart/alternative;'."\n";
613  $headers.= '  boundary="---='.$conf_mail['boundary_key'].'";'."\n";
614  $headers.= '  reply-type=original'."\n";
615  $headers.= 'MIME-Version: 1.0'."\n";
616  $headers.= 'X-Mailer: Piwigo Mailer'."\n";
617
618  // List on content-type
619  $content_type_list[] = $args['email_format'];
620  if (!empty($conf_mail['alternative_email_format']))
621  {
622    $content_type_list[] = $conf_mail['alternative_email_format'];
623  }
624
625  $content = '';
626
627  foreach (array_unique($content_type_list) as $content_type)
628  {
629    // key compose of indexes witch allow ti cache mail data
630    $cache_key = $content_type.'-'.$lang_info['code'].'-'.$args['template'].'-'.$args['theme'];
631
632    if (!isset($conf_mail[$cache_key]))
633    {
634      if (!isset($conf_mail[$cache_key]['template']))
635      {
636        $conf_mail[$cache_key]['template'] = get_mail_template($content_type);
637      }
638
639      $conf_mail[$cache_key]['template']->set_filename('mail_header', 'header.tpl');
640      $conf_mail[$cache_key]['template']->set_filename('mail_footer', 'footer.tpl');
641
642      $conf_mail[$cache_key]['template']->assign(
643        array(
644          //Header
645          'BOUNDARY_KEY' => $conf_mail['boundary_key'],
646          'CONTENT_TYPE' => $content_type,
647          'CONTENT_ENCODING' => get_pwg_charset(),
648
649          // Footer
650          'GALLERY_URL' =>
651            isset($page['gallery_url']) ?
652                  $page['gallery_url'] : $conf['gallery_url'],
653          'GALLERY_TITLE' =>
654            isset($page['gallery_title']) ?
655                  $page['gallery_title'] : $conf['gallery_title'],
656          'VERSION' => $conf['show_version'] ? PHPWG_VERSION : '',
657          'PHPWG_URL' => PHPWG_URL,
658
659          'TITLE_MAIL' => urlencode(l10n('title_send_mail')),
660          'MAIL' => get_webmaster_mail_address()
661          ));
662
663      if ($content_type == 'text/html')
664      {
665        if (is_file($conf_mail[$cache_key]['template']->get_template_dir().'/global-mail-css.tpl'))
666        {
667          $conf_mail[$cache_key]['template']->set_filename('css', 'global-mail-css.tpl');
668          $conf_mail[$cache_key]['template']->assign_var_from_handle('GLOBAL_MAIL_CSS', 'css');
669        }
670
671        $root_abs_path = dirname(dirname(__FILE__));
672
673        $file = $root_abs_path.'/template/'.$args['template'].'/theme/'.$args['theme'].'/mail-css.tpl';
674        if (is_file($file))
675        {
676          $conf_mail[$cache_key]['template']->set_filename('css', $file);
677          $conf_mail[$cache_key]['template']->assign_var_from_handle('MAIL_CSS', 'css');
678        }
679
680        $file = $root_abs_path.'/template-common/local-mail-css.tpl';
681        if (is_file($file))
682        {
683          $conf_mail[$cache_key]['template']->set_filename('css', $file);
684          $conf_mail[$cache_key]['template']->assign_var_from_handle('LOCAL_MAIL_CSS', 'css');
685        }
686      }
687
688      // what are displayed on the header of each mail ?
689      $conf_mail[$cache_key]['header'] =
690        $conf_mail[$cache_key]['template']->parse('mail_header', true);
691
692      // what are displayed on the footer of each mail ?
693      $conf_mail[$cache_key]['footer'] =
694        $conf_mail[$cache_key]['template']->parse('mail_footer', true);
695    }
696
697    // Header
698    $content.= $conf_mail[$cache_key]['header'];
699
700    // Content
701    if (($args['content_format'] == 'text/plain') and ($content_type == 'text/html'))
702    {
703      $content.= '<p>'.
704                  nl2br(
705                    preg_replace("/(http:\/\/)([^\s,]*)/i",
706                                 "<a href='$1$2' class='thumblnk'>$1$2</a>",
707                                 htmlspecialchars($args['content']))).
708                  '</p>';
709    }
710    else if (($args['content_format'] == 'text/html') and ($content_type == 'text/plain'))
711    {
712      // convert html text to plain text
713      $content.= strip_tags($args['content']);
714    }
715    else
716    {
717      $content.= $args['content'];
718    }
719
720    // Footer
721    $content.= $conf_mail[$cache_key]['footer'];
722
723  // Close boundary
724  $content.= "\n".'-----='.$conf_mail['boundary_key'].'--'."\n";
725  }
726
727
728  //~ // Close boundary
729  //~ $content.= "\n".'-----='.$conf_mail['boundary_key'].'--'."\n";
730
731   // Undo Compute root_path in order have complete path
732  unset_make_full_url();
733
734  return
735    trigger_event('send_mail',
736      false, /* Result */
737      trigger_event('send_mail_to', get_strict_email_list($to)),
738      trigger_event('send_mail_subject', $cvt_subject),
739      trigger_event('send_mail_content', $content),
740      trigger_event('send_mail_headers', $headers),
741      $args
742    );
743}
744
745/*
746 * pwg sendmail
747 *
748 * @param:
749 *   - result of other sendmail
750 *   - to: Receiver or receiver(s) of the mail.
751 *   - subject  [default value 'Piwigo']
752 *   - content: content of mail
753 *   - headers: headers of mail
754 *
755 * @return boolean (Ok or not)
756 */
757function pwg_send_mail($result, $to, $subject, $content, $headers)
758{
759  if (!$result)
760  {
761    global $conf_mail;
762
763    if ($conf_mail['use_smtp'])
764    {
765      include_once( PHPWG_ROOT_PATH.'include/class_smtp_mail.inc.php' );
766      $smtp_mail = new smtp_mail(
767        $conf_mail['smtp_host'], $conf_mail['smtp_user'], $conf_mail['smtp_password'],
768        $conf_mail['email_webmaster']);
769      return $smtp_mail->mail($to, $subject, $content, $headers);
770    }
771    else
772    {
773      if ($conf_mail['mail_options'])
774      {
775        $options = '-f '.$conf_mail['email_webmaster'];
776        return mail($to, $subject, $content, $headers, $options);
777      }
778      else
779      {
780        return mail($to, $subject, $content, $headers);
781      }
782    }
783  }
784  else
785  {
786    return $result;
787  }
788}
789
790/*Testing block*/
791/*function pwg_send_mail_test($result, $to, $subject, $content, $headers, $args)
792{
793    global $conf, $user, $lang_info;
794    $dir = $conf['local_data_dir'].'/tmp';
795    if ( mkgetdir( $dir,  MKGETDIR_DEFAULT&~MKGETDIR_DIE_ON_ERROR) )
796    {
797      $filename = $dir.'/mail.'.stripslashes($user['username']).'.'.$lang_info['code'].'.'.$args['template'].'.'.$args['theme'];
798      if ($args['content_format'] == 'text/plain')
799      {
800        $filename .= '.txt';
801      }
802      else
803      {
804        $filename .= '.html';
805      }
806      $file = fopen($filename, 'w+');
807      fwrite($file, $to ."\n");
808      fwrite($file, $subject ."\n");
809      fwrite($file, $headers);
810      fwrite($file, $content);
811      fclose($file);
812    }
813    return $result;
814}
815add_event_handler('send_mail', 'pwg_send_mail_test', EVENT_HANDLER_PRIORITY_NEUTRAL+10, 6);*/
816
817
818add_event_handler('send_mail', 'pwg_send_mail', EVENT_HANDLER_PRIORITY_NEUTRAL, 5);
819trigger_action('functions_mail_included');
820
821?>
Note: See TracBrowser for help on using the repository browser.