X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2Fmail%2FUserMailer.php;h=7b48ad095a8e0d28c4831458bd16328361859160;hb=487829b8a396233c28a36decceecde5f55cee575;hp=3858f27566ef90d3b936b9340aaa1fe7573d6e6d;hpb=10d1b7d12b5d097413cd507740c5c71781c2580b;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/mail/UserMailer.php b/includes/mail/UserMailer.php index 3858f27566..7b48ad095a 100644 --- a/includes/mail/UserMailer.php +++ b/includes/mail/UserMailer.php @@ -102,7 +102,7 @@ class UserMailer { * @param MailAddress $from Sender's email * @param string $subject Email's subject. * @param string $body Email's text or Array of two strings to be the text and html bodies - * @param array $options: + * @param array $options Keys: * 'replyTo' MailAddress * 'contentType' string default 'text/plain; charset=UTF-8' * 'headers' array Extra headers to set @@ -175,18 +175,58 @@ class UserMailer { // first send to non-split address list, then to split addresses one by one $status = Status::newGood(); if ( $to ) { - $status->merge( UserMailer::sendInternal( + $status->merge( self::sendInternal( $to, $from, $subject, $body, $options ) ); } foreach ( $splitTo as $newTo ) { - $status->merge( UserMailer::sendInternal( + $status->merge( self::sendInternal( [ $newTo ], $from, $subject, $body, $options ) ); } return $status; } } - return UserMailer::sendInternal( $to, $from, $subject, $body, $options ); + return self::sendInternal( $to, $from, $subject, $body, $options ); + } + + /** + * Whether the PEAR Mail_mime library is usable. This will + * try and load it if it is not already. + * + * @return bool + */ + private static function isMailMimeUsable() { + static $usable = null; + if ( $usable === null ) { + // If the class is not already loaded, and it's in the include path, + // try requiring it. + if ( !class_exists( 'Mail_mime' ) && stream_resolve_include_path( 'Mail/mime.php' ) ) { + require_once 'Mail/mime.php'; + } + $usable = class_exists( 'Mail_mime' ); + } + + return $usable; + } + + /** + * Whether the PEAR Mail library is usable. This will + * try and load it if it is not already. + * + * @return bool + */ + private static function isMailUsable() { + static $usable = null; + if ( $usable === null ) { + // If the class is not already loaded, and it's in the include path, + // try requiring it. + if ( !class_exists( 'Mail' ) && stream_resolve_include_path( 'Mail.php' ) ) { + require_once 'Mail.php'; + } + $usable = class_exists( 'Mail' ); + } + + return $usable; } /** @@ -196,7 +236,7 @@ class UserMailer { * @param MailAddress $from Sender's email * @param string $subject Email's subject. * @param string $body Email's text or Array of two strings to be the text and html bodies - * @param array $options: + * @param array $options Keys: * 'replyTo' MailAddress * 'contentType' string default 'text/plain; charset=UTF-8' * 'headers' array Extra headers to set @@ -296,15 +336,12 @@ class UserMailer { if ( is_array( $body ) ) { // we are sending a multipart message wfDebug( "Assembling multipart mime email\n" ); - if ( !stream_resolve_include_path( 'Mail/mime.php' ) ) { + if ( !self::isMailMimeUsable() ) { wfDebug( "PEAR Mail_Mime package is not installed. Falling back to text email.\n" ); // remove the html body for text email fall back $body = $body['text']; } else { - // Check if pear/mail_mime is already loaded (via composer) - if ( !class_exists( 'Mail_mime' ) ) { - require_once 'Mail/mime.php'; - } + // pear/mail_mime is already loaded by this point if ( wfIsWindows() ) { $body['text'] = str_replace( "\n", "\r\n", $body['text'] ); $body['html'] = str_replace( "\n", "\r\n", $body['html'] ); @@ -352,21 +389,17 @@ class UserMailer { if ( is_array( $wgSMTP ) ) { // Check if pear/mail is already loaded (via composer) - if ( !class_exists( 'Mail' ) ) { - // PEAR MAILER - if ( !stream_resolve_include_path( 'Mail.php' ) ) { - throw new MWException( 'PEAR mail package is not installed' ); - } - require_once 'Mail.php'; + if ( !self::isMailUsable() ) { + throw new MWException( 'PEAR mail package is not installed' ); } - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); // Create the mail object using the Mail::factory method $mail_object =& Mail::factory( 'smtp', $wgSMTP ); if ( PEAR::isError( $mail_object ) ) { wfDebug( "PEAR::Mail factory failed: " . $mail_object->getMessage() . "\n" ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); return Status::newFatal( 'pear-mail-error', $mail_object->getMessage() ); } @@ -386,11 +419,11 @@ class UserMailer { $status = self::sendWithPear( $mail_object, $chunk, $headers, $body ); // FIXME : some chunks might be sent while others are not! if ( !$status->isOK() ) { - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); return $status; } } - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); return Status::newGood(); } else { // PHP mail()