Extension talk:EmailUsers

From mediawiki.org
Latest comment: 9 years ago by Fustbariclation in topic Can I pass parameters to this?

Can I pass parameters to this?[edit]

I'd like to be able to use this to send e-mail automatically. Can I incorporate this into a form to send an e-mail when it finishes?

Fustbariclation (talk) 12:41, 22 February 2014 (UTC)Reply


I would also be interested in Fustbariclation's functionality request. Thanks.
Clifford.kasper (talk) 17:50, 10 July 2014 (UTC)Reply

It would be nice, I agree. My conclusion has been that it'll be safer to use a mailing list address. I'm going to create a user from that address so, when an e-mail is sent from the watchlist it goes to the right users.

I'm thinking of putting some logic on the mail server to clean up the message a bit, but I'll do some more experimenting on the easy way first.

Fustbariclation (talk) 18:13, 10 July 2014 (UTC)Reply

Special Page not Working[edit]

Hm, the special page is broken for me, using MW 1.16.0 --Mevans86 22:23, 3 March 2011 (UTC)Reply

Same here on MW 1.16.2
--John Thomson 06:23, 6 March 2011 (UTC)Reply
1.16.5 also. A way to use it: replace the original SpecialEmailUsers.php to below. But be careful of it, cause we'll never get a real error.--Liuyanghejerry 03:18, 11 May 2011 (UTC)Reply
<?php

if ( !defined( 'MEDIAWIKI' ) ) {
	die();
}

class SpecialEmailUsers extends SpecialPage {
	function __construct() {
		parent::__construct( 'EmailUsers', 'sendbatchemail' );
	}

	function execute( $par ) {
		global $wgOut, $wgUser, $wgEmailAuthentication;

		$this->setHeaders();

		if ( !$this->userCanExecute( $wgUser ) ) {
			$this->displayRestrictionError();
			return;
		}

		//$error = SpecialEmailUsers::getPermissionsError( $wgUser, $wgUser->editToken() );
		$error=false;

		if ( $error ) {
			switch ( $error ) {
			case 'blockedemailuser':
				$wgOut->blockedPage();
				return;
			case 'actionthrottledtext':
				$wgOut->rateLimited();
				return;
			case 'mailnologin':
				$wgOut->showErrorPage( 'mailnologin', 'mailnologintext' );
				return;
			default:
				list( $title, $msg, $params ) = $error;
				$wgOut->showErrorPage( $title, $msg, $params );
				return;
			}
		}

		$dbr = wfGetDB( DB_SLAVE );

		# $conds can be not that strict but cannot be too strict.
		$conds = array( "user_email <> ''" );
		if ( $wgEmailAuthentication ) {
			$conds[] = 'user_email_authenticated IS NOT NULL';
		}

		$res = $dbr->select( 'user', '*', $conds );
		$users = UserArray::newFromResult( $res );

		$usernames = array();

		foreach ( $users as $user ) {
			if ( $user->canReceiveEmail() && $user->getId() != $wgUser->getId() ) {
				$usernames[$user->getName()] = $user->getId();
			}
		}

		$this->userIds = array_values( $usernames );

		if ( empty( $usernames ) ) {
			# No one to send mail to
			$wgOut->addWikiMsg( 'emailusers-norecipient' );
			$wgOut->returnToMain();
			return;
		}

		$form = array(
			'target' => array(
				'type' => 'multiselect',
				'label-message' => 'emailto',
				'options' => $usernames,
				'validation-callback' => array( $this, 'validateTarget' ),
			),
			'target-reverse' => array(
				'type' => 'check',
				'default' => true,
				'label-message' => 'emailusers-target-reverse',
			),
			'subject' => array(
				'type' => 'text',
				'default' => wfMsg( 'defemailsubject' ),
				'label-message' => 'emailsubject',
			),
			'text' => array(
				'type' => 'textarea',
				'label-message' => 'emailmessage',
			),
			'ccme' => array(
				'type' => 'check',
				'default' => $wgUser->getOption( 'ccmeonemails' ),
				'label-message' => 'emailccme',
			),
		);

		$htmlForm = new HTMLForm( $form );
		$htmlForm->setTitle( $this->getTitle( $par ) );
		$htmlForm->setSubmitCallback( array( $this, 'submit' ) );

		$this->outputHeader();

		if ( $htmlForm->show() ) {
			$wgOut->addWikiMsg( 'emailsenttext' );
			$htmlForm->displayForm( false );
		}
	}

	function validateTarget( $value, $alldata ) {
		global $wgLang, $wgEmailUsersMaxRecipients;

		if ( $alldata['target-reverse'] ) {
			$recipients = count( $this->userIds ) - count( $value );
		} else {
			$recipients = count( $value );
		}

		if ( $recipients <= 0 ) {
			return wfMsgExt( 'emailusers-norecipientselected', 'parse' );
		} else if ( $wgEmailUsersMaxRecipients > 0 && $recipients > $wgEmailUsersMaxRecipients ) {
			return wfMsgExt(
				'emailusers-toomanyrecipientsselected', 'parse',
				$wgLang->formatNum( $wgEmailUsersMaxRecipients )
			);
		}

		return true;
	}

	function submit( $data ) {
		global $wgUserEmailUseReplyTo, $wgEmailUsersUseJobQueue, $wgPasswordSender, $wgUser;

		if ( $data['target-reverse'] ) {
			$targets = array_diff( $this->userIds, $data['target'] );
		} else {
			$targets = $data['target'];
		}

		if ( $data['ccme'] ) {
			$targets[] = $wgUser->getId();
		}

		$text = rtrim( $data['text'] ) . "\n\n-- \n";

		$params = array(
			'subj' => $data['subject'],
			'replyto' => new MailAddress( $wgUser ),
		);

		if ( $wgUserEmailUseReplyTo ) {
			$params['from'] = new MailAddress( $wgPasswordSender );
		} else {
			$params['from'] = new MailAddress( $wgUser );
		}

		foreach ( $targets as $userId ) {
			$user = User::newFromId( $userId );

			$params['to'] = new MailAddress( $user );

			# Or use the recipient's language instead of content?
			$params['body'] = $text . wfMsgExt( 'emailuserfooter',
				array( 'content', 'parsemag' ), array( $wgUser->getName(), $user->getName() )
			);

			$job = new EmaillingJob( $this->getTitle(), $params );
			if ( $wgEmailUsersUseJobQueue ) {
				$job->insert();
			} else {
				$job->run();
			}
		}

		return true;
	}
}

I wrote this extension for MW 1.16.x initially, however someone updated code to make it work with MW 1.17 but broke b/c. Liangent 04:35, 13 May 2011 (UTC)Reply

receiving[edit]

After pressing submit, I am not receiving emails sent. It was missing something? thanks! --Fabianoaguiarg 17:02, 19 January 2012 (UTC)Reply