summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerghei Mihai <smihai@entrouvert.com>2016-04-09 13:49:16 (GMT)
committerSerghei Mihai <smihai@entrouvert.com>2016-04-12 08:41:04 (GMT)
commitd7d78c74914257c5e73ec219069053338ac54d70 (patch)
treeb10f9c11139d29474eb0ed9c65e422d3ab5371ac
parentc25ddea70fcd032e26530c31402e3ff847d4d2c6 (diff)
downloadmail2redmine-d7d78c74914257c5e73ec219069053338ac54d70.zip
mail2redmine-d7d78c74914257c5e73ec219069053338ac54d70.tar.gz
mail2redmine-d7d78c74914257c5e73ec219069053338ac54d70.tar.bz2
forward email to custom fallback address (#10528)
-rw-r--r--mail2redmine.py90
1 files changed, 39 insertions, 51 deletions
diff --git a/mail2redmine.py b/mail2redmine.py
index 4b17bef..9582c0f 100644
--- a/mail2redmine.py
+++ b/mail2redmine.py
@@ -6,6 +6,7 @@ import email
import tempfile
import uuid
import smtplib
+import subprocess
from redmine import Redmine
@@ -13,6 +14,7 @@ REDMINE_URL = os.environ.get('REDMINE_URL', 'https://dev.entrouvert.org')
REDMINE_KEY = os.environ.get('REDMINE_KEY')
TRACKER_ID = os.environ.get('REDMINE_TRACKER', '3')
PROJECT_ID = os.environ.get('PROJECT')
+FALLBACK_EMAIL = os.environ.get('FALLBACK_EMAIL', 'support@entrouvert.com')
class UnknownUser(Exception):
@@ -56,72 +58,58 @@ def send_mail(to, subject, message):
s.quit()
-def create_ticket(mail):
- try:
- mail = email.message_from_string(mail)
- r = Redmine(REDMINE_URL, key=REDMINE_KEY)
- from_name, from_email = email.utils.parseaddr(mail['From'])
- users = r.user.filter(name=from_email)
- if not users:
- raise UnknownUser
-
- r = Redmine(REDMINE_URL, key=REDMINE_KEY, impersonate=users[0].login)
-
- attachments = []
-
- for data in mail.walk():
- attachment = parse_attachment(data)
- if attachment:
- attachments.append(attachment)
- elif data.get_content_type() == "text/plain":
- body = data.get_payload(decode=True)
- body = unicode(body, data.get_content_charset('utf-8')).encode('utf-8')
-
- issue = r.issue.create(project_id=PROJECT_ID,
- subject=parse_header(mail['Subject']),
- tracker_id=TRACKER_ID,
- description=body,
- uploads=attachments)
- message = u"""Bonjour,
-
-Votre demande a bien été prise en compte et enregistrée dans notre système sous
-le numéro %s.
+def create_ticket(email):
+ mail = email.message_from_string(email)
+ r = Redmine(REDMINE_URL, key=REDMINE_KEY)
+ from_name, from_email = email.utils.parseaddr(mail['From'])
+ users = r.user.filter(name=from_email)
+ if not users:
+ raise UnknownUser
-Vous pouvez suivre son évolution à l'adresse : %s .
+ r = Redmine(REDMINE_URL, key=REDMINE_KEY, impersonate=users[0].login)
-Cordialement,
+ attachments = []
-L'équipe Entr'ouvert"""
- message = message % (issue.id, issue.url)
- send_mail(mail['From'], u'Votre demande a été bien prise en compte', message)
- # cleanup temporary attachment files
- for attachment in attachments:
- if os.path.exists(attachment['path']):
- os.unlink(attachment['path'])
- except Exception, e:
- message = u"""Bonjour,
+ for data in mail.walk():
+ attachment = parse_attachment(data)
+ if attachment:
+ attachments.append(attachment)
+ elif data.get_content_type() == "text/plain":
+ body = data.get_payload(decode=True)
+ body = unicode(body, data.get_content_charset('utf-8')).encode('utf-8')
-Malheureusement nous ne sommes pas en mesure de prendre en compte votre demande
-pour une des raisons suivantes :
+ issue = r.issue.create(project_id=PROJECT_ID,
+ subject=parse_header(mail['Subject']),
+ tracker_id=TRACKER_ID,
+ description=body,
+ uploads=attachments)
+ message = u"""Bonjour,
- - vous ne disposez pas de compte sur notre plateforme;
- - vous n'avez pas les droits d'accès au projet;
+Votre demande a bien été prise en compte et enregistrée dans notre système sous
+le numéro %s.
-Veuillez vous assurer que vous remplissez les condition et re-essayez.
+Vous pouvez suivre son évolution à l'adresse : %s .
Cordialement,
L'équipe Entr'ouvert"""
- send_mail(mail['From'], u'Rejet de votre demande', message)
+ message = message % (issue.id, issue.url)
+ send_mail(mail['From'], u'Votre demande a été bien prise en compte', message)
+ # cleanup temporary attachment files
+ for attachment in attachments:
+ if os.path.exists(attachment['path']):
+ os.unlink(attachment['path'])
if __name__ == '__main__':
-
- mail = sys.stdin.read()
+ email = sys.stdin.read()
mail_dumps_dir = '/var/tmp'
if not os.path.exists(mail_dumps_dir):
os.mkdir(mail_dumps_dir)
filename = os.path.join(mail_dumps_dir, '%s.mail' % uuid.uuid4())
with open(filename, 'w') as mail_dump:
- mail_dump.write(mail)
- create_ticket(mail)
+ mail_dump.write(email)
+ try:
+ create_ticket(email)
+ except:
+ exim = subprocess.Popen(['/usr/sbin/exim', FALLBACK_EMAIL], stdin=file(filename))