Afzender met alleen een naam ('Machiel Heinen') wordt 'Naam <inlognaam>' (mail.sender): zonder adres weigerde de ontvangende server het bericht; zelfde afzender in de verstuurde mail in de CRM

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Machiel
2026-10-16 18:06:12 +02:00
co-authored by Claude Opus 5.5
parent 366a3f9d17
commit 8f6e1ab443
2 changed files with 15 additions and 5 deletions
+1 -1
View File
@@ -1487,7 +1487,7 @@ def mail_send():
cid = contact['id'] if contact else None cid = contact['id'] if contact else None
db().execute("INSERT INTO emails (message_id, direction, contact_id, from_addr, to_addr, cc, subject, body, " db().execute("INSERT INTO emails (message_id, direction, contact_id, from_addr, to_addr, cc, subject, body, "
"attachments, date, is_read) VALUES (?, 'out', ?, ?, ?, ?, ?, ?, ?, ?, 1)", "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())) ', '.join(name for name, _, _ in files), now()))
if cid: if cid:
log(cid, 'email', f'E-mail verstuurd: {subject}') log(cid, 'email', f'E-mail verstuurd: {subject}')
+14 -4
View File
@@ -12,6 +12,7 @@ import smtplib
import ssl import ssl
import time import time
from datetime import datetime, timedelta from datetime import datetime, timedelta
from email.headerregistry import Address
from email.message import EmailMessage from email.message import EmailMessage
from email.policy import default as policy from email.policy import default as policy
from email.utils import formatdate, make_msgid, parseaddr, parsedate_to_datetime from email.utils import formatdate, make_msgid, parseaddr, parsedate_to_datetime
@@ -173,19 +174,28 @@ def fetch(cfg, known, limit=200):
pass pass
def sender(cfg):
"""Afzender voor From: smtp_from, of de inlognaam. Alleen een naam in smtp_from ('Machiel Heinen') wordt
'Machiel Heinen <inlognaam>': 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=()): 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. """Versturen; geeft (Message-ID, waarschuwing of None). Een mislukte kopie in Verzonden is alleen een waarschuwing.
attachments = [(bestandsnaam, bytes, mimetype)].""" attachments = [(bestandsnaam, bytes, mimetype)]."""
user = cfg.get('smtp_user') or cfg.get('imap_user', '')
sender = cfg.get('smtp_from') or user
msg = EmailMessage() msg = EmailMessage()
msg['From'] = sender msg['From'] = sender(cfg)
msg['To'] = to msg['To'] = to
if cc: if cc:
msg['Cc'] = cc msg['Cc'] = cc
msg['Subject'] = subject msg['Subject'] = subject
msg['Date'] = formatdate(localtime=True) 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) msg['Message-ID'] = make_msgid(domain=domain)
if in_reply_to: if in_reply_to:
msg['In-Reply-To'] = in_reply_to msg['In-Reply-To'] = in_reply_to