From d33c534944a485474068c1c074d3abe26dacdf88 Mon Sep 17 00:00:00 2001 From: Cameron Hyde Date: Fri, 5 Jan 2024 08:32:33 +1000 Subject: [PATCH] Reply-to user email on tool error email --- lib/galaxy/config/schemas/config_schema.yml | 8 ++++++++ lib/galaxy/tools/errors.py | 3 ++- lib/galaxy/util/__init__.py | 10 ++++++++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/galaxy/config/schemas/config_schema.yml b/lib/galaxy/config/schemas/config_schema.yml index e66696aec4aa..fc2918f2b3af 100644 --- a/lib/galaxy/config/schemas/config_schema.yml +++ b/lib/galaxy/config/schemas/config_schema.yml @@ -1159,6 +1159,14 @@ mapping: set. Also this email is shown as a contact to user in case of Galaxy misconfiguration and other events user may encounter. + error_email_reply_to_user: + type: bool + required: false + desc: | + When sending email reports for tool errors, include the user's email address + in the Reply-to SMTP header (used by some ticketing systems to identify the + appropriate response address). + email_from: type: str required: false diff --git a/lib/galaxy/tools/errors.py b/lib/galaxy/tools/errors.py index da55ef82eaed..deddd5bb72f2 100644 --- a/lib/galaxy/tools/errors.py +++ b/lib/galaxy/tools/errors.py @@ -253,6 +253,7 @@ def _send_report(self, user, email=None, message=None, **kwd): except Exception: pass + reply_to = user.email if self.app.config.error_email_reply_to_user else None return util.send_mail( - self.app.config.email_from, to, subject, self.report, self.app.config, html=self.html_report + self.app.config.email_from, to, subject, self.report, self.app.config, html=self.html_report, reply_to=reply_to ) diff --git a/lib/galaxy/util/__init__.py b/lib/galaxy/util/__init__.py index 20c113861ae1..f0f9922ca172 100644 --- a/lib/galaxy/util/__init__.py +++ b/lib/galaxy/util/__init__.py @@ -1506,7 +1506,7 @@ def size_to_bytes(size): raise ValueError(f"Unknown multiplier '{multiple}' in '{size}'") -def send_mail(frm, to, subject, body, config, html=None): +def send_mail(frm, to, subject, body, config, html=None, reply_to=None): """ Sends an email. @@ -1527,7 +1527,10 @@ def send_mail(frm, to, subject, body, config, html=None): :type html: str :param html: Alternative HTML representation of the body content. If - provided will convert the message to a MIMEMultipart. (Default 'None') + provided will convert the message to a MIMEMultipart. (Default None) + + :type reply_to: str + :param reply_to: Reply-to address (Default None) """ to = listify(to) @@ -1551,6 +1554,9 @@ def send_mail(frm, to, subject, body, config, html=None): msg.attach(mp_text) msg.attach(mp_html) + if reply_to: + msg["Reply-To"] = reply_to + smtp_ssl = asbool(getattr(config, "smtp_ssl", False)) if smtp_ssl: s = smtplib.SMTP_SSL(config.smtp_server)