linux 添加后缀并保存到已发送邮件目录

tkclm6bt  于 2022-12-03  发布在  Linux
关注(0)|答案(4)|浏览(156)

I know this might be a dummy question or a question that comes from lack of knowledge, but I hope someone can still answer it. I did try to read a lot of Postfix documentation but found no answer to this. I don't even know if it's a Postfix specific or mail servers general question.
So I have a mail server, just a clean Postfix install that delivers email. I've defined my users and connected with IMAP and SMTP using Thunderbird.
When I went to Thunderbird account settings and disabled "place a copy", Postfix did not put a copy of the sent message in the user .Sent folder.
However, I've also connected my Gmail, Hotmail or Yahoo mail and disabled the "place a copy" and still have a copy in the sent items folder.
So in this case there are 2 options:

  1. Something is wrong with my Postfix configuration
  2. Gmail, Hotmail, Yahoo put a copy in their sent folder as a different process on the server side
mfpqipee

mfpqipee1#

只是为了记录在案,搜索了周围的一个如何,并没有找到一个,我张贴在这里:
我发现的保存已发送邮件的唯一(简单)方法是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

您会注意到,在我的查询中,我添加了(tinyint默认为0)列添加到我的virtual_users表中,这样我就可以打开/关闭每个用户的自动发送邮件功能。并将+sent添加到地址中,使其看起来像sender+sent@ domain. tld。这允许sieve在下一步中将其提取并直接放到已发送项目中。
在/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-mailboxs.conf并将自动订阅添加到已发送邮件(以及垃圾邮件和垃圾邮件等)也很有帮助:

mailbox Sent {
    special_use = \Sent
    auto = subscribe
  }

我想这就是全部(我在第二天发布了这个,所以我想我得到了全部...)

ogsagwnx

ogsagwnx2#

Postfix本身不会将已发送消息的副本放置在任何地方;它接收消息并将其发送给收件人。2将发送的消息保存到您自己的邮箱是您的用户代理(在您的情况下是Thunderbird)的责任。
Postfix(和其他传统的Unix SMTP服务器)没有“用户”的概念。是的,如果这样配置,可以通过提供用户名和密码进行身份验证,但Postfix不使用这些身份信息。
也就是说,配置Postfix来做你所期望的事情并不是不可能的-sender_bcc_maps可以用来向你发送的邮件添加收件人,通过添加你自己并在你的邮件客户端(或像procmail这样的邮件递送代理)中使用过滤器,你可以确保你发送的邮件最终出现在“已发送”文件夹中。

h9vpoimq

h9vpoimq3#

我正在安装sender_bcc_maps创建的自动副本。运行正常。您必须检查发件人,否则每个人都可以在外部已发送文件夹中创建已发送邮件。
我已经用两个虚拟域解决了这个问题。一个是用户的,一个是副本的。
但是sender_bcc_maps有一个大问题。所有的bcc发件人都将在发送副本中被删除。你再也看不到了,谁得到了这封邮件的密件副本。

hgc7kmma

hgc7kmma4#

正如上面的“ego 2dot 0”所说,你不需要任何MDA过滤器(sieve等)来做这件事。它可以单独使用Postfix来完成,尽管我花了一段时间来弄清楚如何做。
您必须同时使用发件人密件抄送Map虚拟邮箱Map功能。
您必须使用一个专门用于复制到自己的虚拟域。如果您的实际域是“your.domain.tld”,您可以使用例如子域“copyself.your.domain.tld”。此子域不必实际存在,即在DNS中定义(此外,最好不定义它,所以没有人会意外地从外部向它发送邮件)。它是一个纯粹的虚拟域,只有Postfix才能识别。
1)将sender_bcc_maps配置为从user@your.domain.tld发送到user@ copyself. your. domain. tld的密件抄送邮件。您可以使用常规的“哈希”类型Map仅为少数选定用户执行此操作,也可以使用PCRE类型Map和正则表达式同时为所有用户执行此操作。
2)您必须在virtual_mailbox_domains中定义虚拟域,如下所示:

virtual_mailbox_domains=copyself.your.domain.tld

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

virtual_mailbox_base=/home

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

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

(the尾部的/对于指示Maildir格式很重要)。同样,您可以使用PCRE类型Map为所有用户执行此操作。
4)为了正确地将邮件保存到邮箱中,Postfix还需要知道特定用户的UID和GID,因此您必须使用virtual_uid_mapsvirtual_gid_maps参数。如果您使用的是虚拟用户,定义“静态”类型Map,指定拥有所有虚拟邮箱的系统用户的单个UID和GID可能就足够了。但是,如果您使用的是像我这样的系统用户,则需要为任何用户提供正确的实际UID和GID。2如果您只有少数用户,则可以使用常规的“hash”类型Map,其中包含如下条目:

user@copyself.your.domain.tld    2001

或者您可以尝试设置一个带有“pipemap”Map类型的管道,它使用一些PCREMap和“unix:passwd.byname”Map来获取所有用户的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

我已经在我的服务器上做了这件事,它对我来说很好。

相关问题