Как поместить новую строку (\n) в текст автоответчика в exim?
У меня есть настройка exim для автоматического получения текста из базы данных sqlite. Он отправляет автоответчик просто отлично, за исключением того, что я не могу получить новые строки в автоответе.
Это линия в транспорте:
text = ${lookup sqlite{SQLDB \
SELECT body FROM autoreply WHERE \
(username='$local_part' AND domain='$domain') \
AND (sender ='$sender_address' or sender ='$reply_address' or sender ='*') \
AND enabled=1 \
AND (valid_from <= strftime('%s', 'now') OR valid_from IS NULL) \
AND (valid_to >= strftime('%s', 'now') OR valid_to IS NULL) \
LIMIT 1\
}\
}
Как я уже упоминал, это возвращает правильный текст, электронное письмо содержит только действительные символы \ n вместо новых строк.
Я пробовал такие вещи, как \\n, и ничего не работает.
Я долго искал в Интернете, и я не могу найти что-либо о том, как это сделать, или о том, что это невозможно.
1 ответ
Я предполагаю, что вы сохранили символы новой строки как escape-последовательности в базе данных, то есть строку "\n
"вместо фактического символа новой строки. Поиск sqlite вернет именно это, и exim с радостью поместит строку как есть в сообщение автоответа. Причина в том, что поиск уже является расширением строки; вы можете использовать его как часть другая строка, в этом случае exim заменит ее на то, что находится в базе данных. exim не расширит ее во второй раз.
Чтобы Exim расширил символьные литералы в результате поиска, вы должны сказать ему сделать это явно, окружив весь поиск символом expand
оператор, как это:
text = ${expand:${lookup sqlite{SQLDB \
SELECT body FROM autoreply WHERE \
...
}}}
Затем exim возьмет строку, возвращенную поиском, и выполнит ее расширение. За подробностями обращайтесь к спецификации Exim, глава 11, раздел 6, относительно оператора расширения, и главе 9, касающейся поиска файлов и базы данных.