Index: scripts/mail/mail_handler.php =================================================================== --- scripts/mail/mail_handler.php +++ scripts/mail/mail_handler.php @@ -1,14 +1,37 @@ #!/usr/bin/env php <?php +// NOTE: This script is very oldschool and takes the environment as an argument. +// Some day, we could take a shot at cleaning this up. if ($argc > 1) { - $_SERVER['PHABRICATOR_ENV'] = $argv[1]; + foreach (array_slice($argv, 1) as $arg) { + if (!preg_match('/^-/', $arg)) { + $_SERVER['PHABRICATOR_ENV'] = $arg; + break; + } + } } $root = dirname(dirname(dirname(__FILE__))); require_once $root.'/scripts/__init_script__.php'; require_once $root.'/externals/mimemailparser/MimeMailParser.class.php'; +$args = new PhutilArgumentParser($argv); +$args->parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'process-duplicates', + 'help' => pht( + "Process this message, even if it's a duplicate of another message. ". + "This is mostly useful when debugging issues with mail routing."), + ), + array( + 'name' => 'env', + 'wildcard' => true, + ), + )); + $parser = new MimeMailParser(); $parser->setText(file_get_contents('php://stdin')); @@ -28,6 +51,10 @@ $headers['subject'] = iconv_mime_decode($headers['subject'], 0, "UTF-8"); $headers['from'] = iconv_mime_decode($headers['from'], 0, "UTF-8"); +if ($args->getArg('process-duplicates')) { + $headers['message-id'] = Filesystem::readRandomCharacters(64); +} + $received = new PhabricatorMetaMTAReceivedMail(); $received->setHeaders($headers); $received->setBodies(array( @@ -62,6 +89,8 @@ $received ->setMessage('EXCEPTION: '.$e->getMessage()) ->save(); + + throw $e; } Index: src/applications/conpherence/mail/ConpherenceCreateThreadMailReceiver.php =================================================================== --- src/applications/conpherence/mail/ConpherenceCreateThreadMailReceiver.php +++ src/applications/conpherence/mail/ConpherenceCreateThreadMailReceiver.php @@ -53,13 +53,15 @@ $phids = mpull($users, 'getPHID'); $conpherence = id(new ConpherenceReplyHandler()) - ->setMailReceiver(new ConpherenceThread()) + ->setMailReceiver(ConpherenceThread::initializeNewThread($sender)) ->setMailAddedParticipantPHIDs($phids) ->setActor($sender) ->setExcludeMailRecipientPHIDs($mail->loadExcludeMailRecipientPHIDs()) ->processEmail($mail); - $mail->setRelatedPHID($conpherence->getPHID()); + if ($conpherence) { + $mail->setRelatedPHID($conpherence->getPHID()); + } } } Index: src/applications/conpherence/storage/ConpherenceThread.php =================================================================== --- src/applications/conpherence/storage/ConpherenceThread.php +++ src/applications/conpherence/storage/ConpherenceThread.php @@ -18,6 +18,12 @@ private $widgetData = self::ATTACHABLE; private $images = array(); + public function initializeNewThread(PhabricatorUser $sender) { + return id(new ConpherenceThread()) + ->setMessageCount(0) + ->setTitle(''); + } + public function getConfiguration() { return array( self::CONFIG_AUX_PHID => true,