есть ли способ настроить Отправить почту похожий на постфикс'
always_bcc=bcc@localhost.localdomain
?
Взгляните на этот 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, включая коммерческий milter-bcc (90 долларов США), но поскольку 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, так что это все еще довольно болезненно по сравнению с эквивалентным add_bcc в postfix (или "невидимом" маршрутизаторе config в Exim), но это для вас Sendmail.