Вопрос или проблема
Я хотел бы перенаправлять электронные письма с темой «Ваша посылка пришла.» на локальный адрес электронной почты [email protected]. Для этого я создал следующий маршрутизатор:
redirect_packages:
debug_print = "R: redirect_packages with subject $header_subject"
driver = redirect
domains = +local_domains
condition = ${if eq {$header_subject} {Ваша посылка пришла.} {true} }
data = packages@${domain}
Я не могу получить результат условия как истинный. Вывод отладки:
--------> маршрутизатор redirect_packages <--------
local_part=me domain=mydomain.com
проверка доменов
кэшировано yes соответствие для +local_domains
кэшированный поиск data = mydomain.com
mydomain.com в "+local_domains"? yes (соответствующий "+local_domains" - кэшированный)
-рассматривается: R: redirect_packages with subject $header_subject
----расширение: R: redirect_packages with subject $header_subject
-------результат: R: redirect_packages with subject Ваша посылка пришла.
----(порченный)
R: redirect_packages with subject Ваша посылка пришла.
проверка "условия" "${if eq {$header_subject} {Ваша посылка пришла.} {true} }"...
-рассматривается: ${if eq {$header_subject} {Ваша посылка пришла.} {true} }
-рассматривается: $header_subject} {Ваша посылка пришла.} {true} }
---расширение: $header_subject} {Ваша посылка пришла.
-------результат: {Ваша посылка пришла.
-рассматривается: true} }
---расширение: true
-------результат: true
---условие: eq {$header_subject} {Ваша посылка пришла.} {true}
-----результат: false
---расширение: ${if eq {$header_subject} {Ваша посылка пришла.} {true} }
-------результат:
маршрутизатор redirect_packages пропущен: ошибка условия
Я не вижу, что идет не так. $header_subject правильно расширяется в сообщении отладки. Однако в условии он не сопоставляется с текстом, который выглядит так же.
Способ, которым условие расширяется, также выглядит неправильно, как будто отсутствует закрывающая скобка после $header_subject.
Может кто-то объяснить, что происходит с условием и почему результат не истинный?
Ответ или решение
Ваш запрос о редиректе писем с определённой темой в Exim требует внимательного анализа условий написания роутера. Давайте рассмотрим ваш код и выясним, почему условие не выполняется, несмотря на то, что заголовок письма распознаётся верно.
1. Ошибка в условии
Ваши строки кода содержат потенциальную ошибку в синтаксисе при проверке условия. Переменная $header_subject
содержит строку, однако вы должны убедиться, что сравнение производится правильно. В вашем случае предполагается, что условие таково:
condition = ${if eq {$header_subject} {Your Parcel has Arrived.} {true} }
Для того чтобы исправить проверку, стоит использовать встроенные функции сравнения корректно, что может потребовать проверки наличия случайных пробелов или недостающих переносов текста. Один из способов, который стоит попробовать – это использовать функцию string
для нормализации строки, сравнивая её с целевой строкой.
2. Проблемы с перекрытием
Также отметим, что возможное наличие лишних пробелов или символов может повлиять на сравнение строк. Убедитесь, что в заголовке нет лишних символов, которые могут не быть видимыми на первый взгляд.
3. Рекомендация по коду
Попробуйте изменить код следующим образом:
redirect_packages:
debug_print = "R: redirect_packages with subject $header_subject"
driver = redirect
domains = +local_domains
condition = ${if eq {$header_subject}{Your Parcel has Arrived.}{true}{false}}
data = packages@${domain}
Обратите внимание на вывод false
, который добавлен как третий параметр. Это необходимо для того, чтобы избежать путаницы, если условие не выполняется.
4. Проверьте локальные домены
Также убедитесь, что mydomain.com
действительно включён в ваши локальные домены. Если mydomain.com
не является локальным доменом, то преобразование не будет выполняться.
5. Применение отладочной информации
Ваше место в выводе отладочной информации показывает, что условие выполняется некорректно. Вам стоит временно изменить отладочную строку для более точных сведений:
debug_print = "R: subject is '$header_subject', comparing against 'Your Parcel has Arrived.'"
6. Заключение
С помощью указанных выше изменений и советов, вы сможете успешно реализовать редирект писем с заданной темой, а также углубить свои знания о проверках условий в Exim. Примените каждое из предложенных решений и отлаживайте шаг за шагом, чтобы гарантировать корректную работу вашего роутера.
Если вопросы будут оставаться, не стесняйтесь задавать их в профессиональных форумах или вариантах онлайн-поддержки.