webwesen Asked: 2010-04-13 11:58:05 +0800 CST2010-04-13 11:58:05 +0800 CST 2010-04-13 11:58:05 +0800 CST 配置 sendmail 以克隆所有外发电子邮件 772 有没有办法配置类似于postfix的sendmail ' [email protected] ? sendmail 3 个回答 Voted Best Answer Aleksandar Ivanisevic 2010-04-15T05:32:24+08:002010-04-15T05:32:24+08:00 看看这个 milter:http ://www.five-ten-sg.com/sm-archive/ rkthkr 2010-04-15T06:05:14+08:002010-04-15T06:05:14+08:00 您可以使用 MIMEDefang,查找:add_recipient MIMEDefang 位于http://www.mimedefang.org/ Alex Dupuy 2011-12-06T07:51:59+08:002011-12-06T07:51:59+08:00 我希望找到一个不需要 milter 的解决方案,但似乎这是不可能的。对于仅将电子邮件克隆到特定邮箱(可能是远程邮箱),您可以使用此处其他人建议的 milters;我实际上需要将 SMTP 流克隆到另一个 MTA。我发现最好的解决方案是mailforward milter。不幸的是,它似乎在我们的 Sendmail 环境中不起作用(可能与灰名单有关?) milter.org上有更完整的可能解决方案列表,包括商业(90 美元)milter-bcc,但由于 milter API 提供了一种添加信封收件人的机制(无需对消息进行任何其他更改),我能够只需编写一个非常小的 milter,为所有消息添加一个固定的收件人,然后接受它们: /* * Sendmail milter to add an additional (bcc) envelope recipient */ #include <stdio.h> #include <stdlib.h> #include <sysexits.h> #include <unistd.h> #include <sys/stat.h> #include "libmilter/mfapi.h" #ifndef bool # define bool int # define TRUE 1 # define FALSE 0 #endif /* ! bool */ char *connsock; char *bcc; sfsistat bccfi_eom(ctx) SMFICTX *ctx; { if (smfi_addrcpt(ctx, bcc) != MI_SUCCESS) fprintf(stderr, "smfi_addrcpt failed\n"); return SMFIS_ACCEPT; } struct smfiDesc bccfilter = { "add_bcc", /* filter name */ SMFI_VERSION, /* version code -- do not change */ SMFIF_ADDRCPT, /* flags */ NULL, /* connection info filter */ NULL, /* SMTP HELO command filter */ NULL, /* envelope sender filter */ NULL, /* envelope recipient filter */ NULL, /* header filter */ NULL, /* end of header */ NULL, /* body block filter */ bccfi_eom, /* end of message */ NULL, /* message aborted */ NULL, /* connection cleanup */ #if SMFI_VERSION > 2 NULL, /* unknown SMTP commands */ #endif /* SMFI_VERSION > 2 */ #if SMFI_VERSION > 3 NULL, /* DATA command */ #endif /* SMFI_VERSION > 3 */ #if SMFI_VERSION > 4 NULL /* Negotiate, at the start of each SMTP connection */ #endif /* SMFI_VERSION > 4 */ }; static void usage(prog) char *prog; { fprintf(stderr, "Usage: %s SOCKET_PATH BCC_ADDR\n", prog); } int main(argc, argv) int argc; char **argv; { char *socket; bool rmsocket = FALSE; struct stat status; if (argc != 3) { usage(argv[0]); exit(EX_USAGE); } socket = argv[1]; bcc = argv[2]; if (smfi_setconn(socket) == MI_FAILURE) { (void) fprintf(stderr, "smfi_setconn failed\n"); exit(EX_SOFTWARE); } /* attempt to remove existing socket, if possible */ if (stat(socket, &status) == 0 && S_ISSOCK(status.st_mode)) { unlink(socket); } if (smfi_register(bccfilter) == MI_FAILURE) { fprintf(stderr, "smfi_register failed\n"); exit(EX_UNAVAILABLE); } return smfi_main(); } 您仍然需要编译和安装它(连同 initscript 或 systemd 单元以在重新启动后 Sendmail 之前启动它)并配置 Sendmail 以使用此 milter,因此与 postfix 中的等效 add_bcc (或“看不见的”路由器相比)仍然相当痛苦Exim 中的配置),但那是您的 Sendmail。
看看这个 milter:http ://www.five-ten-sg.com/sm-archive/
您可以使用 MIMEDefang,查找:add_recipient
MIMEDefang 位于http://www.mimedefang.org/
我希望找到一个不需要 milter 的解决方案,但似乎这是不可能的。对于仅将电子邮件克隆到特定邮箱(可能是远程邮箱),您可以使用此处其他人建议的 milters;我实际上需要将 SMTP 流克隆到另一个 MTA。我发现最好的解决方案是mailforward milter。不幸的是,它似乎在我们的 Sendmail 环境中不起作用(可能与灰名单有关?)
milter.org上有更完整的可能解决方案列表,包括商业(90 美元)milter-bcc,但由于 milter API 提供了一种添加信封收件人的机制(无需对消息进行任何其他更改),我能够只需编写一个非常小的 milter,为所有消息添加一个固定的收件人,然后接受它们:
您仍然需要编译和安装它(连同 initscript 或 systemd 单元以在重新启动后 Sendmail 之前启动它)并配置 Sendmail 以使用此 milter,因此与 postfix 中的等效 add_bcc (或“看不见的”路由器相比)仍然相当痛苦Exim 中的配置),但那是您的 Sendmail。