def send_torrent_email(email_configurations, email_msg, subscription_data=None,
                       torrent_name_list=None, defered=False, callback_func=None, email_data={}):
    """Send email with optional list of torrents
    Arguments:
    email_configurations - the main email configuration of YARSS2
    email_msg - a dictionary with the email data (as saved in the YARSS config)
    torrents - a tuple containing the subscription data and a list of torrent names.
    """
    log.info("Sending email '%s'" % email_msg["name"])
    email_data["to_address"] = email_msg["to_address"]
    email_data["subject"] = email_msg["subject"]
    email_data["message"] = email_msg["message"]

    if email_data["message"].find("$subscription_title") != -1 and subscription_data:
        email_data["message"] = email_data["message"].replace("$subscription_title", subscription_data["name"])

    if email_data["subject"].find("$subscription_title") != -1 and subscription_data:
        email_data["subject"] = email_data["subject"].replace("$subscription_title", subscription_data["name"])

    if email_data["message"].find("$torrentlist") != -1 and torrent_name_list:
        torrentlist_plain = " * %s\n" % "\n * ".join(f for f in torrent_name_list)
        msg_plain = email_data["message"].replace("$torrentlist", torrentlist_plain)
        torrentlist_html = "<ul><li>%s </li></ul>" % \
            "</li> \n <li> ".join(f for f in torrent_name_list)
        msg_html = email_data["message"]
        msg_html = email_data["message"].replace('\n', '<br/>')
        msg_html = re.sub(r'\$torrentlist(<br/>){1}?', torrentlist_html, msg_html)
        email_data["message"] = msg_plain
        email_data["message_html"] = msg_html

    # Send email with twisted to avoid waiting
    if defered:
        d = threads.deferToThread(send_email, email_data, email_configurations)
        if callback_func is not None:
            d.addCallback(callback_func)
        return d
    else:
        return send_email(email_data, email_configurations)
    mime_message["From"] = server_conf["from_address"]
    mime_message["To"] = email_conf["to_address"]

    port = smtplib.SMTP_PORT
    if len(server_conf["smtp_port"].strip()) > 0:
        try:
            port = int(server_conf["smtp_port"])
        except:
            pass
    try:
        mailServer = smtplib.SMTP(server_conf["smtp_server"], port)
    except Exception, e:
        log.error("There was an error sending the notification email: %s" % str(e))
        return False

    log.info("Sending email message:\nTo: %s\nFrom: %s\nSubject: %s\n" % \
                 (mime_message["To"], mime_message["From"], mime_message["Subject"]))
    log.info("Server: %s, port: %s, authentication: %s" % (server_conf["smtp_server"],
                                                           server_conf["smtp_port"],
                                                           server_conf["smtp_authentication"]))
    if server_conf["smtp_authentication"]:
        mailServer.ehlo()
        mailServer.starttls()
        mailServer.ehlo()
        try:
            mailServer.login(server_conf["smtp_username"], server_conf["smtp_password"])
        except smtplib.SMTPHeloError:
            log.warn("The server didn't reply properly to the helo greeting")
        except smtplib.SMTPAuthenticationError:
            log.warn("The server didn't accept the username/password combination")
    try:
        mailServer.sendmail(server_conf["from_address"], email_conf["to_address"], mime_message.as_string())