#!/usr/bin/python
# -*- coding: utf-8 -*-
# Hive Appier Framework
# Copyright (c) 2008-2024 Hive Solutions Lda.
#
# This file is part of Hive Appier Framework.
#
# Hive Appier Framework is free software: you can redistribute it and/or modify
# it under the terms of the Apache License as published by the Apache
# Foundation, either version 2.0 of the License, or (at your option) any
# later version.
#
# Hive Appier Framework is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# Apache License for more details.
#
# You should have received a copy of the Apache License along with
# Hive Appier Framework. If not, see .
__author__ = "João Magalhães "
""" The author(s) of the module """
__copyright__ = "Copyright (c) 2008-2024 Hive Solutions Lda."
""" The copyright for the module """
__license__ = "Apache License, Version 2.0"
""" The license for the module """
import email.header
import email.mime.text
import email.mime.multipart
import email.mime.application
from . import config
from . import legacy
def message(
sender,
receivers,
contents,
host=None,
port=25,
username=None,
password=None,
stls=False,
safe=True,
):
is_contents = isinstance(contents, legacy.STRINGS)
if not is_contents:
contents = contents.as_string()
if safe:
contents = contents.replace("\r\n", "\n")
contents = contents.replace("\n", "\r\n")
engine = smtp_engine()
helo_host = config.conf("SMTP_HELO_HOST", None)
method = globals()["message_" + engine]
return method(
sender,
receivers,
contents,
host=host,
port=port,
username=username,
password=password,
stls=stls,
helo_host=helo_host,
)
def message_base(
sender,
receivers,
contents,
host=None,
port=25,
username=None,
password=None,
stls=False,
helo_host=None,
*args,
**kwargs
):
pass
def message_netius(
sender,
receivers,
contents,
host=None,
port=25,
username=None,
password=None,
stls=False,
helo_host=None,
*args,
**kwargs
):
import netius.clients
smtp_client = netius.clients.SMTPClient(auto_close=True, host=helo_host)
smtp_client.message(
[sender],
receivers,
contents,
host=host,
port=port,
username=username,
password=password,
stls=stls,
)
def smtp_engine():
if legacy.has_module("netius"):
return "netius"
return "base"
def multipart():
return email.mime.multipart.MIMEMultipart("alternative")
def plain(contents, encoding="utf-8"):
return email.mime.text.MIMEText(contents, "plain", encoding)
def html(contents, encoding="utf-8"):
return email.mime.text.MIMEText(contents, "html", encoding)
def application(contents, name="unnamed"):
return email.mime.application.MIMEApplication(contents, Name=name)
def header(value, encoding="utf-8", encode=True):
header = email.header.Header(value, encoding)
if encode:
header = header.encode()
return header