private function newMailMessage(PhabricatorUser $viewer, array $events)
 {
     $events = msort($events, 'getEpoch');
     $next_event = head($events);
     $body = new PhabricatorMetaMTAMailBody();
     foreach ($events as $event) {
         $body->addTextSection(null, pht('%s is starting in %s minute(s), at %s.', $event->getEvent()->getName(), $event->getDisplayMinutes(), $event->getDisplayTime()));
         $body->addLinkSection(pht('EVENT DETAIL'), PhabricatorEnv::getProductionURI($event->getEvent()->getURI()));
     }
     $next_event = head($events)->getEvent();
     $subject = $next_event->getName();
     if (count($events) > 1) {
         $more = pht('(+%s more...)', new PhutilNumber(count($events) - 1));
         $subject = "{$subject} {$more}";
     }
     $calendar_phid = id(new PhabricatorCalendarApplication())->getPHID();
     return id(new PhabricatorMetaMTAMail())->setSubject($subject)->addTos(array($viewer->getPHID()))->setSensitiveContent(false)->setFrom($calendar_phid)->setIsBulk(true)->setSubjectPrefix(pht('[Calendar]'))->setVarySubjectPrefix(pht('[Reminder]'))->setThreadID($next_event->getPHID(), false)->setRelatedPHID($next_event->getPHID())->setBody($body->render())->setHTMLBody($body->renderHTML());
 }