diff --git a/app.py b/app.py index 193f645..8333d02 100644 --- a/app.py +++ b/app.py @@ -1487,7 +1487,7 @@ def mail_send(): cid = contact['id'] if contact else None db().execute("INSERT INTO emails (message_id, direction, contact_id, from_addr, to_addr, cc, subject, body, " "attachments, date, is_read) VALUES (?, 'out', ?, ?, ?, ?, ?, ?, ?, ?, 1)", - (message_id, cid, get_setting('smtp_from') or get_setting('smtp_user'), to, cc, subject, body, + (message_id, cid, mail.sender(settings_dict()), to, cc, subject, body, ', '.join(name for name, _, _ in files), now())) if cid: log(cid, 'email', f'E-mail verstuurd: {subject}') diff --git a/mail.py b/mail.py index a509d2e..d58dedb 100644 --- a/mail.py +++ b/mail.py @@ -12,6 +12,7 @@ import smtplib import ssl import time from datetime import datetime, timedelta +from email.headerregistry import Address from email.message import EmailMessage from email.policy import default as policy from email.utils import formatdate, make_msgid, parseaddr, parsedate_to_datetime @@ -173,19 +174,28 @@ def fetch(cfg, known, limit=200): pass +def sender(cfg): + """Afzender voor From: smtp_from, of de inlognaam. Alleen een naam in smtp_from ('Machiel Heinen') wordt + 'Machiel Heinen ': zonder adres weigert de ontvangende server het bericht.""" + user = cfg.get('smtp_user') or cfg.get('imap_user', '') + raw = (cfg.get('smtp_from') or '').strip() + name, addr = parseaddr(raw) + if '@' not in addr: + name, addr = raw, user + return str(Address(display_name=name, addr_spec=addr)) if name and addr else addr + + def send(cfg, to, subject, body, in_reply_to=None, cc='', attachments=()): """Versturen; geeft (Message-ID, waarschuwing of None). Een mislukte kopie in Verzonden is alleen een waarschuwing. attachments = [(bestandsnaam, bytes, mimetype)].""" - user = cfg.get('smtp_user') or cfg.get('imap_user', '') - sender = cfg.get('smtp_from') or user msg = EmailMessage() - msg['From'] = sender + msg['From'] = sender(cfg) msg['To'] = to if cc: msg['Cc'] = cc msg['Subject'] = subject msg['Date'] = formatdate(localtime=True) - domain = parseaddr(sender)[1].rpartition('@')[2] or None + domain = parseaddr(msg['From'])[1].rpartition('@')[2] or None msg['Message-ID'] = make_msgid(domain=domain) if in_reply_to: msg['In-Reply-To'] = in_reply_to