#!/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