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;
 }
 public static function sendInviteEmail(User $inviter, $email, $hash)
 {
     global $wgPasswordSender;
     $url = Title::newFromText('Special:Userlogin/signup')->getCanonicalUrl(array('invite' => $hash, 'returnto' => 'Special:Dashboard'));
     $subj = wfMessage('is-emailsubj')->inContentLanguage();
     $body = wfMessage('is-emailbody')->params($inviter->getName(), $url)->inContentLanguage();
     $emailTo = new MailAddress($email);
     $emailFrom = new MailAddress($wgPasswordSender, wfMessage('emailsender')->text());
     $params = array('to' => $emailTo, 'from' => $emailFrom, 'replyto' => $emailFrom, 'body' => $body->text(), 'subj' => $subj->text());
     $job = new EmaillingJob(Title::newMainPage(), $params);
     $job->run();
 }