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()); }