Ejecuto un servidor de correo Postfix / Dovecot para uso personal. Solo hay un puñado de buzones reales, esencialmente justos [email protected]
y [email protected]
.
Con frecuencia utilizo el virtual
archivo para crear buzones virtuales a los que se reenvía [email protected]
. Tengo varios de estos para cuentas desechables, como compras únicas en tiendas en línea, juegos en línea que quiero probar sin preocuparme por el spam en curso, etc. Para hacerlo, utilizo SSH y ejecuto los siguientes comandos:
sudo vim /etc/postfix/virtual
# add a line that looks like:
# # [email protected] [email protected]
sudo postmap virtual
sudo service postfix restart
Hago esto con suficiente frecuencia que me gustaría automatizar el proceso hasta cierto punto. Pensé simplemente en escribir un script de shell que tomara el buzón virtual y el buzón real como argumentos e hiciera los cambios en sí, pero espero algo aún más fácil.
Me gustaría poder enviar un correo electrónico desde [email protected]
otro buzón del servidor con el nombre del buzón virtual como cuerpo del mensaje. El problema serían las sudo
llamadas, pero puedo crear un nuevo usuario cuya única responsabilidad es manejar esto, que debería manejar eso.
Principalmente la pregunta es esta: ¿cómo crearía un evento que se activaría por correo electrónico? ¿Hay algún servicio en algún lugar que haga esto? ¿Puedo configurar Postfix o Dovecot para escuchar ese correo electrónico y ejecutar comandos en ese evento?
Respuestas:
El procedimiento correcto para ejecutar un script (uso un script de shell) al recibir un mensaje de correo es el siguiente. Implica modificar el archivo de configuración de postfix , master.cf (que, en mi Debian, se encuentra en / etc / postfix ) agregando la siguiente línea:
que indica a postfix que ejecute el script (debe hacerlo ejecutable) cuando se produce algún evento.
Para especificar cuándo ejecutar el script, haga lo siguiente: suponga que desea que se ejecute cuando [email protected] reciba un mensaje. Coloca la siguiente línea
dentro del archivo /etc/postfix/address.txt ; necesitará crear una base de datos adecuada para postfix para usar este archivo, lo que logrará mediante
que produce como salida un archivo llamado /etc/postfix/address.db . Ahora regrese al archivo /etc/postfix/main.cf y agregue la siguiente línea:
Ahora reinicie postfix ,
y deberías estar listo para ir.
fuente
sendmail
directo en el servidor no activará esto.pickup
opción.Puedo ver dos soluciones obvias.
Si está utilizando procmail como MDA en su servidor, o está dispuesto a convertirlo para usarlo, puede ejecutar cualquier script arbitrario en cualquier correo electrónico arbitrario a través de la
|
acción de receta (pipe) de procmail . Esperemos que no se inicie como root, pero debería ser fácil crear un script que realice la magia requerida y que un usuario relevante pueda invocar sin contraseña como root. El resultado de la secuencia de comandos incluso podría retroalimentarse en el mismo correo electrónico y el correo electrónico entregado más tarde haciendo que la receta sea una acción de filtro.Una alternativa (que debería requerir menos mantenimiento práctico) es crear un solo buzón y configurar Postfix
$recipient_delimiter
para que sea algo que normalmente no se usa para ese propósito; por ejemplo,.
o-
. Tenga en cuenta que recipiente_delímetro es una configuración de todo el servidor. Digamos que configuró el buzón[email protected]
y lo configuró$recipient_delimeter = .
. Esto permitirádummy.<anything>@example.com
que se entregue al buzón local correspondiente a[email protected]
. Para deshabilitar uno de estos, agreguedummy.<whatever>@example.com
a una tabla de destinatarios apropiada con una acción de rechazo. La desventaja es que será un buzón general para el prefijo, por lo que querrá hacer que el prefijo sea difícil de encontrar por accidente o ataques de diccionario. La ventaja es que, en el caso normal (el remitente respeta sus deseos y no revende su dirección de correo electrónico), este enfoque requiere cero mantenimiento, y siempre puede cambiar su prefijo más adelante y enumerar explícitamente las combinaciones para las que desea seguir recibiendo correo. .fuente
En caso de que el enlace se caiga, aquí hay un resumen.
Primero, vaya
master.cf
y registre su script "myhook" agregando la siguiente línea:myhook unix - n n - - pipe flags=F user=www-data argv=/path/to/script.sh ${sender} ${size} ${recipient}
Además, edite la línea smtp para indicarle a Postfix que ejecute el filtro para cualquier correo que llegue a través de la entrega SMTP:
smtp inet n - - - - smtpd -o content_filter=myhook:dummy
Tenga en cuenta que si envía correos utilizando el comando "sendmail", el filtro no se activará. En este caso, agregue la opción después del método de entrega "recogida":
pickup fifo n - - 60 1 pickup -o content_filter=myhook:dummy
Reiniciar postfix:
postfix reload
Haga que su script sea legible y ejecutable por cualquiera:
chmod +rx script.sh
Tenga en cuenta que el script siempre se activa para cualquier correo que llegue. Para especificar la dirección exacta, consulte la respuesta @MariusMatutiae.
fuente