Configure o sendmail para clonar todos os emails enviados

3

existe uma maneira de configurar o sendmail semelhante ao postfix '

[email protected]

?

    
por webwesen 12.04.2010 / 21:58

3 respostas

4

Dê uma olhada neste milter: link

    
por 14.04.2010 / 15:32
1

Você pode usar o MIMEDefang, procure por: add_recipient

O MIMEDefang está no link

    
por 14.04.2010 / 16:05
1

Eu esperava encontrar uma solução que não exigisse um milter, mas parece que isso não é possível. Para apenas clonar e-mails para uma caixa de correio específica (possivelmente remota), você poderia usar os milters sugeridos por outras pessoas aqui; Eu precisava realmente criar um clone dos fluxos SMTP para outro MTA. A melhor solução que encontrei foi o militante do mailforward . Infelizmente, não parece funcionar em nosso ambiente Sendmail (talvez relacionado a graylisting?)

Há uma lista mais completa de possíveis soluções em milter.org , incluindo o comercial (US $ 90) milter-bcc, mas como a API milter fornece um mecanismo para adicionar destinatários de envelope (sem fazer nenhuma outra alteração na mensagem), consegui codificar um milter mínimo que adiciona um destinatário fixo a todas as mensagens e, em seguida, aceita eles:

/*
 * 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();
}

Você ainda precisa compilar e instalar isto (junto com o initscript ou systemd para iniciá-lo antes do Sendmail após as reinicializações) e configurar o Sendmail para usar este milter, então ainda é um pouco doloroso comparado ao equivalente add_bcc no postfix (ou " invisível "configuração de roteador no Exim), mas isso é Sendmail para você.

    
por 05.12.2011 / 16:51

Tags