如何将换行符(\ n)放在自动回复的文本中?

我已经设置exim从sqlite数据库中获取autoreply文本。 它发送自动回复很好,除了我不能在自动回复中获得新的行。

这是交通线路:

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这样的东西,没有任何工作。

我一直在网上search了很长一段时间,我找不到任何关于做这个或任何说不能做的事情。

我假设你已经将换行符作为转义序列存储在数据库中,这意味着string“ \n ”而不是实际的换行符。 sqlite查找将返回完全的,Exim将愉快地将string原样放入autoreply消息。 原因是查找已经是一个string扩展; 你可以使用它作为另一个string的一部分,在这种情况下,Exim会将其replace为数据库中的任何内容。 Exim不会再次扩展。

为了使Exim在查找结果上扩展字符文字,您需要通过使用expand运算符来包围整个查找来明确地执行此操作,如下所示:

 text = ${expand:${lookup sqlite{SQLDB \ SELECT body FROM autoreply WHERE \ ... }}} 

然后Exim将查找返回的string并对其进行扩展。 有关详细信息,请参阅Exim规范 , 第11章 , 第6节 ,关于扩展操作符和第9章关于文件和数据库查找。