配置 sendmail 克隆所有外发电子邮件

配置 sendmail 克隆所有外发电子邮件

有没有办法配置发送邮件如同后缀

[email protected]

答案1

看看这个过滤器:http://www.five-ten-sg.com/sm-archive/

答案2

您可以使用 MIMEDefang,查找:add_recipient

MIMEDefang 位于http://www.mimedefang.org/

答案3

我希望找到一个不需要过滤器的解决方案,但这似乎是不可能的。如果只是将电子邮件克隆到特定邮箱(可能是远程邮箱),您可以使用其他人建议的过滤器;我需要实际创建 SMTP 流到另一个 MTA 的克隆。我发现的最佳解决方案是邮件转发工具。不幸的是,它似乎在我们的 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 以使用这个邮件过滤器,因此与 postfix 中等效的 add_bcc(或 Exim 中“看不见的”路由器配置)相比,它仍然相当痛苦,但这就是 Sendmail 为您准备的。

相关内容