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 |