diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example index e78429b29a3..c7b60a1d4b1 100644 --- a/config/gitlab.yml.example +++ b/config/gitlab.yml.example @@ -95,6 +95,8 @@ production: &base # repository_downloads_path: tmp/repositories ## Reply by email + # Allow users to comment on issues and merge requests by replying to notification emails. + # For documentation on how to set this up, see http://doc.gitlab.com/ce/reply_by_email/README.md reply_by_email: enabled: false address: "replies+%{reply_key}@gitlab.example.com" diff --git a/config/mail_room.yml.example b/config/mail_room.yml.example index a7a6a25362e..28366eb7394 100644 --- a/config/mail_room.yml.example +++ b/config/mail_room.yml.example @@ -1,14 +1,25 @@ :mailboxes: - # - - # :host: "imap.gmail.com" - # :port: 993 - # :ssl: true - # :email: "replies@gitlab.example.com" - # :password: "password" - # :name: "inbox" - # :delivery_method: sidekiq - # :delivery_options: - # :redis_url: redis://localhost:6379 - # :namespace: resque:gitlab - # :queue: incoming_email - # :worker: EmailReceiverWorker + - + # # IMAP server host + # :host: "imap.gmail.com" + # # IMAP server port + # :port: 993 + # # Whether the IMAP server uses SSL + # :ssl: true + # # Email account username. Usually the full email address. + # :email: "replies@gitlab.example.com" + # # Email account password + # :password: "password" + # # The name of the mailbox where incoming mail will end up. Usually "inbox". + # :name: "inbox" + # # Always "sidekiq". + # :delivery_method: sidekiq + # :delivery_options: + # # The URL to the Redis server used by Sidekiq. Should match the URL in config/resque.yml. + # :redis_url: redis://localhost:6379 + # # Always "resque:gitlab". + # :namespace: resque:gitlab + # # Always "incoming_email". + # :queue: incoming_email + # # Always "EmailReceiverWorker" + # :worker: EmailReceiverWorker diff --git a/doc/README.md b/doc/README.md index 0524fda3ed6..337c4e6a62d 100644 --- a/doc/README.md +++ b/doc/README.md @@ -29,6 +29,7 @@ - [System hooks](system_hooks/system_hooks.md) Notifications when users, projects and keys are changed. - [Update](update/README.md) Update guides to upgrade your installation. - [Welcome message](customization/welcome_message.md) Add a custom welcome message to the sign-in page. +- [Reply by email](reply_by_email/README.md) Allow users to comment on issues and merge requests by replying to notification emails. ## Contributor documentation diff --git a/doc/reply_by_email/README.md b/doc/reply_by_email/README.md new file mode 100644 index 00000000000..fffc120d2bb --- /dev/null +++ b/doc/reply_by_email/README.md @@ -0,0 +1,85 @@ +# Reply by email + +GitLab can be set up to allow users to comment on issues and merge requests by replying to notification emails. + +In order to do this, you need access to an IMAP-enabled email account, with a provider or server that supports [email sub-addressing](https://en.wikipedia.org/wiki/Email_address#Sub-addressing). Sub-addressing is a feature where any email to `user+some_arbitrary_tag@example.com` will end up in the mailbox for `user@example.com`, and is supported by providers such as Gmail, Yahoo! Mail, Outlook.com and iCloud, as well as the [Postfix](http://www.postfix.org/) mail server which you can run on-premises. + +## Set it up + +In this example, we'll use the Gmail address `gitlab-replies@gmail.com`. If you're actually using Gmail with Reply by email, make sure you have [IMAP access enabled](https://support.google.com/mail/troubleshooter/1668960?hl=en#ts=1665018) and [allow less secure apps to access the account](https://support.google.com/accounts/answer/6010255). + +### Installations from source + + +1. Find the `reply_by_email` section in `config/gitlab.yml`, enable the feature and enter the email address including a placeholder for the `reply_key`: + + ```yaml + reply_by_email: + enabled: true + address: "gitlab-replies+%{reply_key}@gmail.com" + ``` + + As mentioned, the part after `+` is ignored, and this will end up in the mailbox for `gitlab-replies@gmail.com`. + +2. Find `config/mail_room.yml.example` and copy it to `config/mail_room.yml`: + + ```sh + cp config/mail_room.yml.example config/mail_room.yml + ``` + +3. Uncomment the configuration options in `config/mail_room.yml` and fill in the details for your specific IMAP server and email account: + + ```yaml + :mailboxes: + - + # IMAP server host + :host: "imap.gmail.com" + # IMAP server port + :port: 993 + # Whether the IMAP server uses SSL + :ssl: true + # Email account username. Usually the full email address. + :email: "gitlab-replies@gmail.com" + # Email account password + :password: "[REDACTED]" + # The name of the mailbox where incoming mail will end up. Usually "inbox". + :name: "inbox" + # Always "sidekiq". + :delivery_method: sidekiq + :delivery_options: + # The URL to the Redis server used by Sidekiq. Should match the URL in config/resque.yml. + :redis_url: redis://localhost:6379 + # Always "resque:gitlab". + :namespace: resque:gitlab + # Always "incoming_email". + :queue: incoming_email + # Always "EmailReceiverWorker" + :worker: EmailReceiverWorker + ``` + + +4. Find `lib/support/init.d/gitlab.default.example` and copy it to `/etc/default/gitlab`: + + ```sh + sudo cp lib/support/init.d/gitlab.default.example /etc/default/gitlab + ``` + +5. Edit `/etc/default/gitlab` to enable `mail_room`: + + ```sh + mail_room_enabled=true + ``` + +6. Restart GitLab + + ```sh + sudo service gitlab restart + ``` + +8. Reply by email should now be working. + +Note: If you're running GitLab in development mode and using `foreman`, make sure to also uncomment the `mail_room` line in your `Procfile`. + +### Omnibus package installations + +TODO