我在 Debian 8 上使用 exim4。我使用 maildir。我有一个进出口过滤器该文件尝试将收到的邮件存储在以其域命名的文件夹中。
问题是,当 Exim 创建新目录时,权限为 700,但实际需要的是 770。
路由器:
v_user_filters:
driver = redirect
domains = dsearch;/etc/exim4/virtual_domains
local_parts = lsearch;/etc/exim4/virtual_domains/$domain/passwords
user = virtual
group = virtual
check_owner = false
file = /home/virtual/$domain/$local_part/filter.forward
no_verify
no_expn
check_ancestor
allow_filter
forbid_smtp_code = true
directory_transport = address_directory
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
交通:
address_file:
driver = appendfile
delivery_date_add
envelope_to_add
return_path_add
directory_mode = 0770
注意directory_mode
哪个显然做这个:
如果 appendfile 根据 create_directory 选项创建任何目录,则其模式由此选项指定。
过滤器:
# exim filter
# File by domain.
if ${sg{${sg{$reply_address}{^.*?@}{}}}{>\$}{}} matches "^[a-zA-Z0-9-](\.[a-zA-Z
then
# This horrible regex substitution:
# inner sg: strip off everything from beginning of reply_address to and incl @
# middle sg: strip off trailing > if found
# outer sg: convert dots to - since dots mean sub-folders and we don't want example/com we want example-com
save /home/virtual/$domain/$local_part/.${sg{${sg{${sg{$reply_address}{^.*?@
finish
endif
答案1
问题是,当 Exim 创建新目录时,权限为 700,但实际需要的是 770。
不,他们没有。
您的问题是 exim 和 POP/IMAP 服务器具有不同的有效 UID。因此,您将它们放在同一个组中,并希望它们通过相同的 GID 进行协作。
有一种不太复杂的方法,但有很多好处。使用 POP/IMAP 包中的 LDA。如果有dovecot
可以deliver
从 exim 的传输中调用的实用程序:
begin transports
local:
driver = pipe
user = dovenull
command = /path/dovecot/deliver -d $local_part@$domain -f $sender_address
temp_errors = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78
envelope_to_add
return_path_add
delivery_date_add
log_output
begin routers
. . . . .
local_user:
driver = accept
domains = dsearch;/etc/exim4/virtual_domains
local_parts = lsearch;/etc/exim4/virtual_domains/$domain/passwords
transport = local
. . . . .
现在,所有本地用户的消息都将通过 dovecot 的 LDA 传递到以下位置:mail_location = maildir:/var/mail/%d/%n
如果您想要进一步过滤/排序,则必须使用sieve
exim 的过滤器。