If your provider or server supports email sub-addressing, we recommend using it.

Sub-addressing is a feature where any email to [email protected] will end up in the mailbox for [email protected], and is supported by providers such as Gmail, Google Apps, Yahoo! Mail, Outlook.com and iCloud, as well as the Postfix mail server which you can run on-premises.

When GitLab sends a notification and Reply by email is enabled, the Reply-To header is set to the address defined in your GitLab configuration, with the %{key} placeholder (if present) replaced by a specific "reply key". In addition, this "reply key" is also added to the References header.

Find the incoming_email section in /etc/gitlab/gitlab.rb, enable the feature and fill in the details for your specific IMAP server and email account:

# Configuration for Postfix mail server, assumes mailbox [email protected]
gitlab_rails['incoming_email_enabled'] = true# The email address including the `%{key}` placeholder that will be replaced to reference the item being replied to.# The placeholder can be omitted but if present, it must appear in the "user" part of the address (before the `@`).
gitlab_rails['incoming_email_address'] = "incoming+%{key}@gitlab.example.com"# Email account username# With third party providers, this is usually the full email address.# With self-hosted email servers, this is usually the user part of the email address.
gitlab_rails['incoming_email_email'] = "incoming"# Email account password
gitlab_rails['incoming_email_password'] = "[REDACTED]"# IMAP server host
gitlab_rails['incoming_email_host'] = "gitlab.example.com"# IMAP server port
gitlab_rails['incoming_email_port'] = 143# Whether the IMAP server uses SSL
gitlab_rails['incoming_email_ssl'] = false# Whether the IMAP server uses StartTLS
gitlab_rails['incoming_email_start_tls'] = false# The mailbox where incoming mail will end up. Usually "inbox".
gitlab_rails['incoming_email_mailbox_name'] = "inbox"# The IDLE command timeout.
gitlab_rails['incoming_email_idle_timeout'] = 60

# Configuration for Gmail / Google Apps, assumes mailbox [email protected]
gitlab_rails['incoming_email_enabled'] = true# The email address including the `%{key}` placeholder that will be replaced to reference the item being replied to.# The placeholder can be omitted but if present, it must appear in the "user" part of the address (before the `@`).
gitlab_rails['incoming_email_address'] = "gitlab-incoming+%{key}@gmail.com"# Email account username# With third party providers, this is usually the full email address.# With self-hosted email servers, this is usually the user part of the email address.
gitlab_rails['incoming_email_email'] = "[email protected]"# Email account password
gitlab_rails['incoming_email_password'] = "[REDACTED]"# IMAP server host
gitlab_rails['incoming_email_host'] = "imap.gmail.com"# IMAP server port
gitlab_rails['incoming_email_port'] = 993# Whether the IMAP server uses SSL
gitlab_rails['incoming_email_ssl'] = true# Whether the IMAP server uses StartTLS
gitlab_rails['incoming_email_start_tls'] = false# The mailbox where incoming mail will end up. Usually "inbox".
gitlab_rails['incoming_email_mailbox_name'] = "inbox"# The IDLE command timeout.
gitlab_rails['incoming_email_idle_timeout'] = 60

Reconfigure GitLab and restart mailroom for the changes to take effect:

Find the incoming_email section in config/gitlab.yml, enable the feature and fill in the details for your specific IMAP server and email account:

sudo editor config/gitlab.yml

# Configuration for Postfix mail server, assumes mailbox [email protected]incoming_email:enabled: true
# The email address including the `%{key}` placeholder that will be replaced to reference the item being replied to.# The placeholder can be omitted but if present, it must appear in the "user" part of the address (before the `@`).address: "incoming+%{key}@gitlab.example.com"
# Email account username# With third party providers, this is usually the full email address.# With self-hosted email servers, this is usually the user part of the email address.user: "incoming"
# Email account passwordpassword: "[REDACTED]"
# IMAP server hosthost: "gitlab.example.com"
# IMAP server portport: 143
# Whether the IMAP server uses SSLssl: false
# Whether the IMAP server uses StartTLSstart_tls: false
# The mailbox where incoming mail will end up. Usually "inbox".mailbox: "inbox"
# The IDLE command timeout.idle_timeout: 60

# Configuration for Gmail / Google Apps, assumes mailbox [email protected]incoming_email:enabled: true
# The email address including the `%{key}` placeholder that will be replaced to reference the item being replied to.# The placeholder can be omitted but if present, it must appear in the "user" part of the address (before the `@`).address: "gitlab-incoming+%{key}@gmail.com"
# Email account username# With third party providers, this is usually the full email address.# With self-hosted email servers, this is usually the user part of the email address.user: "[email protected]"
# Email account passwordpassword: "[REDACTED]"
# IMAP server hosthost: "imap.gmail.com"
# IMAP server portport: 993
# Whether the IMAP server uses SSLssl: true
# Whether the IMAP server uses StartTLSstart_tls: false
# The mailbox where incoming mail will end up. Usually "inbox".mailbox: "inbox"
# The IDLE command timeout.idle_timeout: 60

Find the incoming_email section in config/gitlab.yml, enable the feature and fill in the details for your specific IMAP server and email account:

# Configuration for Gmail / Google Apps, assumes mailbox [email protected]incoming_email:enabled: true
# The email address including the `%{key}` placeholder that will be replaced to reference the item being replied to.# The placeholder can be omitted but if present, it must appear in the "user" part of the address (before the `@`).address: "gitlab-incoming+%{key}@gmail.com"
# Email account username# With third party providers, this is usually the full email address.# With self-hosted email servers, this is usually the user part of the email address.user: "[email protected]"
# Email account passwordpassword: "[REDACTED]"
# IMAP server hosthost: "imap.gmail.com"
# IMAP server portport: 993
# Whether the IMAP server uses SSLssl: true
# Whether the IMAP server uses StartTLSstart_tls: false
# The mailbox where incoming mail will end up. Usually "inbox".mailbox: "inbox"
# The IDLE command timeout.idle_timeout: 60

As mentioned, the part after + is ignored, and this will end up in the mailbox for [email protected].