def METHOD_NAME(notification, recipients, **kwargs):
    if not recipients:
        return
    # HTML to text conversion
    html2text = HTML2Text(bodywidth=78)
    html2text.unicode_snob = True
    html2text.ignore_images = True
    html2text.pad_tables = True
    # Logos
    images = []
    for name in ("email-logo.png", "email-logo-footer.png"):
        filename = os.path.join(settings.STATIC_ROOT, name)
        with open(filename, "rb") as handle:
            image = MIMEImage(handle.read())
        image.add_header("Content-ID", f"<{name}@cid.weblate.org>")
        image.add_header("Content-Disposition", "inline", filename=name)
        images.append(image)
    # Context and subject
    context = {
        "LANGUAGE_CODE": get_language(),
        "LANGUAGE_BIDI": get_language_bidi(),
    }
    context.update(kwargs)
    subject = render_to_string(f"mail/{notification}_subject.txt", context).strip()
    context["subject"] = subject
    # Render body
    body = render_to_string(f"mail/{notification}.html", context).strip()
    # Prepare e-mail
    email = EmailMultiAlternatives(
        subject,
        html2text.handle(body),
        "billing@weblate.org",
        recipients,
    )
    email.mixed_subtype = "related"
    for image in images:
        email.attach(image)
    email.attach_alternative(body, "text/html")
    # Include invoice PDF if exists
    if "invoice" in kwargs:
        with open(kwargs["invoice"].pdf_path, "rb") as handle:
            email.attach(
                os.path.basename(kwargs["invoice"].pdf_path),
                handle.read(),
                "application/pdf",
            )
    email.send()