|  | = Gerrit Code Review - Email Notifications | 
|  |  | 
|  | == Description | 
|  |  | 
|  | Gerrit can automatically notify users by email when new changes are | 
|  | uploaded for review, after comments have been posted on a change, | 
|  | or after the change has been submitted to a branch. | 
|  |  | 
|  | [[recipient-types]] | 
|  | == Recipient Type | 
|  |  | 
|  | Those are the available recipient types: | 
|  |  | 
|  | * `TO`: The standard To field is used; addresses are visible to all. | 
|  | * `CC`: The standard CC field is used; addresses are visible to all. | 
|  | * `BCC`: SMTP RCPT TO is used to hide the address. | 
|  |  | 
|  | [[user]] | 
|  | == User Level Settings | 
|  |  | 
|  | Individual users can configure email subscriptions by editing | 
|  | watched projects through Settings > Watched Projects with the web UI. | 
|  |  | 
|  | Specific projects may be watched, or the special project | 
|  | `All-Projects` can be watched to watch all projects that | 
|  | are visible to the user. | 
|  |  | 
|  | link:user-search.html[Change search expressions] can be used to filter | 
|  | change notifications to specific subsets, for example `branch:master` | 
|  | to only see changes proposed for the master branch. If a filter would | 
|  | match at the `All-Projects` level as well as a specific project, the | 
|  | more specific project's notification settings are used. | 
|  |  | 
|  | Notification mails for new changes and new patch sets are not sent to | 
|  | the change owner. | 
|  |  | 
|  | Notification mails for comments added on changes are not sent to the user | 
|  | who added the comment unless the user has enabled the 'Every comment' | 
|  | option in the user preferences. | 
|  |  | 
|  |  | 
|  | [[project]] | 
|  | == Project Level Settings | 
|  |  | 
|  | Project owners and site administrators can configure project level | 
|  | notifications, enabling Gerrit Code Review to automatically send | 
|  | emails to team mailing lists, or groups of users. Project settings | 
|  | are stored inside of the `refs/meta/config` branch of each Git | 
|  | repository, and are placed inside of the `project.config` file. | 
|  |  | 
|  | To edit the project level notify settings, ensure the project owner | 
|  | has Push permission already granted for the `refs/meta/config` | 
|  | branch. Consult link:access-control.html[access controls] for | 
|  | details on how access permissions work. | 
|  |  | 
|  | Initialize a temporary Git repository to edit the configuration: | 
|  | ---- | 
|  | mkdir cfg_dir | 
|  | cd cfg_dir | 
|  | git init | 
|  | ---- | 
|  |  | 
|  | Download the existing configuration from Gerrit: | 
|  | ---- | 
|  | git fetch ssh://localhost:29418/project refs/meta/config | 
|  | git checkout FETCH_HEAD | 
|  | ---- | 
|  |  | 
|  | Enable notifications to an email address by adding to | 
|  | `project.config`, this can be done using the `git config` command: | 
|  | ---- | 
|  | git config -f project.config --add notify.team.email team-address@example.com | 
|  | git config -f project.config --add notify.team.email paranoid-manager@example.com | 
|  | ---- | 
|  |  | 
|  | Examining the project.config file with any text editor should show | 
|  | a new notify section describing the email addresses to deliver to: | 
|  | ---- | 
|  | [notify "team"] | 
|  | email = team-address@example.com | 
|  | email = paranoid-manager@example.com | 
|  | ---- | 
|  |  | 
|  | Each notify section within a single project.config file must have a | 
|  | unique name. The section name itself does not matter and may later | 
|  | appear in the web UI. Naming a section after the email address or | 
|  | group it delivers to is typical. Multiple sections can be specified | 
|  | if different filters are needed. | 
|  |  | 
|  | Commit the configuration change, and push it back: | 
|  | ---- | 
|  | git commit -a -m "Notify team-address@example.com of changes" | 
|  | git push ssh://localhost:29418/project HEAD:refs/meta/config | 
|  | ---- | 
|  |  | 
|  | [[notify.name.email]]notify.<name>.email:: | 
|  | + | 
|  | List of email addresses to send matching notifications to. Each | 
|  | email address should be placed on its own line. | 
|  | + | 
|  | Internal groups within Gerrit Code Review can also be named using | 
|  | `group NAME` syntax. If this format is used the group's UUID must | 
|  | also appear in the corresponding `groups` file. Gerrit will expand | 
|  | the group membership and BCC all current users. | 
|  |  | 
|  | [[notify.name.type]]notify.<name>.type:: | 
|  | + | 
|  | Types of notifications to send. If not specified, all notifications | 
|  | are sent. | 
|  | + | 
|  | * `new_changes`: Only newly created changes. | 
|  | * `new_patchsets`: Only newly created patch sets. | 
|  | * `all_comments`: Only comments on existing changes. | 
|  | * `submitted_changes`: Only changes that have been submitted. | 
|  | * `abandoned_changes`: Only changes that have been abandoned. | 
|  | * `all`: All notifications. | 
|  |  | 
|  | + | 
|  | Like email, this variable may be a list of options. | 
|  |  | 
|  | [[notify.name.header]]notify.<name>.header:: | 
|  | + | 
|  | Email header used to list the destination. If not set BCC is used. | 
|  | Only one value may be specified. To use different headers for each | 
|  | address list them in different notify blocks. | 
|  |  | 
|  | The possible options are the link:#recipient-types[recipient types]. | 
|  |  | 
|  | [[notify.name.filter]]notify.<name>.filter:: | 
|  | + | 
|  | link:user-search.html[Change search expression] to match changes that | 
|  | should be sent to the emails named in this section. Within a Git-style | 
|  | configuration file double quotes around complex operator values may | 
|  | need to be escaped, e.g. `filter = branch:\"^(maint|stable)-.*\"`. | 
|  | Single quotes are illegal and must be omitted. | 
|  |  | 
|  | When sending email to a bare email address in a notify block, Gerrit | 
|  | Code Review ignores read access controls and assumes the administrator | 
|  | has set the filtering options correctly. Project owners can implement | 
|  | security filtering by adding the `visibleto:groupname` predicate to | 
|  | the filter expression, for example: | 
|  |  | 
|  | ---- | 
|  | [notify "Developers"] | 
|  | email = team-address@example.com | 
|  | filter = visibleto:Developers | 
|  | ---- | 
|  |  | 
|  | When sending email to an internal group, the internal group's read | 
|  | access is automatically checked by Gerrit and therefore does not | 
|  | need to use the `visibleto:` operator in the filter. | 
|  |  | 
|  | [[footers]] | 
|  | == Email Footers | 
|  |  | 
|  | Notification emails related to changes include metadata about the change | 
|  | to support writing mail filters. This metadata is included in the form | 
|  | of footers in the message content. For HTML emails, these footers are | 
|  | hidden, but they can be examined by viewing the HTML source of messages. | 
|  |  | 
|  | In this way users may apply filters and rules to their incoming Gerrit | 
|  | notifications using the values of these footers. For example a Gmail | 
|  | filter to find emails regarding reviews that you are a reviewer of might | 
|  | take the following form. | 
|  |  | 
|  | ---- | 
|  | "Gerrit-Reviewer: Your Name <your.email@example.com>" | 
|  | ---- | 
|  |  | 
|  | [[Gerrit-MessageType]]Gerrit-MessageType:: | 
|  |  | 
|  | The message type footer states the type of the message and will take one | 
|  | of the following values. | 
|  |  | 
|  | * abandon | 
|  | * comment | 
|  | * deleteReviewer | 
|  | * deleteVote | 
|  | * merged | 
|  | * newchange | 
|  | * newpatchset | 
|  | * restore | 
|  | * revert | 
|  | * setassignee | 
|  |  | 
|  | [[Gerrit-Change-Id]]Gerrit-Change-Id:: | 
|  |  | 
|  | The change ID footer states the ID of the change, such as | 
|  | `I3443af49fcdc16ca941ee7cf2b5e33c1106f3b1d`. | 
|  |  | 
|  | [[Gerrit-Change-Number]]Gerrit-Change-Number:: | 
|  |  | 
|  | The change number footer states the numeric ID of the change, for | 
|  | example `92191`. | 
|  |  | 
|  | [[Gerrit-PatchSet]]Gerrit-PatchSet:: | 
|  |  | 
|  | The patch set footer states the number of the patch set that the email | 
|  | relates to. For example, a notification email for a vote being set on | 
|  | the seventh patch set will take a value of `7`. | 
|  |  | 
|  | [[Gerrit-Owner]]Gerrit-Owner:: | 
|  |  | 
|  | The owner footer states the name and email address of the change's | 
|  | owner. For example, `Owner Name <owner@example.com>`. | 
|  |  | 
|  | [[Gerrit-Reviewer]]Gerrit-Reviewer:: | 
|  |  | 
|  | The reviewer footers list the names and email addresses of the change's | 
|  | reviewrs. One footer is included for each reviewer. For example, if a | 
|  | change has two reviewers, the footers might include: | 
|  |  | 
|  | ---- | 
|  | Gerrit-Reviewer: Reviewer One <one@example.com> | 
|  | Gerrit-Reviewer: Reviewer Two <two@example.com> | 
|  | ---- | 
|  |  | 
|  | [[Gerrit-CC]]Gerrit-CC:: | 
|  |  | 
|  | The CC footers list the names and email addresses of those who have been | 
|  | CC'd on the change. One footer is included for each reviewer. For | 
|  | example, if a change CCs two users, the footers might include: | 
|  |  | 
|  | ---- | 
|  | Gerrit-CC: User One <one@example.com> | 
|  | Gerrit-CC: User Two <two@example.com> | 
|  | ---- | 
|  |  | 
|  | [[Gerrit-Project]]Gerrit-Project:: | 
|  |  | 
|  | The project footer states the project to which the change belongs. | 
|  |  | 
|  | [[Gerrit-Branch]]Gerrit-Branch:: | 
|  |  | 
|  | The branch footer states the abbreviated name of the branch that the | 
|  | change targets. | 
|  |  | 
|  | [[Gerrit-Comment-Date]]Gerrit-Comment-Date:: | 
|  |  | 
|  | In comment emails, the comment date footer states the date that the | 
|  | comment was posted. | 
|  |  | 
|  | [[Gerrit-HasComments]]Gerrit-HasComments:: | 
|  |  | 
|  | In comment emails, the has-comments footer states whether inline | 
|  | comments had been posted in that notification using "Yes" or "No", for | 
|  | example `Gerrit-HasComments: Yes`. | 
|  |  | 
|  | [[Gerrit-HasLabels]]Gerrit-HasLabels:: | 
|  |  | 
|  | In comment emails, the has-labels footer states whether label votes had | 
|  | been posted in that notification using "Yes" or "No", for | 
|  | example `Gerrit-HasLabels: No`. | 
|  |  | 
|  | [[Gerrit-Comment-In-Reply-To]]Gerrit-Comment-In-Reply-To:: | 
|  |  | 
|  | In comment emails, a comment-in-reply-to footer is present for each | 
|  | account who has a comment that is replied-to in that set of comments. | 
|  | For example, to apply a filter to Gerrit messages in which your own diff | 
|  | comments are responded to, you might search for the following: | 
|  |  | 
|  | ---- | 
|  | Gerrit-Comment-In-Reply-To: User Name <user@example.com> | 
|  | ---- | 
|  |  | 
|  | GERRIT | 
|  | ------ | 
|  | Part of link:index.html[Gerrit Code Review] | 
|  |  | 
|  | SEARCHBOX | 
|  | --------- |