postfix并保存到发送的邮件目录

时间:2013-11-14 06:21:36

标签: linux email postfix-mta mail-server

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

所以我有一个邮件服务器,只是一个干净的postfix安装,提供电子邮件。 iv'e定义了我的用户并使用thunderbird与IMAP和SMTP连接。

当我进入thunderbird帐户设置并禁用“放置副本”时,postfix没有在用户.sent文件夹中放置已发送邮件的副本。

然而,iv'e还连接了我的gmail,hotmail或yahoo邮件,并在“发送副本”中删除了一个副本,并且仍然在已发送的项目文件夹中有一个副本。

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

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

4 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:5)

仅仅是为了记录,我一直在寻找一个如何,而不是找到一个,我在这里发布它:

我发现保存已发送电子邮件的唯一(简单)方法是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提供的发件人电子邮件地址,在@符号处将其拆分为一半,并将+发送到该地址,使其看起来像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
  }

我认为这就是全部(我在做完第二天之后发布了这个,所以我认为我得到了所有......)

答案 2 :(得分:2)

我正在使用sender_bcc_maps创建的自动副本运行安装。它工作正常。您必须检查发件人,否则每个人都可以在外国发送的文件夹中创建已发送的邮件。

我用两个虚拟域解决了这个问题。一个用户,一个用于复制。

但sender_bcc_maps存在很大问题。所有bcc发件人将在发送的副本中删除。你不能再看到这个邮件的盲人副本了。

答案 3 :(得分:0)

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

您必须同时使用 sender_bcc_maps virtual_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”的实际“已发送”邮箱。例如(假设您使用的是常规系统用户和Maildir格式,例如我的情况),用户“ user”的“已发送”邮箱路径将为“ /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_maps virtual_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

我已经在服务器上完成了此操作,对我来说非常有用。