我有一个postfix电子邮件服务器,我想调试一个问题.如何配置它以将每封电子邮件的副本发送到我的电子邮件(除了将电子邮件发送给其预期的收件人).
我最近得到了这个工作,所以虽然我分享:
使用postfix和cyrus imap将所有外发邮件发送到已发送文件夹.
摘要
使postfix将所有外发电子邮件的bcc副本发送到特殊的"已发送"邮件帐户.使用此特殊帐户筛选将所有电子邮件重定向到与该帐户关联的已发送文件夹.
创建已发送的电子邮件用户帐户
最简单的方法是为send创建一个新的unix帐户,将shell设置为/ bin/false以防止任何人能够登录:
host$ sudo useradd sent host$ sudo chsh -s /bin/false sent
为发送的用户设置imap
使用cyradm我们创建一个新邮箱(即用户),并让该用户附加访问我们所有的imap"已发送"文件夹:
host$ $ cyradm -user cyrus localhost Password:localhost> createmailbox user.sent localhost> setaclmailbox user.%.Sent sent append Setting ACL on user.userx.Sent...OK. Setting ACL on user.usery.Sent...OK. . . . Setting ACL on user.userz.Sent...OK. localhost> exit
为已发送的帐户创建筛选脚本
此脚本会将所有传入的电子邮件重定向到已发送的帐户,并将其重定向到发件人收件箱中的已发送文件夹.
我的脚本名为sent.sieve,看起来像这样:
# Sieve script for sent. If outgoing email is bcc'ed to this account, # this sieve script will redirect it to the sender's Sent folder require ["fileinto"]; if address :is :localpart "From" "userx" { fileinto "user.userx.Sent"; } elsif address :is :localpart "From" "usery" { fileinto "user.usery.Sent"; } elsif address :is :localpart "From" "userz" { fileinto "user.userz.Sent"; }
您需要为每个用户输入一个条目(上例中的userx,usery,userz).我一直无法找到更好的方法.建议欢迎来到marc@bloodnok.com
像这样安装筛选脚本:
host$ sieveshell localhost -user=sent -a=cyrus Password:> put sent.sieve > activate sent.sieve > quit
设置postfix的密件抄送映射
在postfix目录(debian上的/ etc/postfix)中创建一个名为bcc_map的文件,如下所示:
# copy all locally sent mail to the sent account @yourdomain.com sent@yourdomain.com
使用以下命令将其编译为后缀哈希文件:
host$ sudo postmap bcc_map
将以下行添加到postfix main.cf配置文件中:
sender_bcc_maps = hash:/etc/postfix/bcc_map
并使postfix重新加载其配置:
host $ sudo /etc/init.d/postfix reload
测试和调试
发送一些电子邮件并检查它是否已复制到"已发送"文件夹中.
如果出现问题,您应该检查cyrus和postfix日志(所有记录/var/log/syslog
在我的debian主机上).错别字和不正确的访问权限通常会导致一些线索被发送到日志.