RedmineReceivingEmails » History » Version 92

Alexander Meindl, 2018-09-04 11:52
Restore content

1 92 Alexander Meindl
h1. Receiving emails
2 92 Alexander Meindl
3 92 Alexander Meindl
{{>toc}}
4 92 Alexander Meindl
5 92 Alexander Meindl
Redmine can be configured to allow issue creation or comments via email. It is also able to recognize and incorporate email replies to forum messages.
6 92 Alexander Meindl
7 92 Alexander Meindl
h2. Setup
8 92 Alexander Meindl
9 92 Alexander Meindl
You can configure Redmine to receive emails in one of the following ways:
10 92 Alexander Meindl
11 92 Alexander Meindl
* Forwarding emails from your email server:
12 92 Alexander Meindl
13 92 Alexander Meindl
  * Pros: works with a remote mail server, email are processed instantly, fast (no environment reloading)
14 92 Alexander Meindl
  * Cons: needs some configuration on your mail transfer agent (eg. Postfix, Sendmail...)
15 92 Alexander Meindl
16 92 Alexander Meindl
* Fetching emails from an IMAP or POP3 server:
17 92 Alexander Meindl
18 92 Alexander Meindl
  * Pros: easy to setup, no need to configure your MTA, works with a remote mail server
19 92 Alexander Meindl
  * Cons: emails are not processed instantly (a cron job needs to be added to read emails periodically)
20 92 Alexander Meindl
21 92 Alexander Meindl
* Reading emails from standard input:
22 92 Alexander Meindl
23 92 Alexander Meindl
  * Pros: fine for testing purpose
24 92 Alexander Meindl
  * Cons: slow (the environment is reloaded each time an email is read), needs some configuration on your MTA
25 92 Alexander Meindl
26 92 Alexander Meindl
h3. Forwarding emails from your email server
27 92 Alexander Meindl
28 92 Alexander Meindl
A standalone script can be used to forward incoming emails from your mail server.
29 92 Alexander Meindl
This script reads a raw email from the standard input and forwards it to Redmine via a HTTP request.
30 92 Alexander Meindl
It can be found in your redmine directory: @extra/mail_handler/rdm-mailhandler.rb@.
31 92 Alexander Meindl
32 92 Alexander Meindl
In order to use it, you have to enable the API that receive emails:
33 92 Alexander Meindl
Go to _Application settings_ -> _Incoming emails_, check *Enable WS for incoming emails* and enter or generate a secret key.
34 92 Alexander Meindl
35 92 Alexander Meindl
36 92 Alexander Meindl
37 92 Alexander Meindl
38 92 Alexander Meindl
39 92 Alexander Meindl
40 92 Alexander Meindl
41 92 Alexander Meindl
42 92 Alexander Meindl
43 92 Alexander Meindl
Copy @rdm-mailhandler.rb@ to your mail server, make sure its permissions allow execution (@chmod +x rdm-mailhandler.rb@), and configure your MTA (Mail Transport Agent).
44 92 Alexander Meindl
45 92 Alexander Meindl
Usage:
46 92 Alexander Meindl
47 92 Alexander Meindl
<pre>
48 92 Alexander Meindl
Usage: rdm-mailhandler.rb [options] --url=<Redmine URL> --key=<API key>
49 92 Alexander Meindl
50 92 Alexander Meindl
Required arguments:
51 92 Alexander Meindl
    -u, --url URL               URL of the Redmine server
52 92 Alexander Meindl
    -k, --key KEY               Redmine API key
53 92 Alexander Meindl
54 92 Alexander Meindl
General options:
55 92 Alexander Meindl
        --key-file FILE         full path to a file that contains your Redmine
56 92 Alexander Meindl
                                API key (use this option instead of --key if
57 92 Alexander Meindl
                                you don't want the key to appear in the command
58 92 Alexander Meindl
                                line)
59 92 Alexander Meindl
        --no-check-certificate  do not check server certificate
60 92 Alexander Meindl
        --certificate-bundle FILE
61 92 Alexander Meindl
                                certificate bundle to use
62 92 Alexander Meindl
    -h, --help                  show this help
63 92 Alexander Meindl
    -v, --verbose               show extra information
64 92 Alexander Meindl
    -V, --version               show version information and exit
65 92 Alexander Meindl
66 92 Alexander Meindl
User and permissions options:
67 92 Alexander Meindl
        --unknown-user ACTION   how to handle emails from an unknown user
68 92 Alexander Meindl
                                ACTION can be one of the following values:
69 92 Alexander Meindl
                                * ignore: email is ignored (default)
70 92 Alexander Meindl
                                * accept: accept as anonymous user
71 92 Alexander Meindl
                                * create: create a user account
72 92 Alexander Meindl
        --no-permission-check   disable permission checking when receiving
73 92 Alexander Meindl
                                the email
74 92 Alexander Meindl
        --default-group GROUP   add created user to GROUP (none by default)
75 92 Alexander Meindl
                                GROUP can be a comma separated list of groups
76 92 Alexander Meindl
        --no-account-notice     don't send account information to the newly
77 92 Alexander Meindl
                                created user
78 92 Alexander Meindl
        --no-notification       disable email notifications for the created
79 92 Alexander Meindl
                                user
80 92 Alexander Meindl
81 92 Alexander Meindl
Issue attributes control options:
82 92 Alexander Meindl
        --project-from-subaddress ADDR
83 92 Alexander Meindl
                                select project from subaddress of ADDR found
84 92 Alexander Meindl
                                in To, Cc, Bcc headers
85 92 Alexander Meindl
    -p, --project PROJECT       identifier of the target project
86 92 Alexander Meindl
    -s, --status STATUS         name of the target status
87 92 Alexander Meindl
    -t, --tracker TRACKER       name of the target tracker
88 92 Alexander Meindl
        --category CATEGORY     name of the target category
89 92 Alexander Meindl
        --priority PRIORITY     name of the target priority
90 92 Alexander Meindl
        --assigned-to ASSIGNEE  assignee (username or group name)
91 92 Alexander Meindl
        --fixed-version VERSION name of the target version
92 92 Alexander Meindl
        --private               create new issues as private
93 92 Alexander Meindl
    -o, --allow-override ATTRS  allow email content to set attributes values
94 92 Alexander Meindl
                                ATTRS is a comma separated list of attributes
95 92 Alexander Meindl
                                or 'all' to allow all attributes to be
96 92 Alexander Meindl
                                overridable (see below for details)
97 92 Alexander Meindl
</pre>
98 92 Alexander Meindl
99 92 Alexander Meindl
See [[RedmineReceivingEmails#Issue-attributes|Issue-attributes]] for a list of values that can be used for the @--allow-override@ option.
100 92 Alexander Meindl
101 92 Alexander Meindl
Examples:
102 92 Alexander Meindl
103 92 Alexander Meindl
<pre>
104 92 Alexander Meindl
  # No project specified. Emails MUST contain the 'Project' keyword:
105 92 Alexander Meindl
  rdm-mailhandler.rb --url http://redmine.domain.foo --key secret
106 92 Alexander Meindl
  
107 92 Alexander Meindl
  # Fixed project and default tracker specified, but emails can override
108 92 Alexander Meindl
  # both tracker and priority attributes:
109 92 Alexander Meindl
  rdm-mailhandler.rb --url https://domain.foo/redmine --key secret \\
110 92 Alexander Meindl
                     --project foo \\
111 92 Alexander Meindl
                     --tracker bug \\
112 92 Alexander Meindl
                     --allow-override tracker,priority
113 92 Alexander Meindl
</pre>
114 92 Alexander Meindl
115 92 Alexander Meindl
Here is an example for a Postfix local alias entry:
116 92 Alexander Meindl
117 92 Alexander Meindl
<pre>
118 92 Alexander Meindl
foo: "|/path/to/rdm-mailhandler.rb --url http://redmine.domain --key secret --project foo"
119 92 Alexander Meindl
</pre>
120 92 Alexander Meindl
121 92 Alexander Meindl
This line should go in the aliases file, which is usually specified in @/etc/aliases@. If the location is unknown, use the command @postconf alias_maps@ to find out. After updating the aliases file, be sure to run @newaliases@ to alert Postfix of the new entry.
122 92 Alexander Meindl
123 92 Alexander Meindl
If your domain is setup as a virtual mailbox map (so that you use /etc/postfix/virtual_mailbox_maps to do mappings in the form @ user@example.com /path/example.com/user@) you should:
124 92 Alexander Meindl
125 92 Alexander Meindl
* create a mapping in @/etc/virtual@ like: @ foo@example.org foo@
126 92 Alexander Meindl
* modify @/etc/postfix/main.cf@ to specify a transport file: @transport_maps = hash:/etc/postfix/transport@
127 92 Alexander Meindl
* within the transport file add a line like: @ foo@example.org local:@
128 92 Alexander Meindl
129 92 Alexander Meindl
*Explanation:* - When you define virtual_mailbox_maps for a domain the default transport is virtual, which means specifying a local alias in @/etc/postfix/virtual@ will fail (with "unknown user"). To fix this, we override the default transport by specifying a local transport for the email address in question, which means the local alias will resolve correctly, and your script will be executed.
130 92 Alexander Meindl
131 92 Alexander Meindl
h3. Fetching emails from an IMAP server
132 92 Alexander Meindl
133 92 Alexander Meindl
A rake task (@redmine:email:receive_imap@) can be used to fetch incoming emails from an IMAP server. When you run the rake command from a cron job you can include the switch @-f /path/to/redmine/appdir/Rakefile@ on the rake command, because otherwise the rakefile is not found. This is an example line for a cron file that fetches mails every 30 minutes:
134 92 Alexander Meindl
135 92 Alexander Meindl
<pre>
136 92 Alexander Meindl
*/30 * * * * redmineuser rake -f /path/to/redmine/appdir/Rakefile redmine:email:receive_imap RAILS_ENV="production" host=imap.foo.bar username=redmine@somenet.foo password=xxx 
137 92 Alexander Meindl
</pre>
138 92 Alexander Meindl
139 92 Alexander Meindl
If your setup is working, but you receive mails from the cron daemon, you can suppress the output from the rake command by adding the --silent switch. That should stop cron sending mails on every execution of the command.
140 92 Alexander Meindl
141 92 Alexander Meindl
<pre>
142 92 Alexander Meindl
*/30 * * * * redmineuser rake -f /path/to/redmine/appdir/Rakefile --silent redmine:email:receive_imap RAILS_ENV="production" host=imap.foo.bar username=redmine@somenet.foo password=xxx 
143 92 Alexander Meindl
</pre>
144 92 Alexander Meindl
145 92 Alexander Meindl
The command has to go on a single line in your cronfile. Also see the other examples below, which only show the rake commands without the @-f@ option and without the cron part. 
146 92 Alexander Meindl
147 92 Alexander Meindl
For Windows as server "pycron":http://www.kalab.com/freeware/pycron/pycron.htm can be used to schedule a fetch task.
148 92 Alexander Meindl
149 92 Alexander Meindl
It can be necessary that you open the firewall on the machine for outgoing TCP connections to IMAP port 143.
150 92 Alexander Meindl
151 92 Alexander Meindl
Available IMAP options:
152 92 Alexander Meindl
<pre>
153 92 Alexander Meindl
  host=HOST                IMAP server host (default: 127.0.0.1)
154 92 Alexander Meindl
  port=PORT                IMAP server port (default: 143)
155 92 Alexander Meindl
  ssl=SSL                  Use SSL? (default: false)
156 92 Alexander Meindl
  starttls=STARTTLS        Use STARTTLS? (default: false)
157 92 Alexander Meindl
  username=USERNAME        IMAP account
158 92 Alexander Meindl
  password=PASSWORD        IMAP password
159 92 Alexander Meindl
  folder=FOLDER            IMAP folder to read (default: INBOX)
160 92 Alexander Meindl
  move_on_success=MAILBOX  move emails that were successfully received
161 92 Alexander Meindl
                           to MAILBOX instead of deleting them
162 92 Alexander Meindl
  move_on_failure=MAILBOX  move emails that were ignored to MAILBOX
163 92 Alexander Meindl
</pre>
164 92 Alexander Meindl
165 92 Alexander Meindl
User and permissions options:
166 92 Alexander Meindl
<pre>
167 92 Alexander Meindl
  unknown_user=ACTION      how to handle emails from an unknown user
168 92 Alexander Meindl
                           ACTION can be one of the following values:
169 92 Alexander Meindl
                           ignore: email is ignored (default)
170 92 Alexander Meindl
                           accept: accept as anonymous user
171 92 Alexander Meindl
                           create: create a user account
172 92 Alexander Meindl
  no_permission_check=1    disable permission checking when receiving
173 92 Alexander Meindl
                           the email
174 92 Alexander Meindl
  no_account_notice=1      disable new user account notification
175 92 Alexander Meindl
  default_group=foo,bar    adds created user to foo and bar groups
176 92 Alexander Meindl
</pre>
177 92 Alexander Meindl
178 92 Alexander Meindl
Issue attributes control options:
179 92 Alexander Meindl
<pre>
180 92 Alexander Meindl
  project=PROJECT          identifier of the target project
181 92 Alexander Meindl
  project_from_subaddress=ADDR
182 92 Alexander Meindl
                           select project from subaddress of ADDR found
183 92 Alexander Meindl
                           in To, Cc, Bcc headers
184 92 Alexander Meindl
  status=STATUS            name of the target status
185 92 Alexander Meindl
  tracker=TRACKER          name of the target tracker
186 92 Alexander Meindl
  category=CATEGORY        name of the target category
187 92 Alexander Meindl
  priority=PRIORITY        name of the target priority
188 92 Alexander Meindl
  assigned_to=ASSIGNEE     assignee (username or group name)
189 92 Alexander Meindl
  fixed_version=VERSION    name of the target version
190 92 Alexander Meindl
  private                  create new issues as private
191 92 Alexander Meindl
  allow_override=ATTRS     allow email content to set attributes values
192 92 Alexander Meindl
                           ATTRS is a comma separated list of attributes
193 92 Alexander Meindl
                           or 'all' to allow all attributes to be overridable
194 92 Alexander Meindl
</pre>
195 92 Alexander Meindl
196 92 Alexander Meindl
See [[RedmineReceivingEmails#Issue-attributes|Issue-attributes]] for a list of values that can be used for the @allow-override@ option.
197 92 Alexander Meindl
198 92 Alexander Meindl
Examples for the rake command:
199 92 Alexander Meindl
200 92 Alexander Meindl
<pre>
201 92 Alexander Meindl
  # No project specified. Emails MUST contain the 'Project' keyword:
202 92 Alexander Meindl
  
203 92 Alexander Meindl
  rake redmine:email:receive_imap RAILS_ENV="production" \\
204 92 Alexander Meindl
    host=imap.foo.bar username=redmine@somenet.foo password=xxx
205 92 Alexander Meindl
206 92 Alexander Meindl
207 92 Alexander Meindl
  # Fixed project and default tracker specified, but emails can override
208 92 Alexander Meindl
  # both tracker and priority attributes:
209 92 Alexander Meindl
  
210 92 Alexander Meindl
  rake redmine:email:receive_imap RAILS_ENV="production" \\
211 92 Alexander Meindl
    host=imap.foo.bar username=redmine@somenet.foo password=xxx ssl=1 \\
212 92 Alexander Meindl
    project=foo \\
213 92 Alexander Meindl
    tracker=bug \\
214 92 Alexander Meindl
    allow_override=tracker,priority
215 92 Alexander Meindl
216 92 Alexander Meindl
  # Move successful emails to the 'read' mailbox and failed emails to
217 92 Alexander Meindl
  # the 'failed' mailbox
218 92 Alexander Meindl
  
219 92 Alexander Meindl
  rake redmine:email:receive_imap RAILS_ENV="production" \\
220 92 Alexander Meindl
    host=imap.foo.bar username=redmine@somenet.foo password=xxx \\
221 92 Alexander Meindl
    move_on_success=read move_on_failure=failed
222 92 Alexander Meindl
223 92 Alexander Meindl
</pre>
224 92 Alexander Meindl
225 92 Alexander Meindl
226 92 Alexander Meindl
Ignored emails are marked as 'Seen' but are not deleted from the IMAP server--these include unknown user, unknown project and emails from the redmine emission account.
227 92 Alexander Meindl
228 92 Alexander Meindl
The option _allow_override_ is not only for overriding default values given to rake, but for every attribute in a mail. If you want to override the tracker in your mail you have to add _allow_override=tracker_ as a parameter.
229 92 Alexander Meindl
230 92 Alexander Meindl
h3. Fetching emails from a POP3 server
231 92 Alexander Meindl
232 92 Alexander Meindl
A rake task (@redmine:email:receive_pop3@) can be used to fetch incoming emails from a POP3 server.
233 92 Alexander Meindl
234 92 Alexander Meindl
Available POP3 options:
235 92 Alexander Meindl
<pre>
236 92 Alexander Meindl
  host=HOST                POP3 server host (default: 127.0.0.1)
237 92 Alexander Meindl
  port=PORT                POP3 server port (default: 110)
238 92 Alexander Meindl
  username=USERNAME        POP3 account
239 92 Alexander Meindl
  password=PASSWORD        POP3 password
240 92 Alexander Meindl
  apop=1                   use APOP authentication (default: false)
241 92 Alexander Meindl
  delete_unprocessed=1     delete messages that could not be processed
242 92 Alexander Meindl
                           successfully from the server (default
243 92 Alexander Meindl
                           behaviour is to leave them on the server)
244 92 Alexander Meindl
</pre>
245 92 Alexander Meindl
246 92 Alexander Meindl
See the [[RedmineReceivingEmails#Fetching-emails-from-an-IMAP-server|IMAP rake task]] above for issue attributes control options.
247 92 Alexander Meindl
248 92 Alexander Meindl
h3. Reading emails from standard input
249 92 Alexander Meindl
250 92 Alexander Meindl
A rake task (@redmine:email:read@) can be used to read a single raw email from the standard input.
251 92 Alexander Meindl
252 92 Alexander Meindl
See the [[RedmineReceivingEmails#Fetching-emails-from-an-IMAP-server|IMAP rake task]] above for issue attributes control options.
253 92 Alexander Meindl
254 92 Alexander Meindl
Examples:
255 92 Alexander Meindl
256 92 Alexander Meindl
<pre>
257 92 Alexander Meindl
  # No project specified. Emails MUST contain the 'Project' keyword:
258 92 Alexander Meindl
  rake redmine:email:read RAILS_ENV="production" < raw_email
259 92 Alexander Meindl
260 92 Alexander Meindl
  # Fixed project and default tracker specified, but emails can override
261 92 Alexander Meindl
  # both tracker and priority attributes:
262 92 Alexander Meindl
  rake redmine:email:read RAILS_ENV="production" \\
263 92 Alexander Meindl
                  project=foo \\
264 92 Alexander Meindl
                  tracker=bug \\
265 92 Alexander Meindl
                  allow_override=tracker,priority < raw_email
266 92 Alexander Meindl
</pre>
267 92 Alexander Meindl
268 92 Alexander Meindl
The option _allow_override_ is not only for overriding default values given to rake, but for every attribute in a mail. If you want to override the tracker in your mail you have to add _allow_override=tracker_ as a parameter.
269 92 Alexander Meindl
270 92 Alexander Meindl
h3. Enabling unknown users to create issues by email
271 92 Alexander Meindl
272 92 Alexander Meindl
Redmine has a feature that provides the ability to accept incoming emails from unknown users. In order to use this feature, an extra parameter has to be included:
273 92 Alexander Meindl
<pre>
274 92 Alexander Meindl
unknown_user=ACTION     how to handle emails from an unknown user where ACTION can be one of the following values:
275 92 Alexander Meindl
                        ignore: the email is ignored (default)
276 92 Alexander Meindl
                        accept: the sender is considered as an anonymous user and the email is accepted
277 92 Alexander Meindl
                        create: a user account is created for the sender (username/password are sent back to the user) and the email is accepted
278 92 Alexander Meindl
</pre>
279 92 Alexander Meindl
280 92 Alexander Meindl
Permissions have to be consistent with the chosen option. E.g. if you choose 'create', the 'Non member' role must have the 'Add issues' permission so that an issue can be created by an unknown user via email. If you choose 'accept', the 'Anonymous' role must have this permission.
281 92 Alexander Meindl
282 92 Alexander Meindl
If you receive emails via the rake task, the unknown-user option has to be written as:
283 92 Alexander Meindl
<pre>
284 92 Alexander Meindl
 unknown_user=[ignore|accept|create]
285 92 Alexander Meindl
</pre>
286 92 Alexander Meindl
287 92 Alexander Meindl
You can disable permission checking using the 'no_permission_check' option:
288 92 Alexander Meindl
<pre>
289 92 Alexander Meindl
no_permission_check=1   disable permission checking when receiving the email
290 92 Alexander Meindl
</pre>
291 92 Alexander Meindl
292 92 Alexander Meindl
This, together with the 'unknown-user', provides the ability to let anyone submit emails to a private project. For example:
293 92 Alexander Meindl
<pre>
294 92 Alexander Meindl
rdm-mailhandler.rb --unknown-user accept --no-permission-check --project=foo
295 92 Alexander Meindl
</pre>
296 92 Alexander Meindl
297 92 Alexander Meindl
will let anyone submit emails to a private project 'foo'.
298 92 Alexander Meindl
299 92 Alexander Meindl
TODO: Is this true and is this related to the @no_permission_check@ option?:
300 92 Alexander Meindl
> Since Redmine 0.9 the project doesn't have to be public, but authentication required in the Administration-> Settings->Authentication tab has to be unchecked.
301 92 Alexander Meindl
302 92 Alexander Meindl
If you do not want an "new account notification email" sent to every newly created user by rdm-mailhandler you must add the option "--no-account-notice". Is implemneted with version#60 in issue #11498. Now an example:
303 92 Alexander Meindl
<pre>
304 92 Alexander Meindl
rdm-mailhandler.rb --unknown-user accept --no-permission-check --project=foo --no-account-notice
305 92 Alexander Meindl
</pre>
306 92 Alexander Meindl
307 92 Alexander Meindl
h3. Schedule email receiving with Rufus Scheduler
308 92 Alexander Meindl
309 92 Alexander Meindl
Instead of using a cron to trigger the Rake task to retrieve incoming email, you can use Rufus Scheduler which will run the Rake task in the same process as Redmine.
310 92 Alexander Meindl
This is using less resources and faster than calling the Rake task from a cron (or from the Task Scheduler on Windows).
311 92 Alexander Meindl
312 92 Alexander Meindl
To do that, install rufus-scheduler gem:
313 92 Alexander Meindl
<pre>gem install rufus-scheduler</pre>
314 92 Alexander Meindl
315 92 Alexander Meindl
Create a what_you_want.rb file in /config/initializers/ and put the following content in your file. (Here for a POP3 account. Change it with your own parameters and own task.)
316 92 Alexander Meindl
<pre>
317 92 Alexander Meindl
require 'rubygems'
318 92 Alexander Meindl
require 'rake'
319 92 Alexander Meindl
require 'rufus-scheduler'
320 92 Alexander Meindl
321 92 Alexander Meindl
load File.join(Rails.root, 'Rakefile')
322 92 Alexander Meindl
323 92 Alexander Meindl
ENV['host']='pop.toto.com'
324 92 Alexander Meindl
ENV['port']='110'
325 92 Alexander Meindl
ENV['ssl']='SSL'
326 92 Alexander Meindl
ENV['username']='redmine@toto.com'
327 92 Alexander Meindl
ENV['password']='azerty123456'
328 92 Alexander Meindl
329 92 Alexander Meindl
scheduler = Rufus::Scheduler.new
330 92 Alexander Meindl
# Check emails every 10 mins
331 92 Alexander Meindl
scheduler.interval '10m' do
332 92 Alexander Meindl
  task = Rake.application['redmine:email:receive_pop3']
333 92 Alexander Meindl
  task.reenable
334 92 Alexander Meindl
  task.invoke 
335 92 Alexander Meindl
end
336 92 Alexander Meindl
</pre>
337 92 Alexander Meindl
338 92 Alexander Meindl
Restart your Redmine instance and your incoming emails will be retrieved on schedule.
339 92 Alexander Meindl
340 92 Alexander Meindl
You can check "Rufus-Scheduler":https://github.com/jmettraux/rufus-scheduler for scheduling syntax.
341 92 Alexander Meindl
342 92 Alexander Meindl
h2. How it works
343 92 Alexander Meindl
344 92 Alexander Meindl
When receiving an email, Redmine uses the From address of the email to find the corresponding user. Emails received from unknown or locked users are ignored.
345 92 Alexander Meindl
346 92 Alexander Meindl
If the email subject contains something like "Re: *[xxxxxxx !#123]*" or "[!#123]", the email is processed as a reply and a note is added to issue !#123. Otherwise, a new issue is created.
347 92 Alexander Meindl
348 92 Alexander Meindl
Note that, in order to create an issue, all required custom fields must be provided. Without them, issue creation will fail. As an alternative you can ensure that every custom field has a default value which is then used during issue creation.
349 92 Alexander Meindl
350 92 Alexander Meindl
h3. Target project
351 92 Alexander Meindl
352 92 Alexander Meindl
The target project can be specified using the @project@ option when receiving emails.  This should be the identifier of the project and *not* the name.  You can easily find the identifier in the URL.
353 92 Alexander Meindl
354 92 Alexander Meindl
If you don't use this option, users have to specify in the email body which project the issue should be added to. This can be done by inserting a line in the email body like this: @"Project: foo"@.
355 92 Alexander Meindl
356 92 Alexander Meindl
Example (email body):
357 92 Alexander Meindl
358 92 Alexander Meindl
<pre>
359 92 Alexander Meindl
This is a new issue that will be added to project foo.
360 92 Alexander Meindl
Here we have the issue description
361 92 Alexander Meindl
[...]
362 92 Alexander Meindl
363 92 Alexander Meindl
Project: foo
364 92 Alexander Meindl
</pre>
365 92 Alexander Meindl
366 92 Alexander Meindl
You can set a default project using the @project@ option and let users override this default project by using the @allow-override@ option when receiving emails.
367 92 Alexander Meindl
Example:
368 92 Alexander Meindl
369 92 Alexander Meindl
<pre>
370 92 Alexander Meindl
  # Create issues on project foo by default
371 92 Alexander Meindl
  rake redmine:email:receive_imap [...] project=foo allow_override=project
372 92 Alexander Meindl
</pre>
373 92 Alexander Meindl
374 92 Alexander Meindl
Of course, user permissions are checked and this email would be ignored if the user who sent this email is not allowed to add issues to project foo.
375 92 Alexander Meindl
Make sure that the target project doesn't use *required* custom fields with no default value for its issues, otherwise the creation of the issue will fail.
376 92 Alexander Meindl
377 92 Alexander Meindl
h3. Target Project from Email Sub-Address
378 92 Alexander Meindl
379 92 Alexander Meindl
This feature was introduced in ver 3.2.0 (SVN rev r14687). It may be preferable to have one mailbox for all incoming emails to a Redmine instance, instead of one per project. When receiving emails at redmine@somenet.foo, an email sent to redmine+foo@somenet.foo will cause the issue to be added to project with identifier foo.
380 92 Alexander Meindl
381 92 Alexander Meindl
To enable this feature add the @project_from_subaddress=redmine@somenet.foo@ to the command e.g.
382 92 Alexander Meindl
383 92 Alexander Meindl
<pre>
384 92 Alexander Meindl
    rake redmine:email:receive_imap [...] project_from_subaddress=redmine@somenet.foo
385 92 Alexander Meindl
</pre> 
386 92 Alexander Meindl
387 92 Alexander Meindl
If a project is included in the command-line then it becomes the default project that will be used for emails sent to @redmine@somenet.foo@. So with the command:
388 92 Alexander Meindl
389 92 Alexander Meindl
<pre>
390 92 Alexander Meindl
    rake redmine:email:receive_imap [...] project=bar project_from_subaddress=redmine@somenet.foo
391 92 Alexander Meindl
</pre> 
392 92 Alexander Meindl
393 92 Alexander Meindl
emails to @redmine@somenet.foo@ or @redmine+bar@somenet.foo@ will raise issues in project bar; emails to @redmine+foo@somenet.foo@ will go into project foo.
394 92 Alexander Meindl
395 92 Alexander Meindl
Some email providers include support for sub-addresses, as per RFCs 3598, 5233. Where this is not supported, forwarding mail addresses to the 'central' address, may work (it does in my case), ie set up an email address forwarding all mails to @redmine@somenet.foo@ from @redmine+foo@somenet.foo@, @redmine+bar@somenet.foo@ etc. This is easy to administer and does not require fetching emails from multiple accounts, each with its own account credentials.
396 92 Alexander Meindl
397 92 Alexander Meindl
h3. Issue attributes
398 92 Alexander Meindl
399 92 Alexander Meindl
Based on the options you use when receiving emails (see @allow-override@ option), users may be able to override some attributes when submitting an issue. 
400 92 Alexander Meindl
401 92 Alexander Meindl
Note: prior to Redmine version:"3.2.0" (#20543) some attributes were _always_ overridable, but this was not documented. This behavior has been changed and all attributes have to be explicitly listed with the @allow_override@ option to be overridable. For those who want all attributes to be overridable, @allow_override=all@ can now be used (#20543).
402 92 Alexander Meindl
403 92 Alexander Meindl
Once @allow_override@ has been configured, you can override those attributes by using the appropriate keywords in the email body.
404 92 Alexander Meindl
405 92 Alexander Meindl
Example keyword list:
406 92 Alexander Meindl
407 92 Alexander Meindl
* @Project@
408 92 Alexander Meindl
* @Tracker@
409 92 Alexander Meindl
* @Status@
410 92 Alexander Meindl
* @Category@
411 92 Alexander Meindl
* @Priority@
412 92 Alexander Meindl
* @Assigned to@
413 92 Alexander Meindl
* @Start date@
414 92 Alexander Meindl
* @Due date@
415 92 Alexander Meindl
* @Target version@
416 92 Alexander Meindl
* @Estimated hours@
417 92 Alexander Meindl
* @Done ratio@
418 92 Alexander Meindl
* @<Custom field name>@
419 92 Alexander Meindl
420 92 Alexander Meindl
The values available are the ones of the context. E.g. @Status@ available (for this Tracker and this Project) are labels in the localized language, exactly as displayed in the user interface or system default language (even with spaces, without quoting).
421 92 Alexander Meindl
422 92 Alexander Meindl
Example (email body):
423 92 Alexander Meindl
424 92 Alexander Meindl
<pre>
425 92 Alexander Meindl
This is a new issue that overrides a few attributes
426 92 Alexander Meindl
[...]
427 92 Alexander Meindl
428 92 Alexander Meindl
Project: foo
429 92 Alexander Meindl
Tracker: Bug
430 92 Alexander Meindl
Priority: Urgent
431 92 Alexander Meindl
Status: Resolved
432 92 Alexander Meindl
</pre>
433 92 Alexander Meindl
434 92 Alexander Meindl
The format for keywords differs from the allowed attribute values for the @allow_override@ option:
435 92 Alexander Meindl
436 92 Alexander Meindl
* @project@
437 92 Alexander Meindl
* @tracker@
438 92 Alexander Meindl
* @status@
439 92 Alexander Meindl
* @category@
440 92 Alexander Meindl
* @priority@
441 92 Alexander Meindl
* @assigned_to@
442 92 Alexander Meindl
* @start_date@
443 92 Alexander Meindl
* @due_date@
444 92 Alexander Meindl
* @fixed_version@ (aka. Target version)
445 92 Alexander Meindl
* @estimated_hours@
446 92 Alexander Meindl
* @done_ratio@
447 92 Alexander Meindl
* @<custom_field_name>@
448 92 Alexander Meindl
449 92 Alexander Meindl
Multiple attribute values can be specified in order to allow only certain keywords to be used.
450 92 Alexander Meindl
451 92 Alexander Meindl
Example:
452 92 Alexander Meindl
453 92 Alexander Meindl
<pre>
454 92 Alexander Meindl
  # Allow overriding project, tracker, status & priority
455 92 Alexander Meindl
  rake redmine:email:receive_imap [...] allow_override=project,tracker,status,priority
456 92 Alexander Meindl
</pre>
457 92 Alexander Meindl
458 92 Alexander Meindl
h3. Watchers
459 92 Alexander Meindl
460 92 Alexander Meindl
If the user who sends the email has the 'Add issue watchers' permission, users that are in To or Cc field of the email are automatically added as watchers of the created issue.
461 92 Alexander Meindl
462 92 Alexander Meindl
Watchers are added only when the issue is created. To or Cc fields are ignored on replies. See #7017 and #8009.
463 92 Alexander Meindl
464 92 Alexander Meindl
h3. Email format and attachments
465 92 Alexander Meindl
466 92 Alexander Meindl
Redmine tries to use the plain text part of the email to fill the description of the issue.
467 92 Alexander Meindl
If a HTML-only email is received, HTML tags are removed from its body.
468 92 Alexander Meindl
469 92 Alexander Meindl
Email attachments are automatically attached to the issue, unless their size exceeds the [[RedmineSettings#Attachment-max-size|maximum attachment size]] defined in the application settings.
470 92 Alexander Meindl
471 92 Alexander Meindl
h3. Truncate emails
472 92 Alexander Meindl
473 92 Alexander Meindl
The Administrator's settings may be used to automatically truncate emails, for example to eliminate quoted messages in forum replies. To do this, set the outgoing email header to something like @--Reply above this line--@ in the Email notifications settings. Then in the Incoming emails settings, enter the same line into the box "Truncate emails after one of these lines." (It is also possible to allow regex to be truncated)
474 92 Alexander Meindl
475 92 Alexander Meindl
h2. See also
476 92 Alexander Meindl
477 92 Alexander Meindl
* [[MailhandlerSubAddress|Mailhandler Frontend for SubAddressing]]: How to implement sub-addressing in Redmine <3.2