后缀:将每封电子邮件的副本发送到给定的电子邮件地址

Posted

技术标签:

【中文标题】后缀:将每封电子邮件的副本发送到给定的电子邮件地址【英文标题】:postfix: send a copy of every email to a given email address 【发布时间】:2010-10-19 20:14:18 【问题描述】:

我有一个 postfix 电子邮件服务器,我想调试一个问题。 如何将其配置为将每封电子邮件的副本发送到我的电子邮件(除了将电子邮件传递给其预期收件人)。

【问题讨论】:

serverfault.com/questions/407302/… 有更好的答案,因为它使用了 postfix 提供的功能。 【参考方案1】:

我最近得到了这个工作,所以虽然我会分享:

使用 postfix 和 cyrus imap 将所有外发邮件发送到已发送文件夹。

总结

使后缀将所有外发电子邮件的密件抄送副本发送到特殊的“已发送” 邮件帐户。在这个特殊帐户上使用筛子来重定向所有电子邮件 到与帐户关联的已发送文件夹。

    创建用于发送的电子邮件用户帐户

    最简单的方法是创建一个新的 unix 帐户用于发送, 将 shell 设置为 /bin/false 以防止任何人登录 在:

    host$ sudo useradd sent
    host$ sudo chsh -s /bin/false sent
    

    为发送用户设置 imap

    使用 cyradm 我们创建一个新邮箱(即用户)并给该用户追加 访问我们所有的 imap “已发送”文件夹:

    host$ $ cyradm -user cyrus localhost
    Password: <enter you cyrus user admin password here>
    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
    

    为发送的账户创建一个筛选脚本

    此脚本会将所有收到的电子邮件重定向到已发送的帐户, 发件人收件箱中的已发送文件夹。

    我的脚本名为 send.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: <enter you cyrus user admin password here>
    > put sent.sieve
    > activate sent.sieve
    > quit
    

    为后缀设置密件抄送映射

    在 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
    

    将以下行添加到后缀 main.cf 配置文件中:

    sender_bcc_maps = hash:/etc/postfix/bcc_map
    

    并让 postfix 重新加载其配置:

    host$ sudo /etc/init.d/postfix reload

    测试和调试

    发送一些电子邮件并检查它是否已复制到您的已发送文件夹中。

    如果出现问题,您应该检查 cyrus 和 postfix 日志 (全部登录到我的 debian 主机上的/var/log/syslog)。错别字和不正确 访问权限通常会导致一些线索被发送到 日志。

【讨论】:

【参考方案2】:

只需在 /etc/postfix/main.cf 中添加 always_bcc=youremail@gmail.com 并重新启动 postfix 服务器。我在底部添加了这一行。

它似乎确实有效。更多关于 always_bcc here

请不要忘记先备份此文件。

【讨论】:

像魅力一样工作。这应该是公认的答案!

以上是关于后缀:将每封电子邮件的副本发送到给定的电子邮件地址的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 Google App Script MailApp.sendEmail 在循环中为每封电子邮件使用新线程?

Web 服务器正在发送重复的电子邮件

如何使用文本框将 HTML 表单的副本发送到发件人的电子邮件?

梨邮件队列 - 日志/记录?

确定首先发送电子邮件的日期

即使缺少预期的附件,如何生成电子邮件?