<?php
/**
+ * Classes used to send e-mails
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
+ * @file
* @author <brion@pobox.com>
* @author <mail@tgries.de>
* @author Tim Starling
- *
*/
/**
* @param $address Mixed: string with an email address, or a User object
* @param $name String: human-readable name if a string address is given
+ * @param $realName String: human-readable real name if a string address is given
*/
function __construct( $address, $name = null, $realName = null ) {
if( is_object( $address ) && $address instanceof User ) {
* array of parameters. It requires PEAR:Mail to do that.
* Otherwise it just uses the standard PHP 'mail' function.
*
- * @param $to MailAddress: recipient's email
+ * @param $to MailAddress: recipient's email (or an array of them)
* @param $from MailAddress: sender's email
* @param $subject String: email's subject.
* @param $body String: email's text.
*/
static function send( $to, $from, $subject, $body, $replyto=null, $contentType=null ) {
global $wgSMTP, $wgOutputEncoding, $wgEnotifImpersonal;
- global $wgEnotifMaxRecips;
+ global $wgEnotifMaxRecips, $wgAdditionalMailParams;
if ( is_array( $to ) ) {
- wfDebug( __METHOD__.': sending mail to ' . implode( ',', $to ) . "\n" );
+ // 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 ) {
+ $emails .= $t->toString() . ",";
+ }
+ $emails = rtrim( $emails, ',' );
+ wfDebug( __METHOD__.': sending mail to ' . $emails . "\n" );
} else {
wfDebug( __METHOD__.': sending mail to ' . implode( ',', array( $to->toString() ) ) . "\n" );
}
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 ( !$found ) {
+ throw new MWException( 'PEAR mail package is not installed' );
+ }
require_once( 'Mail.php' );
$msgid = str_replace(" ", "_", microtime());
$headers['Message-ID'] = "<$msgid@" . $wgSMTP['IDHost'] . '>'; // FIXME
$headers['X-Mailer'] = 'MediaWiki mailer';
+ wfSuppressWarnings();
+
// 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" );
+ wfRestoreWarnings();
return new WikiError( $mail_object->getMessage() );
}
$chunks = array_chunk( (array)$dest, $wgEnotifMaxRecips );
foreach ($chunks as $chunk) {
$e = self::sendWithPear($mail_object, $chunk, $headers, $body);
- if( WikiError::isError( $e ) )
+ if( WikiError::isError( $e ) ) {
+ wfRestoreWarnings();
return $e;
+ }
}
+ wfRestoreWarnings();
} else {
# In the following $headers = expression we removed "Reply-To: {$from}\r\n" , because it is treated differently
# (fifth parameter of the PHP mail function, see some lines below)
if (is_array($to)) {
foreach ($to as $recip) {
- $sent = mail( $recip->toString(), wfQuotedPrintable( $subject ), $body, $headers );
+ $sent = mail( $recip->toString(), wfQuotedPrintable( $subject ), $body, $headers, $wgAdditionalMailParams );
}
} else {
- $sent = mail( $to->toString(), wfQuotedPrintable( $subject ), $body, $headers );
+ $sent = mail( $to->toString(), wfQuotedPrintable( $subject ), $body, $headers, $wgAdditionalMailParams );
}
restore_error_handler();
'wl_notificationtimestamp IS NULL',
), __METHOD__
);
- while ($row = $dbw->fetchObject( $res ) ) {
+ foreach ( $res as $row ) {
$watchers[] = intval( $row->wl_user );
}
if ($watchers) {
# we use $wgPasswordSender as sender's address
global $wgEnotifWatchlist;
global $wgEnotifMinorEdits, $wgEnotifUserTalk;
- global $wgEnotifImpersonal;
wfProfileIn( __METHOD__ );
# 2. minor edits (changes) are only regarded if the global flag indicates so
$isUserTalkPage = ($title->getNamespace() == NS_USER_TALK);
- $enotifusertalkpage = ($isUserTalkPage && $wgEnotifUserTalk);
- $enotifwatchlistpage = $wgEnotifWatchlist;
$this->title = $title;
$this->timestamp = $timestamp;
* @private
*/
function composeCommonMailtext() {
- global $wgPasswordSender, $wgNoReplyAddress;
+ global $wgPasswordSender, $wgPasswordSenderName, $wgNoReplyAddress;
global $wgEnotifFromEditor, $wgEnotifRevealEditorAddress;
global $wgEnotifImpersonal, $wgEnotifUseRealName;
$this->composed_common = true;
$summary = ($this->summary == '') ? ' - ' : $this->summary;
- $medit = ($this->minorEdit) ? wfMsg( 'minoredit' ) : '';
+ $medit = ($this->minorEdit) ? wfMsgForContent( 'minoredit' ) : '';
# You as the WikiAdmin and Sysops can make use of plenty of
# named variables when composing your notification emails while
$keys['$CHANGEDORCREATED'] = wfMsgForContent( 'created' );
}
- if ($wgEnotifImpersonal && $this->oldid)
+ if ($wgEnotifImpersonal && $this->oldid) {
/*
* For impersonal mail, show a diff link to the last
* revision.
*/
$keys['$NEWPAGE'] = wfMsgForContent('enotif_lastdiff',
- $this->title->getFullURL("oldid={$this->oldid}&diff=prev"));
+ $this->title->getFullURL("oldid={$this->oldid}&diff=next"));
+ }
$body = strtr( $body, $keys );
$pagetitle = $this->title->getPrefixedText();
# global configuration level.
$editor = $this->editor;
$name = $wgEnotifUseRealName ? $editor->getRealName() : $editor->getName();
- $adminAddress = new MailAddress( $wgPasswordSender, 'WikiAdmin' );
+ $adminAddress = new MailAddress( $wgPasswordSender, $wgPasswordSenderName );
$editorAddress = new MailAddress( $editor );
if( $wgEnotifRevealEditorAddress
&& ( $editor->getEmail() != '' )
* timestamp in proper timezone, etc) and sends it out.
* Returns true if the mail was sent successfully.
*
- * @param User $watchingUser
- * @param object $mail
- * @return bool
+ * @param $watchingUser User object
+ * @return Boolean
* @private
*/
function sendPersonalised( $watchingUser ) {
} # 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