Clean up numerous rough edges in Mail configuration
Summary: - Support file attachments in Mailgun, after D8831. - Fix `bin/mail send-test --attach ...` flag. - Make `bin/mail send-test` route mail through the daemons. - Remove the `workerTaskID` on MetaMTAMail, which is only used (needlessly) by `bin/mail resend` and creates a huge mess elsewhere. - Currently, when mail fails, the daemon exits with a very generic and useless message. Instead, make `sendNow()` throw when it fails, so the real reason is surfaced. This is OK now because mail is always sent via the daemons. - Now that Mailgun supports attachments, document it. - Update a bunch of mail docs. Test Plan: - Sent mail. - Sent mail with attachments. - Read documentation. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Differential Revision: https://secure.phabricator.com/D8832
This commit is contained in:
@@ -8,19 +8,24 @@ Maniphest tasks via email.
|
||||
= Preamble =
|
||||
|
||||
This can be extremely difficult to configure correctly. This is doubly true if
|
||||
you use sendmail.
|
||||
you use a local MTA.
|
||||
|
||||
There are basically a few approaches available:
|
||||
There are a few approaches available:
|
||||
|
||||
- Use SendGrid (<http://sendgrid.com/>), which is very easy but is not free.
|
||||
- Run your own MTA, which can be quite harrowing to configure but is free.
|
||||
- Tell the Phabricator devteam about another service you'd like support for,
|
||||
this stuff is seriously terrible to configure on your own.
|
||||
| Receive Mail With | Setup | Cost | Notes |
|
||||
|--------|-------|------|-------|
|
||||
| Mailgun | Easy | Cheap | Recommended |
|
||||
| SendGrid | Easy | Cheap | |
|
||||
| Local MTA | Extremely Difficult | Free | Strongly discouraged! |
|
||||
|
||||
The remainder of this document walks through configuring Phabricator to
|
||||
receive mail, and then configuring your chosen transport to deliver mail
|
||||
to Phabricator.
|
||||
|
||||
= Configuring Phabricator =
|
||||
|
||||
By default, Phabricator uses a "noreply@phabricator.example.com" email address
|
||||
as the 'From' (configurable with ##metamta.default-address##) and sets
|
||||
By default, Phabricator uses a `noreply@phabricator.example.com` email address
|
||||
as the 'From' (configurable with `metamta.default-address`) and sets
|
||||
'Reply-To' to the user generating the email (e.g., by making a comment), if the
|
||||
mail was generated by a user action. This means that users can reply (or
|
||||
reply-all) to email to discuss changes, but the conversation won't be recorded
|
||||
@@ -36,24 +41,24 @@ over email, set these configuration keys:
|
||||
Maniphest.
|
||||
|
||||
Set these keys to some domain which you configure according to the instructions
|
||||
below, e.g. "##phabricator.example.com##". You can set these both to the same
|
||||
below, e.g. `phabricator.example.com`. You can set these both to the same
|
||||
domain, and will generally want to. Once you set these keys, emails will use a
|
||||
'Reply-To' like "##T123+273+af310f9220ad@example.com##", which -- when
|
||||
'Reply-To' like `T123+273+af310f9220ad@example.com`, which -- when
|
||||
configured correctly, according to the instructions below -- will parse incoming
|
||||
email and allow users to interact with Maniphest tasks and Differential
|
||||
revisions over email.
|
||||
|
||||
If you don't want phabricator to take up an entire domain (or subdomain) you
|
||||
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'
|
||||
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".
|
||||
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
|
||||
this, set ##metamta.maniphest.public-create-email## in your configuration. This
|
||||
this, set `metamta.maniphest.public-create-email` in your configuration. This
|
||||
has some mild security implications, see below.
|
||||
|
||||
= Security =
|
||||
@@ -77,9 +82,9 @@ project and need to interact with users whose email accounts you have no control
|
||||
over).
|
||||
|
||||
If you leak a bunch of reply-to addresses by accident, you can change
|
||||
##phabricator.mail-key## in your configuration to invalidate all the old hashes.
|
||||
`phabricator.mail-key` in your configuration to invalidate all the old hashes.
|
||||
|
||||
You can also set ##metamta.public-replies##, which will change how Phabricator
|
||||
You can also set `metamta.public-replies`, which will change how Phabricator
|
||||
delivers email. Instead of sending each recipient a unique mail with a personal
|
||||
reply-to address, it will send a single email to everyone with a public reply-to
|
||||
address. This decreases security because anyone who can spoof a "From" address
|
||||
@@ -88,7 +93,7 @@ practically, is a reasonable setting for many installs. The reply-to address
|
||||
will still contain a hash unique to the object it represents, so users who have
|
||||
not received an email about an object can not blindly interact with it.
|
||||
|
||||
If you enable ##metamta.maniphest.public-create-email##, that address also uses
|
||||
If you enable `metamta.maniphest.public-create-email`, that address also uses
|
||||
the weaker "From" authentication mechanism.
|
||||
|
||||
NOTE: Phabricator does not currently attempt to verify "From" addresses because
|
||||
@@ -116,7 +121,18 @@ if your inbound email configuration is incorrect or even disabled.
|
||||
|
||||
Run `bin/mail help <command>` for detailed help on using these commands.
|
||||
|
||||
= SendGrid =
|
||||
= Mailgun Setup =
|
||||
|
||||
To use Mailgun, you need a Mailgun account. You can sign up at
|
||||
<http://www.mailgun.com>. Provided you have such an account, configure it
|
||||
like this:
|
||||
|
||||
- Configure a mail domain according to Mailgun's instructions.
|
||||
- Add a Mailgun route with a `catch_all()` rule which takes the action
|
||||
`forward("https://phabricator.example.com/mail/mailgun/")`. Replace the
|
||||
example domain with your actual domain.
|
||||
|
||||
= SendGrid Setup =
|
||||
|
||||
To use SendGrid, you need a SendGrid account with access to the "Parse API" for
|
||||
inbound email. Provided you have such an account, configure it like this:
|
||||
@@ -142,7 +158,7 @@ That's it! If everything is working properly you should be able to send email
|
||||
to ##anything@phabricator.example.com## and it should appear in
|
||||
`bin/mail list-inbound` within a few seconds.
|
||||
|
||||
= Installing Mailparse =
|
||||
= Local MTA: Installing Mailparse =
|
||||
|
||||
If you're going to run your own MTA, you need to install the PECL mailparse
|
||||
extension. In theory, you can do that with:
|
||||
@@ -165,7 +181,7 @@ If you get a linker error like this:
|
||||
mailparse.so. This is not the default if you have individual files in
|
||||
##php.d/##.
|
||||
|
||||
= MTA: Configuring Sendmail =
|
||||
= Local MTA: Configuring Sendmail =
|
||||
|
||||
Before you can configure Sendmail, you need to install Mailparse. See the
|
||||
section "Installing Mailparse" above.
|
||||
@@ -199,7 +215,7 @@ That will forward all mail to @yourdomain.com to the Phabricator processing
|
||||
script. Run ##sudo /etc/mail/make## or similar and then restart sendmail with
|
||||
##sudo /etc/init.d/sendmail restart##.
|
||||
|
||||
= MTA: Configuring Lamson =
|
||||
= Local MTA: Configuring Lamson =
|
||||
|
||||
Before you can configure Lamson, you need to install Mailparse. See the section
|
||||
"Installing Mailparse" above.
|
||||
|
||||
Reference in New Issue
Block a user