Coverage for girder/utility/mail_utils: 97%

# Coverage for girder/utility/mail_utils : 97%

## 33 statements 32 run 1 missing 0 excluded

Hot-keys on this page

r m x p toggle line displays

j k next/prev highlighted chunk

0 (zero) top of page

1 (one) first highlighted chunk

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #!/usr/bin/env python # -*- coding: utf-8 -*- ############################################################################### # Copyright 2014 Kitware Inc. # # Licensed under the Apache License, Version 2.0 ( the "License" ); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ############################################################################### import cherrypy import os import smtplib from email.mime.text import MIMEText from mako.template import Template from mako.lookup import TemplateLookup from girder import events from girder.constants import SettingKey, ROOT_DIR from . import config from .model_importer import ModelImporter def renderTemplate(name, params={}): """ Renders one of the HTML mail templates located in girder/mail_templates. :param name: The name of the file inside girder/mail_templates to render. :param params: The parameters to pass when rendering the template. :type params: dict :returns: The rendered template as a string of HTML. """ host = '://'.join((cherrypy.request.scheme, cherrypy.request.local.name)) if cherrypy.request.local.port != 80: host += ':{}'.format(cherrypy.request.local.port) params['host'] = host template = _templateLookup.get_template(name) return template.render(**params) def sendEmail(to, subject, text): """ Send an email. This builds the appropriate email object and then triggers an asynchronous event to send the email (handled in _sendmail). :param to: The recipient's email address. :type to: str :param subject: The subject line of the email. :type subject: str :param text: The body of the email. :type text: str """ msg = MIMEText(text, 'html') msg['Subject'] = subject msg['To'] = to msg['From'] = ModelImporter().model('setting').get( SettingKey.EMAIL_FROM_ADDRESS, 'no-reply@girder') events.daemon.trigger('_sendmail', info=msg) def addTemplateDirectory(dir): """ Adds a directory to the search path for mail templates. This is useful for plugins that have their own set of mail templates. :param dir: The directory to add to the template lookup path. :type dir: str """ _templateLookup.directories.append(dir) def _sendmail(event): msg = event.info s = smtplib.SMTP( ModelImporter().model('setting').get(SettingKey.SMTP_HOST, 'localhost')) s.sendmail(msg['From'], (msg['To'],), msg.as_string()) s.quit() _templateDir = os.path.join(ROOT_DIR, 'girder', 'mail_templates') _templateLookup = TemplateLookup(directories=[_templateDir], collection_size=50) events.bind('_sendmail', 'core.email', _sendmail)