def METHOD_NAME(to, fro, subject, template_name=None, bcc=None, files=None, msg_body=None, html_body=None, **template_params):
    """
    ~~-> Email:ExternalService~~
    ~~-> FlaskMail:Library~~
    :param to:
    :param fro:
    :param subject:
    :param template_name:
    :param bcc:
    :param files:
    :param msg_body:
    :param template_params:
    :return:
    """
    bcc = [] if bcc is None else bcc
    files = [] if files is None else files
    # ensure that email isn't sent if it is disabled
    if not app.config.get("ENABLE_EMAIL", False):
        app.logger.info("Email template {0} called to send, but email has been disabled.\nto:{1}\tsubject:{2}".format(template_name, to, subject))
        return
    assert type(to) == list
    assert type(files) == list
    if bcc and not isinstance(bcc, list):
        bcc = [bcc]
    to_is_invalid = True
    for t in to:
        if t:
            to_is_invalid = False
        # a list of None, None, None or even just a [None] is no good!
    if to_is_invalid:
        magic = str(uuid.uuid1())
        app.logger.error('Bad To list while trying to send email with subject \"{0}\". Magic num for log grep {1}'.format(subject, magic))
        flash("Invalid email address - no email specified at all. Trying to send email with subject \"{0}\". Magic number to help identify error: {1}".format(subject, magic), 'error')
        return
    if app.config.get('CC_ALL_EMAILS_TO', None) is not None:
        bcc.append(app.config.get('CC_ALL_EMAILS_TO'))
    # Get the body text from the msg_body parameter (for a contact form),
    # or render from a template.
    # TODO: This could also find and render an HTML template if present
    if msg_body:
        plaintext_body = msg_body
    else:
        try:
            plaintext_body = render_template(template_name, **template_params)
        except:
            with app.test_request_context():
                plaintext_body = render_template(template_name, **template_params)
    # strip all the leading and trailing whitespace from the body, which the templates
    # leave lying around
    plaintext_body = plaintext_body.strip()
    # create a message
    msg = Message(subject=subject,
                  recipients=to,
                  body=plaintext_body,
                  html=html_body,
                  sender=fro,
                  cc=None,
                  bcc=bcc,
                  attachments=files,
                  reply_to=None,
                  date=None,
                  charset=None,
                  extra_headers=None
                  )
    try:
        mail = Mail(app)
        with app.app_context():
            mail.send(msg)
            app.logger.info("Email template {0} sent.\nto:{1}\tsubject:{2}".format(template_name, to, subject))
    except Exception as e:
        raise EmailException(e)