mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-22 23:02:42 +01:00
Enable support for a single reply-handler for outbound emails
Summary: This allows you to configure a single mailbox for all mail sent by phabricator, so you can keep a mailaddress like bugs@example.com and don't need a catchall on your domain/subdomain. Test Plan: Enabled and disabled suffix. Saw mails generated have to correct prefix. Also piped raw mails into the scripts/mail/mail_handler.php and ensured comments went into phabricator for both maniphest and differential. Reviewers: epriestley Reviewed By: epriestley CC: aran, epriestley Differential Revision: 815
This commit is contained in:
parent
5bf28498c8
commit
c236e4ad72
4 changed files with 39 additions and 3 deletions
|
@ -207,6 +207,16 @@ return array(
|
||||||
// PhabricatorMailReplyHandler (and possibly of ManiphestReplyHandler).
|
// PhabricatorMailReplyHandler (and possibly of ManiphestReplyHandler).
|
||||||
'metamta.maniphest.reply-handler' => 'ManiphestReplyHandler',
|
'metamta.maniphest.reply-handler' => 'ManiphestReplyHandler',
|
||||||
|
|
||||||
|
// If you don't want phabricator to take up an entire domain
|
||||||
|
// (or subdomain for that matter), you can use this and set a common
|
||||||
|
// prefix for mail sent by phabricator. It will make use of the fact that
|
||||||
|
// a mail-address such as phabricator+D123+1hjk213h@example.com will be
|
||||||
|
// delivered to the phabricator users mailbox.
|
||||||
|
// Set this to the left part of the email address and it well get
|
||||||
|
// prepended to all outgoing mail. If you want to use e.g.
|
||||||
|
// 'phabricator@example.com' this should be set to 'phabricator'.
|
||||||
|
'metamta.single-reply-handler-prefix' => null,
|
||||||
|
|
||||||
// Prefix prepended to mail sent by Maniphest. You can change this to
|
// Prefix prepended to mail sent by Maniphest. You can change this to
|
||||||
// distinguish between testing and development installs, for example.
|
// distinguish between testing and development installs, for example.
|
||||||
'metamta.maniphest.subject-prefix' => '[Maniphest]',
|
'metamta.maniphest.subject-prefix' => '[Maniphest]',
|
||||||
|
|
|
@ -166,7 +166,16 @@ abstract class PhabricatorMailReplyHandler {
|
||||||
$receiver->getMailKey(),
|
$receiver->getMailKey(),
|
||||||
$receiver->getPHID());
|
$receiver->getPHID());
|
||||||
|
|
||||||
return "{$prefix}{$receiver_id}+public+{$hash}@{$domain}";
|
$address = "{$prefix}{$receiver_id}+public+{$hash}@{$domain}";
|
||||||
|
return $this->getSingleReplyHandlerPrefix($address);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getSingleReplyHandlerPrefix($address) {
|
||||||
|
$single_handle_prefix = PhabricatorEnv::getEnvConfig(
|
||||||
|
'metamta.single-reply-handler-prefix');
|
||||||
|
return ($single_handle_prefix)
|
||||||
|
? $single_handle_prefix . '+' . $address
|
||||||
|
: $address;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getDefaultPrivateReplyHandlerEmailAddress(
|
protected function getDefaultPrivateReplyHandlerEmailAddress(
|
||||||
|
@ -186,7 +195,8 @@ abstract class PhabricatorMailReplyHandler {
|
||||||
$handle->getPHID());
|
$handle->getPHID());
|
||||||
$domain = $this->getReplyHandlerDomain();
|
$domain = $this->getReplyHandlerDomain();
|
||||||
|
|
||||||
return "{$prefix}{$receiver_id}+{$user_id}+{$hash}@{$domain}";
|
$address = "{$prefix}{$receiver_id}+{$user_id}+{$hash}@{$domain}";
|
||||||
|
return $this->getSingleReplyHandlerPrefix($address);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,8 +92,16 @@ class PhabricatorMetaMTAReceivedMail extends PhabricatorMetaMTADAO {
|
||||||
// We've already stripped this, so look for an object address which has
|
// We've already stripped this, so look for an object address which has
|
||||||
// a format like: D291+291+b0a41ca848d66dcc@example.com
|
// a format like: D291+291+b0a41ca848d66dcc@example.com
|
||||||
$matches = null;
|
$matches = null;
|
||||||
|
$single_handle_prefix = PhabricatorEnv::getEnvConfig(
|
||||||
|
'metamta.single-reply-handler-prefix');
|
||||||
|
|
||||||
|
$prefixPattern = ($single_handle_prefix)
|
||||||
|
? preg_quote($single_handle_prefix, '/') . '\+'
|
||||||
|
: '';
|
||||||
|
$pattern = "/^{$prefixPattern}((?:D|T)\d+)\+([\w]+)\+([a-f0-9]{16})@/U";
|
||||||
|
|
||||||
$ok = preg_match(
|
$ok = preg_match(
|
||||||
'/^((?:D|T)\d+)\+([\w]+)\+([a-f0-9]{16})@/U',
|
$pattern,
|
||||||
$to,
|
$to,
|
||||||
$matches);
|
$matches);
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,14 @@ configured correctly, according to the instructions below -- will parse incoming
|
||||||
email and allow users to interact with Maniphest tasks and Differential
|
email and allow users to interact with Maniphest tasks and Differential
|
||||||
revisions over email.
|
revisions over email.
|
||||||
|
|
||||||
|
If you don't want phabricator to take up an entire domain (or subdomain) you
|
||||||
|
can configure a general prefix so you can use a single mailbox to receive mail
|
||||||
|
on. To make use of this set ##metamta.single-reply-handler-prefix## to the
|
||||||
|
prefix of your choice, and phabricator will prepend this to the 'Reply-To'
|
||||||
|
mail address. This works because everything up to the first (optional) '+'
|
||||||
|
character in an email-address is considered the receiver, and everything
|
||||||
|
after is essentially "ignored".
|
||||||
|
|
||||||
You can also set up a task creation email address, like ##bugs@example.com##,
|
You can also set up a task creation email address, like ##bugs@example.com##,
|
||||||
which will create a Maniphest task out of any email which is set to it. To do
|
which will create a Maniphest task out of any email which is set to it. To do
|
||||||
this, set ##metamta.maniphest.public-create-email## in your configuration. This
|
this, set ##metamta.maniphest.public-create-email## in your configuration. This
|
||||||
|
|
Loading…
Reference in a new issue