aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fietsboek/email.py23
1 files changed, 10 insertions, 13 deletions
diff --git a/fietsboek/email.py b/fietsboek/email.py
index ee111a1..038acb2 100644
--- a/fietsboek/email.py
+++ b/fietsboek/email.py
@@ -3,25 +3,22 @@ import logging
import smtplib
import sys
from email.message import EmailMessage
+from typing import Optional
from urllib.parse import urlparse
LOGGER = logging.getLogger(__name__)
-def prepare_message(sender, addr_to, subject):
+def prepare_message(sender: str, addr_to: str, subject: str) -> EmailMessage:
"""Prepares an email message with the right headers.
The body of the message can be set by using
:meth:`~email.message.EmailMessage.set_content` on the returned message.
:param sender: The email sender.
- :type sender: str
:param addr_to: Address of the recipient.
- :type addr_to: str
:param subject: Subject of the message.
- :type subject: str
:return: A prepared message.
- :rtype: email.message.EmailMessage
"""
message = EmailMessage()
message["To"] = addr_to
@@ -33,31 +30,31 @@ def prepare_message(sender, addr_to, subject):
return message
-def send_message(server_url, username, password, message):
+def send_message(
+ server_url: str, username: Optional[str], password: Optional[str], message: EmailMessage
+):
"""Sends an email message using the STMP server configured in the settings.
The recipient is taken from the 'To'-header of the message.
:param server_url: The URL of the server for mail sending.
- :type server_url: str
:param username: The username to authenticate, can be ``None`` or empty.
- :type username str:
:param password: The password to authenticate, can be ``None`` or empty.
- :type password: str
:param message: The message to send.
- :type message: email.message.EmailMessage
"""
parsed_url = urlparse(server_url)
if parsed_url.scheme == "debug":
print(message, file=sys.stderr)
return
+ hostname = parsed_url.hostname if parsed_url.hostname is not None else "localhost"
try:
+ # Use 0 to let smtplib pick the default port
if parsed_url.scheme == "smtp":
- client = smtplib.SMTP(parsed_url.hostname, parsed_url.port)
+ client = smtplib.SMTP(hostname, parsed_url.port or 0)
elif parsed_url.scheme == "smtp+ssl":
- client = smtplib.SMTP_SSL(parsed_url.hostname, parsed_url.port)
+ client = smtplib.SMTP_SSL(hostname, parsed_url.port or 0)
elif parsed_url.scheme == "smtp+starttls":
- client = smtplib.SMTP(parsed_url.hostname, parsed_url.port)
+ client = smtplib.SMTP(hostname, parsed_url.port or 0)
client.starttls()
if username and password:
client.login(username, password)