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

sd1*_*sd1 3 linux email postfix-mta mail-server

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

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

当我去thunderbird帐户设置并禁用"放置副本"时,postfix没有在用户.Sent文件夹中放置已发送邮件的副本.

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

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

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

提前致谢

Mag*_*äck 7

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

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

也就是说,将Postfix配置为您所期望的并不是不可能的 - sender_bcc_maps可以用来将收件人添加到您发送的邮件中,并通过添加自己并在邮件客户端(或procmail等邮件传递代理)中使用过滤器,您可以确保您发送的邮件最终在"已发送"文件夹中.

  • 通常的'sender_bcc_maps`解决方案有点笨重.设置一些过滤器并使用`dovecot-lda`传送到`Sent`文件夹会很不错. (2认同)

小智 7

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

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

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

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

sender_bcc_maps = mysql:/etc/postfix/mysql-virtual-bcc-maps.cf
Run Code Online (Sandbox Code Playgroud)

创建文件/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
Run Code Online (Sandbox Code Playgroud)

你会在我的查询中注意到,我在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;
}
Run Code Online (Sandbox Code Playgroud)

还有助于修改/etc/dovecot/conf.d/15-mailboxes.conf并添加自动订阅发送(以及垃圾和垃圾及其他内容):

  mailbox Sent {
    special_use = \Sent
    auto = subscribe
  }
Run Code Online (Sandbox Code Playgroud)

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