<?php
/***************************************************************************
- * Copyright (C) 2003-2009 Polytechnique.org *
+ * Copyright (C) 2003-2010 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
}
}
- static private formatUser(PlUser $user)
+ static private function formatUser(PlUser $user)
{
return '"' . $user->fullName() . '" <' . $user->bestEmail() . '>';
}
if ($email instanceof PlUser) {
$email = self::formatUser($email);
}
- return preg_replace('!(^|, *)([^<"]+?) *(<[^>]*>)!u', '\1"\2" \3', $email);
+ $email = preg_replace('!(^|, *)([^<"]+?) *(<[^>]*>)!ue',
+ '\1 "\2" \3', $email);
+ return preg_replace('/"([^<]+)"/e',
+ '"\\"" . PlMailer::encodeStringQP("\1") . "\\""',
+ $email);
}
public function addTo($email)
}
}
+ public function setTo($email)
+ {
+ $email = $this->correct_emails($email);
+ $this->_headers['To'] = $email;
+ }
+
public function addCc($email)
{
return parent::addCc($this->correct_emails($email));
return parent::setFrom($this->correct_emails($email));
}
+ static function encodeStringQP($string)
+ {
+ if (!preg_match('/^[\x20-\x7e]*$/', $string)) {
+ $string = '=?UTF-8?Q?' . preg_replace('/[^\x21-\x3C\x3e\x40-\x7e]/e', 'PlMailer::encodeQP("\0")', $string)
+ . '?=';
+ }
+ return $string;
+ }
+
+
static function encodeQP($char)
{
return sprintf('=%02X', ord($char));
public function setSubject($subject)
{
- if (!preg_match('/^[\x20-\x7e]*$/', $subject)) {
- $subject = '=?UTF-8?Q?' . preg_replace('/[^\x21-\x3C\x3e-\x7e]/e', 'PlMailer::encodeQP("\0")', $subject)
- . '?=';
- }
- return parent::setSubject($subject);
+ return parent::setSubject(self::encodeStringQP($subject));
}
public function addHeader($hdr,$val)
public function sendTo(PlUser &$user)
{
- $this->addTo($user);
+ $this->setTo($user);
$this->assign_by_ref('user', $user);
return $this->send($user->isEmailFormatHtml());
}
$this->addHeader('X-Org-Mail', S::user()->forlifeEmail());
}
$addrs = Array();
- foreach(Array('To', 'Cc', 'Bcc') as $hdr) {
- if(isset($this->_headers[$hdr])) {
+ foreach (Array('To', 'Cc', 'Bcc') as $hdr) {
+ if (isset($this->_headers[$hdr])) {
require_once 'Mail/RFC822.php';
$parsed = @Mail_RFC822::parseAddressList($this->_headers[$hdr]);
if (is_array($parsed)) {
}
}
}
- if(empty($addrs)) {
+ if (empty($addrs)) {
return false;
}
$dests = Array();
- foreach($addrs as $a) {
+ foreach ($addrs as $a) {
$dests[] = "{$a->mailbox}@{$a->host}";
}
+ // Support for a "catch-all" email address, to be used by developers.
+ // This mode can only be activated when the working copy is in restricted
+ // mode, to ensure that production plat/al copies are never affected.
+ global $globals;
+ if ($globals->email_catchall && $globals->core->restricted_platal) {
+ require_once 'Mail/RFC822.php';
+ if (@Mail_RFC822::isValidInetAddress($globals->email_catchall)) {
+ $dests = array($globals->email_catchall);
+ }
+ }
+
// very important to do it in THIS order very precisely.
$body = $this->get(array('text_charset' => $this->charset,
'text_encoding' => '8bit',