call hook again, in case an (smtp) error happened

This commit is contained in:
Ralf Becker 2012-08-08 10:01:01 +00:00
parent ea18bc75b5
commit c30999f1b4

View File

@ -92,21 +92,21 @@ class egw_mailer extends PHPMailer
* Initiates a connection to an SMTP server. * Initiates a connection to an SMTP server.
* Returns false if the operation failed. * Returns false if the operation failed.
* *
* Overwriting this method from phpmailer, to make sure we set SMTPSecure to ssl or tls if the standardports for ssl or tls * Overwriting this method from phpmailer, to make sure we set SMTPSecure to ssl or tls if the standardports for ssl or tls
* are configured for the given profile * are configured for the given profile
* *
* @uses SMTP * @uses SMTP
* @access public * @access public
* @return bool * @return bool
*/ */
public function SmtpConnect() public function SmtpConnect()
{ {
$port = $this->Port; $port = $this->Port;
$hosts = explode(';',$this->Host); $hosts = explode(';',$this->Host);
foreach ($hosts as $k => &$host) foreach ($hosts as $k => &$host)
{ {
$host = trim($host); // make sure there is no whitespace leading or trailling the host string $host = trim($host); // make sure there is no whitespace leading or trailling the host string
if (in_array($port,array(465,587)) && strpos($host,'://')===false) if (in_array($port,array(465,587)) && strpos($host,'://')===false)
{ {
//$host = ($port==587?'tls://':'ssl://').trim($host); //$host = ($port==587?'tls://':'ssl://').trim($host);
$this->SMTPSecure = ($port==587?'tls':'ssl'); $this->SMTPSecure = ($port==587?'tls':'ssl');
@ -130,7 +130,7 @@ class egw_mailer extends PHPMailer
*/ */
public function SmtpSend($header, $body) public function SmtpSend($header, $body)
{ {
$GLOBALS['egw']->hooks->process(array( $mail_id = $GLOBALS['egw']->hooks->process(array(
'location' => 'send_mail', 'location' => 'send_mail',
'subject' => $this->Subject, 'subject' => $this->Subject,
'from' => $this->Sender ? $this->Sender : $this->From, 'from' => $this->Sender ? $this->Sender : $this->From,
@ -143,8 +143,27 @@ class egw_mailer extends PHPMailer
$this->addresses = array(); // reset addresses for next mail $this->addresses = array(); // reset addresses for next mail
// calling the overwritten method try {
return parent::SmtpSend($header, $body); // calling the overwritten method
return parent::SmtpSend($header, $body);
}
catch (phpmailerException $e) {
// in case of errors/exceptions call hook again with previous returned mail_id and error-message to log
$GLOBALS['egw']->hooks->process(array(
'location' => 'send_mail',
'subject' => $this->Subject,
'from' => $this->Sender ? $this->Sender : $this->From,
'to' => $this->addresses['To'],
'cc' => $this->addresses['Cc'],
'bcc' => $this->addresses['Bcc'],
'body_sha1' => sha1($body),
'message_id' => preg_match('/^Message-ID: (.*)$/m', $header,$matches) ? $matches[1] : null,
'mail_id' => $mail_id,
'error' => $e->getMessage(),
), array(), true); // true = call all apps
// re-throw exception
throw $e;
}
} }
/** /**