Use hosted address for webmail sender
Debian Trixie package bundle / packages (push) Successful in 21m45s
Debian Trixie package bundle / packages (push) Successful in 21m45s
This commit is contained in:
@@ -279,7 +279,12 @@ class BongoWebHandler(BaseHTTPRequestHandler):
|
||||
self._client_ip())
|
||||
|
||||
def _available_identities(self, owner):
|
||||
identities = [{"address": owner, "source": "local", "label": "Bongo"}]
|
||||
local_address = owner
|
||||
domains = self.server.config.get("login_domains", [])
|
||||
if "@" not in local_address and domains:
|
||||
local_address = f"{local_address}@{domains[0]}"
|
||||
identities = [{"address": local_address, "source": "local",
|
||||
"label": "Bongo"}]
|
||||
for identity in list_external_identities(owner):
|
||||
if int(identity.get("verified_at", 0)) <= 0:
|
||||
continue
|
||||
@@ -1238,6 +1243,7 @@ class BongoWebHandler(BaseHTTPRequestHandler):
|
||||
preference = self.server.identities.signature_for_sender(
|
||||
session["user"], identity["address"])
|
||||
send_message(session["user"], data, sender=identity["address"],
|
||||
authenticated_address=available[0]["address"],
|
||||
display_name=preference["display_name"],
|
||||
signature=preference["signature"])
|
||||
except OverflowError:
|
||||
|
||||
@@ -127,6 +127,7 @@ def build_message(sender: str, data: dict, *, display_name: str = "",
|
||||
|
||||
|
||||
def send_message(owner: str, data: dict, queue_factory=None, *, sender: str | None = None,
|
||||
authenticated_address: str | None = None,
|
||||
display_name: str = "", signature: dict | None = None) -> None:
|
||||
"""Submit a composed message to Bongo's native queue service."""
|
||||
sender = _address(sender or owner)
|
||||
@@ -140,7 +141,7 @@ def send_message(owner: str, data: dict, queue_factory=None, *, sender: str | No
|
||||
try:
|
||||
queue.Create()
|
||||
created = True
|
||||
queue.StoreFrom(_address(owner), sender)
|
||||
queue.StoreFrom(_address(authenticated_address or owner), sender)
|
||||
for recipient in recipients:
|
||||
queue.StoreTo(recipient, recipient)
|
||||
# SMTP policy emits a seven/eight-bit clean wire representation with CRLF.
|
||||
|
||||
@@ -117,6 +117,20 @@ class ComposeTests(unittest.TestCase):
|
||||
self.assertIn("From: Alice <external@example.test>", wire_message)
|
||||
self.assertIn("-- \r\nRegards", wire_message)
|
||||
|
||||
def test_store_account_may_use_hosted_mail_address(self):
|
||||
queues = []
|
||||
def factory(user):
|
||||
queue = FakeQueue(user)
|
||||
queues.append(queue)
|
||||
return queue
|
||||
send_message("admin", {"to": "to@example.test", "text": "Hello"},
|
||||
factory, sender="admin@example.test",
|
||||
authenticated_address="admin@example.test")
|
||||
self.assertEqual(queues[0].user, "admin")
|
||||
self.assertEqual(queues[0].calls[1],
|
||||
("StoreFrom", "admin@example.test",
|
||||
"admin@example.test"))
|
||||
|
||||
def test_html_signature_is_a_multipart_alternative(self):
|
||||
message, _recipients = build_message(
|
||||
"sender@example.test",
|
||||
|
||||
Reference in New Issue
Block a user