def METHOD_NAME(self, subject, from_email, to_email, msg,
               host=None, port=None, username=None, password=None):
    """Sends an email, has the options for host, port, user/pass so you can
    choose where to send an email.
    :param host: SMTP server hostname or IP
    :param port: SMTP server post
    :param username: Mail account username
    :param password: Mail account password (sent using starttls())
    :param subject: Mail subject
    :param from_email: Mail from email address
    :param to_email: Mail recipient address
    :param msg: Message to send to recipient
    :return: smtp sendmail response
    """
    try:
        host = host or self.host
        port = port or self.port
        username = username or self.username
        password = password or self.password
        self.logger.info(f"Setting up connection to smtp://{host}:{port}")
        smtp = smtplib.SMTP(host, port)
        smtp.ehlo()
        smtp.starttls()
        if username and password:
            smtp.login(username, password)
        email = self.prepare_email(subject, from_email, to_email, msg)
        self.logger.info(f"Sending email to: {to_email}")
        return smtp.sendmail(from_email, to_email, email)
    except ConnectionRefusedError:
        self.logger.error(f"Error to connect to smtp://{host}:{port}")
        raise Exception(f"Error to connect to smtp host: "
                        f"smtp://{host}:{port}")
    except Exception as error:
        self.logger.error(f"Unable to send email message: {error}")
        raise Exception("Unable to send email message")