Hi all,
I'm seeing Dovecot include the string "MISSING_DOMAIN" in fetch
envelope requests when an mailbox's `addr-spec` part does not have a
`domain` part.
For example:
C: a022 uid fetch 40 (envelope rfc822.header)
S: * 5 FETCH (UID 40 ENVELOPE ("Sat, 15 Aug 2020 12:53:05 +1000"
"test {{name}}" (("Michael Gratton" NIL "mike" "vee.net")) (("Michael
Gratton" NIL "mike" "vee.net")) (("Michael Gratton" NIL "mike"
"vee.net")) (("postgres" NIL "postgres" "MISSING_DOMAIN")) NIL NIL
NIL NIL) RFC822.HEADER {literal/244b})
I understand that RFC 5322 require a mailbox to have a domain part,
however it is still possible for mail to contain mailboxes that do not.
In these cases, Dovecot returning random string such as the above is
harmful, since it not possible for IMAP clients to determine whether
host name string is actually present or something that the IMAP server
has made up.
As a result, an IMAP client has two options: Either display the string
as-is, preventing it from providing an appropriately localised
explanation or visual indication of the problem in the user interface,
or simply avoid ever requesting IMAP envelopes from the server and
always download and parse the complete RFC822 headers itself (as I
believe Thunderbird does).
The former is untenable since "MISSING_DOMAIN" does not mean anything
to non-English speakers, the latter is untenable since it unnecessarily
inflates the of volume of data that must be transmitted over the wire
to work around a server bug.
In these cases, or when any other part of a required IMAP address
structure is missing, Dovecot should return the empty string, e.g. "".
Cheers,
//Mike
Dovecot details:
*REDACTED*:~$ sudo dovecot -n
# 2.3.4.1 (f79e8e7e4): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.5.4 ()
# OS: Linux 4.19.0-9-amd64 x86_64 Debian 10.4 ext4
# Hostname: *REDACTED*
first_valid_uid = *REDACTED*
hostname = *REDACTED*
last_valid_uid = *REDACTED*
lda_original_recipient_header = X-Original-To
lmtp_rcpt_check_quota = yes
lmtp_save_to_detail_mailbox = yes
mail_gid = *REDACTED*
mail_home = *REDACTED*
mail_location = mdbox:*REDACTED*:UTF-8
mail_privileged_group = mail
mail_server_admin = mailto:*REDACTED*
mail_temp_dir = *REDACTED*
mail_uid = *REDACTED*
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope
encoded-character vacation subaddress comparator-i;ascii-numeric
relational regex imap4flags copy include variables body enotify
environment mailbox date index ihave duplicate mime foreverypart
extracttext imapsieve vnd.dovecot.imapsieve
namespace inbox {
inbox = yes
location =
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = subscribe
autoexpunge = 30 days
special_use = \Junk
}
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox Trash {
auto = subscribe
autoexpunge = 30 days
special_use = \Trash
}
prefix =
separator = .
type = private
}
passdb {
args = *REDACTED*
driver = ldap
}
plugin {
imapsieve_mailbox1_before = file:*REDACTED*
imapsieve_mailbox1_causes = COPY
imapsieve_mailbox1_name = Junk
imapsieve_mailbox2_before = file:*REDACTED*
imapsieve_mailbox2_causes = COPY
imapsieve_mailbox2_from = Junk
imapsieve_mailbox2_name = *
recipient_delimiter = +
sieve = file://*REDACTED*
sieve_before = /etc/dovecot/sieve-before.d
sieve_global_extensions = +vnd.dovecot.pipe
+vnd.dovecot.environment +vnd.dovecot.report
sieve_pipe_bin_dir = /etc/dovecot/sieve-scripts
sieve_plugins = sieve_imapsieve sieve_extprograms
sieve_quota_max_storage = 50M
}
postmaster_address = *REDACTED*
protocols = " imap lmtp sieve"
service auth-worker {
user = mail
}
service auth {
unix_listener *REDACTED* {
group = postfix
mode = 0666
user = postfix
}
}
service lmtp {
process_min_avail = 2
unix_listener *REDACTED* {
group = postfix
mode = 0600
user = postfix
}
user = mail
}
ssl = required
ssl_cert = <*REDACTED*
ssl_client_ca_dir = *REDACTED*
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
submission_host = *REDACTED*:587
userdb {
args = uid=8
driver = static
}
protocol lmtp {
mail_plugins = " sieve"
}
protocol imap {
mail_plugins = " imap_sieve"
}
--
Michael Gratton.
<https://mjog.vee.net>