if ( $this->name != '' && !wfIsWindows() ) {
global $wgEnotifUseRealName;
$name = ( $wgEnotifUseRealName && $this->realName ) ? $this->realName : $this->name;
- $quoted = wfQuotedPrintable( $name );
+ $quoted = UserMailer::quotedPrintable( $name );
if ( strpos( $quoted, '.' ) !== false || strpos( $quoted, ',' ) !== false ) {
$quoted = '"' . $quoted . '"';
}
* @return Status object
*/
public static function send( $to, $from, $subject, $body, $replyto = null, $contentType = null ) {
- global $wgSMTP, $wgOutputEncoding, $wgEnotifImpersonal;
+ global $wgSMTP, $wgEnotifImpersonal;
global $wgEnotifMaxRecips, $wgAdditionalMailParams;
if ( is_array( $to ) ) {
+ $emails = '';
// This wouldn't be necessary if implode() worked on arrays of
// objects using __toString(). http://bugs.php.net/bug.php?id=36612
foreach ( $to as $t ) {
}
if ( is_array( $wgSMTP ) ) {
- $found = false;
- $pathArray = explode( PATH_SEPARATOR, get_include_path() );
- foreach ( $pathArray as $path ) {
- if ( file_exists( $path . DIRECTORY_SEPARATOR . 'Mail.php' ) ) {
- $found = true;
- break;
- }
+ if ( function_exists( 'stream_resolve_include_path' ) ) {
+ $found = stream_resolve_include_path( 'Mail.php' );
+ } else {
+ $found = Fallback::stream_resolve_include_path( 'Mail.php' );
}
if ( !$found ) {
throw new MWException( 'PEAR mail package is not installed' );
if ( $replyto ) {
$headers['Reply-To'] = $replyto->toString();
}
- $headers['Subject'] = wfQuotedPrintable( $subject );
+ $headers['Subject'] = self::quotedPrintable( $subject );
$headers['Date'] = date( 'r' );
$headers['MIME-Version'] = '1.0';
$headers['Content-type'] = ( is_null( $contentType ) ?
- 'text/plain; charset=' . $wgOutputEncoding : $contentType );
+ 'text/plain; charset=UTF-8' : $contentType );
$headers['Content-transfer-encoding'] = '8bit';
$headers['Message-ID'] = "<$msgid@" . $wgSMTP['IDHost'] . '>'; // FIXME
$headers['X-Mailer'] = 'MediaWiki mailer';
$endl = "\n";
}
$ctype = ( is_null( $contentType ) ?
- 'text/plain; charset=' . $wgOutputEncoding : $contentType );
+ 'text/plain; charset=UTF-8' : $contentType );
$headers =
"MIME-Version: 1.0$endl" .
"Content-type: $ctype$endl" .
ini_set( 'html_errors', '0' );
set_error_handler( array( 'UserMailer', 'errorHandler' ) );
- if ( is_array( $to ) ) {
- foreach ( $to as $recip ) {
- $sent = mail( $recip->toString(), wfQuotedPrintable( $subject ), $body, $headers, $wgAdditionalMailParams );
+ // We need to check for safe_mode, because mail() throws an E_NOTICE
+ // on the 5th parameter when it's turned on
+ $sm = wfIniGetBool( 'safe_mode' );
+
+ if ( !is_array( $to ) ) {
+ $to = array( $to );
+ }
+ foreach ( $to as $recip ) {
+ if( $sm ) {
+ $sent = mail( $recip->toString(), self::quotedPrintable( $subject ), $body, $headers );
+ } else {
+ $sent = mail( $recip->toString(), self::quotedPrintable( $subject ), $body, $headers, $wgAdditionalMailParams );
}
- } else {
- $sent = mail( $to->toString(), wfQuotedPrintable( $subject ), $body, $headers, $wgAdditionalMailParams );
}
restore_error_handler();
$phrase = strtr( $phrase, array( "\r" => '', "\n" => '', '"' => '' ) );
return '"' . $phrase . '"';
}
+
+ /**
+ * Converts a string into quoted-printable format
+ * @since 1.17
+ */
+ public static function quotedPrintable( $string, $charset = '' ) {
+ # Probably incomplete; see RFC 2045
+ if( empty( $charset ) ) {
+ $charset = 'UTF-8';
+ }
+ $charset = strtoupper( $charset );
+ $charset = str_replace( 'ISO-8859', 'ISO8859', $charset ); // ?
+
+ $illegal = '\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\xff=';
+ $replace = $illegal . '\t ?_';
+ if( !preg_match( "/[$illegal]/", $string ) ) {
+ return $string;
+ }
+ $out = "=?$charset?Q?";
+ $out .= preg_replace_callback( "/([$replace])/",
+ array( __CLASS__, 'quotedPrintableCallback' ), $string );
+ $out .= '?=';
+ return $out;
+ }
+
+ protected static function quotedPrintableCallback( $matches ) {
+ return sprintf( "=%02X", ord( $matches[1] ) );
+ }
}
/**
}
/**
- * @private
+ * Generate the generic "this page has been changed" e-mail text.
*/
- function composeCommonMailtext() {
+ private function composeCommonMailtext() {
global $wgPasswordSender, $wgPasswordSenderName, $wgNoReplyAddress;
global $wgEnotifFromEditor, $wgEnotifRevealEditorAddress;
global $wgEnotifImpersonal, $wgEnotifUseRealName;
}
} # end of class EmailNotification
-
-/**@{
- * Backwards compatibility functions
- *
- * @deprecated Use UserMailer methods; will be removed in 1.19
- */
-function wfRFC822Phrase( $s ) {
- wfDeprecated( __FUNCTION__ );
- return UserMailer::rfc822Phrase( $s );
-}
-
-function userMailer( $to, $from, $subject, $body, $replyto = null ) {
- wfDeprecated( __FUNCTION__ );
- return UserMailer::send( $to, $from, $subject, $body, $replyto );
-}
-/**@}*/
\ No newline at end of file