diff --git a/doc/config.rst b/doc/config.rst index 1df8eea55cd3efff6c9e3a1bd1bb2c9f5290812a..198356f10964001807645c6c9a4a0f653e8fdf09 100644 --- a/doc/config.rst +++ b/doc/config.rst @@ -58,12 +58,17 @@ not set by default. .. _config-email: EMAIL - The email address used in contact information on the website, as sender in - batch job notifications, and in communication with the NCBI webservices - using Entrez. + The email address used in contact information on the website and sent with + NCBI Entrez calls. `Default value:` ``mutalyzer@humgen.nl`` +BATCH_NOTIFICATION_EMAIL + The email address used as sender in batch job notifications. If set to + `None`, the value of :ref:`EMAIL <config-email>` will be used. + + `Default value:` `None` + .. _config-debug: DEBUG diff --git a/mutalyzer/Scheduler.py b/mutalyzer/Scheduler.py index 339d1ef55ff2db604597390f2b1274e071ad2143..81d952e4501e53a69eb39a649bfaed422cdc8692 100644 --- a/mutalyzer/Scheduler.py +++ b/mutalyzer/Scheduler.py @@ -98,14 +98,15 @@ class Scheduler() : if settings.TESTING: return - # Mail is set to '<IP ADDRESS>@webservice' if the batch job was - # submitted using the webservice without specifying an email address. - if mailTo.endswith('@webservice'): + # Mail is set to '<IP ADDRESS>@<INTERFACE>.mutalyzer' if the batch job + # was submitted without specifying an email address. + if mailTo.endswith('.mutalyzer'): return #TODO: Handle Connection errors in a try, except clause #Expected errors: socket.error + from_address = settings.BATCH_NOTIFICATION_EMAIL or settings.EMAIL download_url = website.url_for('batch_job_result', result_id=result_id) @@ -123,7 +124,7 @@ With kind regards, Mutalyzer batch scheduler""" % download_url) message["Subject"] = "Result of your Mutalyzer batch job" - message["From"] = settings.EMAIL + message["From"] = from_address message["To"] = mailTo try: @@ -138,7 +139,7 @@ Mutalyzer batch scheduler""" % download_url) return try: - smtpInstance.sendmail(settings.EMAIL, mailTo, message.as_string()) + smtpInstance.sendmail(from_address, mailTo, message.as_string()) except smtplib.SMTPRecipientsRefused as e: for address, (code, error) in e.recipients.items(): print 'Could not send email to %s: (%s) %s' % (address, diff --git a/mutalyzer/config/default_settings.py b/mutalyzer/config/default_settings.py index 4007fd0a5fc819099af9454d49b0e93153dfde36..5f3e6e05b4f2eb64c0de4e192abb8a59b8499c83 100644 --- a/mutalyzer/config/default_settings.py +++ b/mutalyzer/config/default_settings.py @@ -13,11 +13,14 @@ DEBUG = False # We are running unit tests. TESTING = False -# This address is used in contact information on the website, as sender in -# batch job notifications, and with retrieval of records at the NCBI using -# Entrez. +# This email address is used in contact information on the website and sent +# with NCBI Entrez calls. EMAIL = 'mutalyzer@humgen.nl' +# This email address is used as sender in batch job notifications. If `None`, +# the value of `EMAIL` will be used. +BATCH_NOTIFICATION_EMAIL = None + # The cache directory. Used to store uploaded and downloaded files (e.g., # reference files from NCBI or user) and batch job results. CACHE_DIR = '/tmp' diff --git a/mutalyzer/services/rpc.py b/mutalyzer/services/rpc.py index 3d3570ed69fb62484bc270d55e6b2508c5fba4db..4c9e5fdf7cc3b9e78499b7446c5d39607263353e 100644 --- a/mutalyzer/services/rpc.py +++ b/mutalyzer/services/rpc.py @@ -155,7 +155,7 @@ class MutalyzerService(ServiceBase): address = unicode(ctx.transport.req_env['REMOTE_ADDR']) except (AttributeError, KeyError): address = 'localhost' - email = '%s@webservice' % address + email = '%s@webservice.mutalyzer' % address result_id = scheduler.addJob(email, job, columns, batch_types[process], argument) diff --git a/mutalyzer/website/templates/batch-job-progress.html b/mutalyzer/website/templates/batch-job-progress.html index 77511f9dd300f7f862eb95e2752dadb933ce38fb..1044ad1a85ee02c04b6f22faaf28397db6767ff3 100644 --- a/mutalyzer/website/templates/batch-job-progress.html +++ b/mutalyzer/website/templates/batch-job-progress.html @@ -8,11 +8,14 @@ {% if result_id %} <div id="if_items_left"{% if not items_left %} style="display:none"{% endif %}> - <p>Your job is in progress with <span id="items_left">{{ items_left }}</span> items remaining.</p> - <p>You will receive an email when the job is finished.</p> + <p>Your job is in progress with <strong><span id="items_left">{{ items_left }}</span> items remaining</strong>.</p> <p>Please note that your jobs are processed in order of submission, meaning you will not see any progress on this job until all your earlier jobs have finished.</p> + <p>If you specified your email address, you will receive an email when the + job is finished. You can also bookmark <a href="{{ + url_for('.batch_job_progress', result_id=result_id) }}">this page</a> to + download your results later.</p> </div> <div id="ifnot_items_left"{% if items_left %} style="display:none"{% endif %}> <p>Your job is finished, please download the results: diff --git a/mutalyzer/website/templates/batch-jobs.html b/mutalyzer/website/templates/batch-jobs.html index 05b36fc364e4ad6b36e002f4e890e59428989b84..4877c5cc61ec4f558c51ec6541ebf8fe32b3aecc 100644 --- a/mutalyzer/website/templates/batch-jobs.html +++ b/mutalyzer/website/templates/batch-jobs.html @@ -37,10 +37,11 @@ </div> <div class="form-group"> - <label for="email">Email address</label> - <input name="email" id="email" type="email" class="form-control with-mailcheck" + <label for="email">Email address (optional)</label> + <input name="email" id="email" type="email" + class="form-control with-mailcheck" placeholder="Email address (notification will be sent here)" - required value="{{ email }}"> + value="{{ email }}"> </div> <div class="form-group"> diff --git a/mutalyzer/website/views.py b/mutalyzer/website/views.py index 9fb3e4a39b11b882f20b15c89c3d96d2b0bbbfe5..f3814c31005c6c035ffb8c0afebdc15cb9696f7f 100644 --- a/mutalyzer/website/views.py +++ b/mutalyzer/website/views.py @@ -907,7 +907,7 @@ def batch_jobs_submit(): errors = [] if not email: - errors.append('Please provide an email address.') + email = '{}@website.mutalyzer'.format(request.remote_addr) if job_type not in BATCH_JOB_TYPES: errors.append('Invalid batch job type.')