We've successfully migrated from an ancient Microsoft Exchange to dovecot+postfix and everything works fine except from one particular case:
When users of Outlook 2016 hit reply on an old mail from someone within the company (someone@example.com) они получают ошибку доставки из Outlook, и иногда я замечаю, что Outlook даже не подключается к SMTP-серверу, а в других случаях он устанавливает его и выдает ошибку (см. ниже). Если они напечатают тот же адрес ( something@example.com) вручную все в порядке.
Письмо с уведомлением о недоставке, которое возвращается, находится в строках (перевод с греческого):
We couldn't reach one or more recipients...
'Company S.A. John Smith' at 22/10/2018 1:03 pm
Server error: '501 5.1.3 Bad recipient address syntax'"
, а постфикс имеет эту строку в журналах:
postfix/smtps/smtpd[3905]: warning: Illegal address syntax from xxx.yyy.local[192.168.0.153] in RCPT command: <Company S.A. John Smith>
Пользователи, у которых есть Thunderbird, имеют совершенно никаких проблем. И Outlook, и Thunderbird используют одни и те же настройки подключения к серверу (безопасный IMAP и SMTP)
Мы будем очень признательны за любые идеи о том, что здесь идет не так.
Некорректные адреса поступают из кэша имен (файла .nk2). Вы должны удалить все записи файла .nk2, которые соответствуют адресам обмена.
В моем случае я использовал бесплатный редактор от Nirsoft для редактирования файла. Я нажал на заголовок столбца Address для сортировки по типу адреса и выбрал все записи, показывающие EX
вместо SMTP
. Затем я нажимаю delete и save.
Спасибо всем за полезные комментарии и joeqwerty в частности за очень информативную ссылку , которая направляла меня в правильном направлении.
Адресом назначения в записи журнала является Company S.A. John Smith
. Постфикс является правильным, когда он жалуется на это, так как пробелы в адресах электронной почты требуют цитирования, а адрес должен иметь символ @
, за которым следует домен.
Соответствующими стандартами являются RFC 5321:
Forward-path = Path
Path = "<" [ A-d-l ":" ] Mailbox ">"
A-d-l = At-domain *( "," At-domain )
; Note that this form, the so-called "source
; route", MUST BE accepted, SHOULD NOT be
; generated, and SHOULD be ignored.
At-domain = "@" Domain
Mail-parameters = esmtp-param *(SP esmtp-param)
Rcpt-parameters = esmtp-param *(SP esmtp-param)
esmtp-param = esmtp-keyword ["=" esmtp-value]
esmtp-keyword = (ALPHA / DIGIT) *(ALPHA / DIGIT / "-")
esmtp-value = 1*(%d33-60 / %d62-126)
; any CHAR excluding "=", SP, and control
; characters. If this string is an email address,
; i.e., a Mailbox, then the "xtext" syntax [32]
; SHOULD be used.
Keyword = Ldh-str
Argument = Atom
Domain = sub-domain *("." sub-domain)
sub-domain = Let-dig [Ldh-str]
Let-dig = ALPHA / DIGIT
Ldh-str = *( ALPHA / DIGIT / "-" ) Let-dig
address-literal = "[" ( IPv4-address-literal /
IPv6-address-literal /
General-address-literal ) "]"
; See Section 4.1.3
Mailbox = Local-part "@" ( Domain / address-literal )
Local-part = Dot-string / Quoted-string
; MAY be case-sensitive
Dot-string = Atom *("." Atom)
Atom = 1*atext
Quoted-string = DQUOTE *QcontentSMTP DQUOTE
и RFC 5322:
atext = ALPHA / DIGIT / ; Printable US-ASCII
"!" / "#" / ; characters not including
"$" / "%" / ; specials. Used for atoms.
"&" / "'" /
"*" / "+" /
"-" / "/" /
"=" / "?" /
"^" / "_" /
"`" / "{" /
"|" / "}" /
"~"
Единственным исключением из требования для @
и домена в адресе получателя является то, что зарезервированный адрес postmaster
может быть использован без домена для отправки электронного письма администратору соответствующего почтового сервера.
Даже если бы Postfix достаточно расслабил парсинг, чтобы не жаловаться на две синтаксические ошибки, я полагаю, что вы, вероятно, не настроили Postfix на то, чтобы он знал, как доставлять письмо в Company S.A. John Smith
.
Следующий вопрос, тогда почему Outlook производит такую некорректную RCPT
команду в первую очередь. Чтобы понять это, вам нужно посмотреть на письмо, на которое вы отвечаете на стороне клиента, чтобы увидеть, как выглядят заголовки From
и Reply-To
в письме.