Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14059868
D8701.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
D8701.diff
View Options
diff --git a/src/applications/metamta/constants/MetaMTAReceivedMailStatus.php b/src/applications/metamta/constants/MetaMTAReceivedMailStatus.php
--- a/src/applications/metamta/constants/MetaMTAReceivedMailStatus.php
+++ b/src/applications/metamta/constants/MetaMTAReceivedMailStatus.php
@@ -15,6 +15,8 @@
const STATUS_NO_SUCH_OBJECT = 'err:not-found';
const STATUS_HASH_MISMATCH = 'err:bad-hash';
const STATUS_UNHANDLED_EXCEPTION = 'err:exception';
+ const STATUS_EMPTY = 'err:empty';
+ const STATUS_EMPTY_IGNORED = 'err:empty-ignored';
public static function getHumanReadableName($status) {
$map = array(
@@ -30,6 +32,8 @@
self::STATUS_NO_SUCH_OBJECT => pht('No Such Object'),
self::STATUS_HASH_MISMATCH => pht('Bad Address'),
self::STATUS_UNHANDLED_EXCEPTION => pht('Unhandled Exception'),
+ self::STATUS_EMPTY => pht('Empty Mail'),
+ self::STATUS_EMPTY_IGNORED => pht('Ignored Empty Mail'),
);
return idx($map, $status, pht('Processing Exception'));
diff --git a/src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php b/src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php
--- a/src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php
+++ b/src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php
@@ -46,81 +46,38 @@
PhabricatorMetaMTAReceivedMail $mail);
public function processEmail(PhabricatorMetaMTAReceivedMail $mail) {
- $error = $this->sanityCheckEmail($mail);
-
- if ($error) {
- if ($this->shouldSendErrorEmail($mail)) {
- $this->sendErrorEmail($error, $mail);
- }
- return null;
- }
+ $this->dropEmptyMail($mail);
return $this->receiveEmail($mail);
}
- private function sanityCheckEmail(PhabricatorMetaMTAReceivedMail $mail) {
- $body = $mail->getCleanTextBody();
+ private function dropEmptyMail(PhabricatorMetaMTAReceivedMail $mail) {
+ $body = $mail->getCleanTextBody();
$attachments = $mail->getAttachments();
- if (empty($body) && empty($attachments)) {
- return 'Empty email body. Email should begin with an !action and / or '.
- 'text to comment. Inline replies and signatures are ignored.';
+ if (strlen($body) || $attachments) {
+ return;
}
- return null;
- }
-
- /**
- * Only send an error email if the user is talking to just Phabricator. We
- * can assume if there is only one To address it is a Phabricator address
- * since this code is running and everything.
- */
- private function shouldSendErrorEmail(PhabricatorMetaMTAReceivedMail $mail) {
- return (count($mail->getToAddresses()) == 1) &&
- (count($mail->getCCAddresses()) == 0);
- }
-
- private function sendErrorEmail($error,
- PhabricatorMetaMTAReceivedMail $mail) {
- $template = new PhabricatorMetaMTAMail();
- $template->setSubject('Exception: unable to process your mail request');
- $template->setBody($this->buildErrorMailBody($error, $mail));
- $template->setRelatedPHID($mail->getRelatedPHID());
- $phid = $this->getActor()->getPHID();
- $handle = id(new PhabricatorHandleQuery())
- ->setViewer($this->getActor())
- ->withPHIDs(array($phid))
- ->executeOne();
- $tos = array($phid => $handle);
- $mails = $this->multiplexMail($template, $tos, array());
+ // Only send an error email if the user is talking to just Phabricator.
+ // We can assume if there is only one "To" address it is a Phabricator
+ // address since this code is running and everything.
+ $is_direct_mail = (count($mail->getToAddresses()) == 1) &&
+ (count($mail->getCCAddresses()) == 0);
- foreach ($mails as $email) {
- $email->saveAndSend();
+ if ($is_direct_mail) {
+ $status_code = MetaMTAReceivedMailStatus::STATUS_EMPTY;
+ } else {
+ $status_code = MetaMTAReceivedMailStatus::STATUS_EMPTY_IGNORED;
}
- return true;
- }
-
- private function buildErrorMailBody($error,
- PhabricatorMetaMTAReceivedMail $mail) {
- $original_body = $mail->getRawTextBody();
-
- $main_body = <<<EOBODY
-Your request failed because an error was encoutered while processing it:
-
- ERROR: {$error}
-
- -- Original Body -------------------------------------------------------------
-
- {$original_body}
-
-EOBODY;
-
- $body = new PhabricatorMetaMTAMailBody();
- $body->addRawSection($main_body);
- $body->addReplySection($this->getReplyHandlerInstructions());
-
- return $body->render();
+ throw new PhabricatorMetaMTAReceivedMailProcessingException(
+ $status_code,
+ pht(
+ 'Your message does not contain any body text or attachments, so '.
+ 'Phabricator can not do anything useful with it. Make sure comment '.
+ 'text appears at the top of your message: quoted replies, inline '.
+ 'text, and signatures are discarded and ignored.'));
}
public function supportsPrivateReplies() {
diff --git a/src/applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php b/src/applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php
--- a/src/applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php
+++ b/src/applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php
@@ -108,6 +108,9 @@
// Don't send an error email back in these cases, since they're
// very unlikely to be the sender's fault.
break;
+ case MetaMTAReceivedMailStatus::STATUS_EMPTY_IGNORED:
+ // This error is explicitly ignored.
+ break;
default:
$this->sendExceptionMail($ex);
break;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Nov 18, 10:08 PM (9 h, 21 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6732414
Default Alt Text
D8701.diff (5 KB)
Attached To
Mode
D8701: Simplify some more older mail error handling code
Attached
Detach File
Event Timeline
Log In to Comment