В этом случае вам необходимо явно обрабатывать подстановочные знаки с помощью wildcard
функции (по крайней мере в GNU Make):
%.foo: %.bar
cp $< $@
foos = $(patsubst %.bar,%.foo,$(wildcard *.bar))
test: $(foos)
echo $(foos)
$(wildcard *.bar)
заменяется на все файлы, оканчивающиеся на .bar
, вызов patsubst
заменяет .bar
на .foo
, после чего все цели обрабатываются, как и ожидалось.
procmail
es considerado problemático por Philip Guenther (y posiblemente sea inútil en este caso, ya que los archivos .forward
o equivalentes pueden enviar los correos directamente a su programa, omitiendo la complejidad innecesaria deprocmail
).
Executive summary: delete the procmail port; the code is not safe and should not be used as a basis for any further work.
As people may know, I was the upstream maintainer of procmail back in the late 1990's though 2001.
Por tanto, puede ser aconsejable alguna otra solución; esto depende del Agente de transporte de correo (MTA ). Otra opción sería usar el MTA para entregar a un archivo local o IMAP, luego hacer que su programa analice ese archivo o IMAP. Esto tiene la ventaja de seguir aceptando correo electrónico y guardarlo en algún lugar; ¿Qué sucede cuando su programa tiene errores o falla al ejecutarse? Un problema menor que durante la entrega de correo en vivo...
Probablemente copie el método Sendmail .forward
o descubra cómo hacerlo correctamente en Eximese. (Aborté porque me estaba tomando mucho tiempo revisar los documentos de Exim. )Hayelspy
si desea realizar en -SMTP -escaneo de tiempo de forma MILTER...
Vaya, eso parece largo y complicado.
Configure una entrada mailertable
para reenviar todos los correos del dominio (y .domain
para los subdominios, si es necesario )a un usuario local, aquíjdoe
example.com local:jdoe
.example.com local:jdoe
y luego configure un archivo .forward
para que ese usuario ejecute el código necesario
$ cat ~jdoe/.forward
"|/etc/smrsh/process"
$
que podría ser tan simple como
$ cat /etc/smrsh/process
#!/bin/sh
cat >> /home/jdoe/allmails
$
debido a que los correos electrónicos se introducen en la entrada estándar (, esto podría ser malo si se ejecutan varias instancias de este process
a la vez; presumiblemente, su código real maneja tales condiciones de carrera o es idempotente... ¿verdad? ). Este método también puede funcionar para cualquier otro MTA que copie la sintaxis de reenvío de Sendmail,suponiendo que pueda obtener el MTA para redirigir todos los correos a un usuario en particular.
Esto supone que el soporte mailertable
está habilitado, confFORWARD_PATH
está configurado, que Sendmail puede ejecutar el código (consulte smrsh(8)
aunque tenga en cuenta que algunos proveedores pueden cambiar el directorio sin actualizar la documentación (en ejecución strings /the/path/to/smrsh | fgrep /
puede ayudar ))y que algo como selinux tampoco está rompiendo cosas.
Otra opción para Sendmail es usar un MILTER como MIMEDefang y realizar allí cualquier lógica comercial que sea necesaria. (Varios otros MTA admiten MILTER, o tienen algo similar.)
De un vistazo asmtpd.conf(5)
(actualizado para los cambios de OpenBSD 6.4)
action "mymda" mda "/path/to/your/command" user jdoe
match from any for domain example.com action "mymda"
Esta parecía una pregunta bastante común... Encontré esto ya respondido, que es lo que sugeriría. Procmail es un agente de entrega local... lo que creo que significa que algo ya recibió el correo de la red y lo entregó a procmail para la entrega local u otro filtrado. En este caso, postfix sería esa cosa. Habiendo ejecutado postfix en producción, es una herramienta sólida y muy flexible para el manejo de correo personalizado.
Мне нравится почта -в -стеке ящиков -, который использует Postfix и Dovecot. После их установки вы можете сделать следующее, чтобы выполнить скрипт при получении почты на определенные адреса:
создайте свой скрипт (т.е.mail_processor.py
)в каталоге /usr/lib/dovecot/sieve-execute/
:
#!/usr/bin/python3
from sys import stdin
with open('/var/log/mail_processor.log', 'a') as logfile:
for line in stdin:
print(line.rstrip(), file=logfile)
убедитесь, что ваш сценарий и целевые файлы имеют правильные разрешения:
$ chmod +rx /usr/lib/dovecot/sieve-execute/mail_processor.py
$ chmod 0777 /var/log/mail_processor.log
включить плагин sieve_extprograms
:
изменить раздел плагина \etc\dovecot\conf.d\90-sieve.conf
следующим образом:
sieve_extensions = +vnd.dovecot.execute
sieve_plugins = sieve_extprograms
sieve_execute_bin_dir = /usr/lib/dovecot/sieve-execute
перезагрузить голубятню:
$ service dovecot restart
создать сетчатый фильтр (т.е. в Roundcube перейдите кsettings
->filters
->actions
->edit filter set
):
require ["vnd.dovecot.execute"];
# rule:[mail processing]
if true
{
execute :pipe "mail_processor.py";
}
Теперь вся почта, доставленная в любой почтовый ящик с этим сетчатым фильтром, будет проходить через mail_processor.py
для принятия мер.
Сито Pigeonhole :Плагин Extprograms для справки