diff --git a/scripts/mail/mail_handler.php b/scripts/mail/mail_handler.php index 2b49c910bb..deb0e2bffe 100755 --- a/scripts/mail/mail_handler.php +++ b/scripts/mail/mail_handler.php @@ -1,66 +1,74 @@ #!/usr/bin/php 1) { $_SERVER['PHABRICATOR_ENV'] = $argv[1]; } $root = dirname(dirname(dirname(__FILE__))); require_once $root.'/scripts/__init_script__.php'; require_once $root.'/externals/mimemailparser/MimeMailParser.class.php'; phutil_require_module( 'phabricator', 'applications/metamta/storage/receivedmail'); phutil_require_module( 'phabricator', 'applications/files/storage/file'); $parser = new MimeMailParser(); $parser->setText(file_get_contents('php://stdin')); $received = new PhabricatorMetaMTAReceivedMail(); $received->setHeaders($parser->getHeaders()); $received->setBodies(array( 'text' => $parser->getMessageBody('text'), 'html' => $parser->getMessageBody('html'), )); $attachments = array(); foreach ($parser->getAttachments() as $attachment) { if (preg_match('@text/(plain|html)@', $attachment->getContentType()) && $attachment->getContentDisposition() == 'inline') { // If this is an "inline" attachment with some sort of text content-type, // do not treat it as a file for attachment. MimeMailParser already picked // it up in the getMessageBody() call above. We still want to treat 'inline' // attachments with other content types (e.g., images) as attachments. continue; } $file = PhabricatorFile::newFromFileData( $attachment->getContent(), array( 'name' => $attachment->getFilename(), )); $attachments[] = $file->getPHID(); } -$received->setAttachments($attachments); -$received->save(); -$received->processReceivedMail(); +try { + $received->setAttachments($attachments); + $received->save(); + $received->processReceivedMail(); +} catch (Exception $e) { + $received + ->setMessage('EXCEPTION: '.$e->getMessage()) + ->save(); +} + +