【问题标题】:postfix and save to sent mail dir后缀并保存到发送的邮件目录
【发布时间】:2013-11-27 01:36:32
【问题描述】:

我知道这可能是一个虚拟问题或来自知识湖的问题,但我希望有人仍然可以回答它。我确实尝试阅读很多后缀文档,但没有找到答案。我什至不知道这是特定于后缀的问题还是邮件服务器的一般问题。

所以我有一个邮件服务器,只是一个干净的后缀安装来传递电子邮件。 iv'e 定义了我的用户并使用 Thunderbird 与 IMAP 和 SMTP 连接。

当我进入雷鸟帐户设置并禁用“放置副本”时,postfix 没有将已发送消息的副本放在用户 .Sent 文件夹中。

但是,我还连接了我的 gmail、hotmail 或 yahoo 邮件,并禁用了“放置副本”,但在已发送邮件文件夹中仍有一份副本。

所以在这种情况下有 2 个选项:

  1. 我的后缀配置有问题
  2. gmail、hotmail、yahoo 将副本作为服务器端的不同进程放在他们发送的文件夹中

提前致谢

【问题讨论】:

    标签: linux email postfix-mta mail-server


    【解决方案1】:

    Postfix 本身不会在任何地方放置已发送消息的副本;它接收消息并将它们传递给收件人。将发送的消息保存到您自己的邮箱是您的用户代理(Thunderbird,在您的情况下)的责任。

    了解 Postfix(和其他传统的 Unix SMTP 服务器)没有“用户”概念很重要。是的,如果这样配置,可以通过提供用户名和密码进行身份验证,但 Postfix 不使用此身份信息。

    也就是说,配置 Postfix 以达到您的预期并非不可能 - sender_bcc_maps 可用于为您发送的邮件添加收件人,并通过添加您自己并在您的邮件客户端(或邮件传递)中使用过滤器procmail 之类的代理),您可以确保您发送的消息最终在 Sent 文件夹中。

    【讨论】:

    • 通常的sender_bcc_maps 解决方案有点笨重。最好设置一些过滤器并使用dovecot-lda 传递到Sent 文件夹。
    【解决方案2】:

    只是为了记录,已经搜索了一个方法,但没有找到,我在这里发布:

    我发现保存已发送电子邮件的唯一(简单)方法是 sender_bcc 解决方案(伴随着错误):

    我正在使用 postfix / dovecot / sieve / mysql 虚拟盒子

    在 /etc/postfix/main.cf 添加:

    sender_bcc_maps = mysql:/etc/postfix/mysql-virtual-bcc-maps.cf
    

    创建文件/etc/postfix/mysql-virtual-bcc-maps.cf:

    user = (database user)
    password = (database password)
    hosts = 127.0.0.1
    dbname = (database databasename)
    query = SELECT CONCAT_WS('',LEFT('%s', LOCATE('@', '%s')-1),'+sent@',SUBSTRING('%s', LOCATE('@', '%s')+1)) AS destination FROM virtual_users WHERE email='%s' AND autosent=1
    

    您会在我的查询中注意到,我在 virtual_users 表中添加了一个(tinyint 默认为 0)列,因此我可以为每个用户打开/关闭此自动发送项目功能。此查询获取 postfix 提供的发件人电子邮件地址,在 @ 符号处将其分成两半,并将 +sent 添加到地址,使其看起来像 sender+sent@domain.tld。这允许筛子在下一步中将其拾起并直接丢弃到已发送的物品中。

    在 /etc/dovecot/sieve/default.sieve 添加:

    require ["fileinto", "mailbox", "envelope", "subaddress","imap4flags"];
    if envelope :detail "to" "sent" {
        addflag "\\Seen";
        fileinto :create "Sent";
        stop;
    }
    

    也有助于修改 /etc/dovecot/conf.d/15-mailboxes.conf 并添加自动订阅已发送(以及垃圾和垃圾等):

      mailbox Sent {
        special_use = \Sent
        auto = subscribe
      }
    

    我想就这些了(我会在第二天发布这个,所以我想我明白了......)

    【讨论】:

      【解决方案3】:

      我正在使用 sender_bcc_maps 创建的自动副本运行安装。它工作正常。一定要检查发件人,否则大家都可以在外发文件夹中创建已发邮件。

      我已经用两个虚拟域解决了这个问题。一份给用户,一份给副本。

      但是 sender_bcc_maps 有一个大问题。所有密件抄送发件人将在发送的副本中删除。你再也看不到谁得到了这封邮件的密件。

      【讨论】:

        【解决方案4】:

        正如上面所说的“ego2dot0”,您不需要任何 MDA 过滤器(筛子等)来执行此操作。可以单独使用 Postfix 来完成,虽然我花了一段时间才弄清楚如何去做。

        您必须同时使用 sender_bcc_mapsvirtual_mailbox_maps 功能。

        您必须使用专门用于复制到自己的虚拟域。如果您的实际域是“your.domain.tld”,您可以使用例如。子域“copyself.your.domain.tld”。该子域不必实际存在,即。在 DNS 中定义(此外,最好不定义,这样就不会有人不小心从外部向它发送邮件)。它是一个纯虚拟域,只有 Postfix 才能识别。

        1) 将 sender_bcc_maps 配置为从 user@your.domain.tld 到 user@copyself.your.domain.tld 的密件抄送邮件。您可以使用常规“散列”类型映射仅对少数选定用户执行此操作,也可以使用 PCRE 类型映射和正则表达式同时为所有用户执行此操作。

        2) 您必须在 virtual_mailbox_domains 中定义您的虚拟域,如下所示:

        virtual_mailbox_domains=copyself.your.domain.tld
        

        3) 配置virtual_mailbox_maps,使地址“user@copyself.your.domain.tld”的目标邮箱是用户“user”的实际“Sent”邮箱。例如(假设您使用常规系统用户和 Maildir 格式 - 就像在我的情况下)用户“user”的“Sent”邮箱路径将是“/home/user/Maildir/.Sent”。因此,您可以将路径的公共部分定义为 virtual_mailbox_base,例如。

        virtual_mailbox_base=/home
        

        然后在虚拟邮箱映射中输入路径的其余部分,如下所示:

        user@copyself.your.domain.tld    user/Maildir/.Sent/
        

        (尾随 / 对指示 Maildir 格式很重要)。 同样,您可以使用 PCRE 类型映射为所有用户执行此操作。

        4) 为了正确地将邮件保存到邮箱,Postfix 还需要知道特定用户的正确 UID 和 GID,因此您必须使用 virtual_uid_mapsvirtual_gid_maps参数也一样。如果您使用的是虚拟用户,那么定义“静态”类型映射可能就足够了,该映射指定拥有所有虚拟邮箱的系统用户的单个 UID 和 GID。但是,如果您使用像我这样的系统用户,则需要为任何用户提供正确的实际 UID 和 GID。如果您只有几个用户,您可以使用常规的“散列”类型映射,其条目如下:

        user@copyself.your.domain.tld    2001
        

        或者您可以尝试使用“pipemap”映射类型设置管道,该管道使用一些 PCRE 映射和“unix:passwd.byname”映射来获取所有用户的 UID 和 GID(我还没有完成这部分,因为我的 Postfix 安装是在没有“pipemap”类型支持的情况下编译的)。

        所以总结一下,使用这样的东西:

        在 /etc/postfix/main.cf 文件中,添加以下行:

        sender_bcc_maps=hash:/etc/postfix/sender_bcc
        virtual_mailbox_domains=copyself.your.domain.tld
        virtual_mailbox_base=/home
        virtual_mailbox_maps=hash:/etc/postfix/copyself
        virtual_uid_maps=hash:/etc/postfix/copyself_uids
        virtual_gid_maps=hash:/etc/postfix/copyself_gids
        

        /etc/postfix/sender_bcc 包含一堆行,例如:

        user@your.domain.tld    user@copyself.your.domain.tld
        

        /etc/postfix/copyself 分别包含如下行:

        user@copyself.your.domain.tld    user/Maildir/.Sent/
        

        /etc/postfix/copyself_uids 和 /etc/postfix/copyself_gids 分别包含以下行:

        user@copyself.your.domain.tld    2001
        

        我已经在我的服务器上完成了这项工作,对我来说效果很好。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-02-02
          • 1970-01-01
          • 2019-03-22
          • 2019-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多