Pregunta

Estoy intentando hacer un reenvío de correo electrónico personalizado. #1 Estoy en un servidor compartido, que está usando Qmail, y opcionalmente PROCMAIL.

Lo que estoy tratando de lograr es un reenvío de correo electrónico personalizado de una dirección, basado en un horario. Por ejemplo, tengo un horario de empleados que trabajan cada día de la semana, y tengo un script PHP que selecciona la dirección de correo electrónico de un empleado aleatorio que funciona hoy.

Así que estoy tratando de llamar a ese script en Procmail y generar el resultado (que es una sola dirección de correo electrónico) en la línea de reenvío:

Ejemplo:

#Something
LOGFILE=/usr/home/myname/procmail-log
VERBOSE=yes
EXITCODE=99
MAILDIR=/usr/boxes/myname
DEFAULT=/usr/boxes/myname/mybox
SHELL=/bin/sh
MYVAR=$(php -q /usr/home/myname/testemail/emailtester.php)

:0
! $MYVAR

Esto no está funcionando. En absoluto. También lo he intentado:

MYVAR=`php /usr/home/myname/testemail/emailtester.php`

así como simplemente meterlo en la línea de reinicio:

:0
! |php /usr/home/myname/testemail/emailtester.php

Estoy completamente fuera de mi elemento aquí ... Traté de ni siquiera usar Procmail, y simplemente tuve todo el correo electrónico a un script PHP, desde Qmail. Necesito que los encabezados permanezcan intactos, como un delantero normal, y eso resultó ser difícil con PHP, y un poco más allá de mi alcance. (Logré crear un bucle de correo electrónico infinito), así que prefiero no intentarlo nuevamente.

Podría intentar escribir esto en Perl, que nunca he usado, pero necesito que el horario sea administrable desde una interfaz web, o al menos de manera fácil de usar.

Cualquier ayuda o sugerencia sería apreciada en este punto, gracias

EDITAR:

Bueno, ya que no puedo poner el código en un comentario, solo editaré aquí.

Ahora obteniendo esto en mi registro:

Folder: /usr/local/bin/php /usr/home/idnani/testemail/emailtester.ph     1679
"rocmail: Executing "/usr/local/bin/php,/usr/home/idnani/testemail/emailtester.php
Could not open input file: /usr/home/idnani/testemail/emailtester.php

Cuando uso con: 0fw obtengo:

"rocmail: Executing "/usr/local/bin/php,/usr/home/idnani/testemail/emailtester.php
Could not open input file: /usr/home/idnani/testemail/emailtester.php
procmail: [69907] Thu Jun 16 14:04:17 2011
procmail: Program failure (1) of "/usr/local/bin/php"
procmail: Rescue of unfiltered data succeeded

EDITAR: ¡Averigido!

Encontró la forma correcta después de mucha prueba y error.

¡Ni siquiera uses la tubería en todo, y necesitas el! Símbolo delantero:

Regla final:

:0
! `/usr/local/bin/php -f $HOME/emailtest/emailtester.php`

Tan simple ... Estoy un poco enojado, me tomó horas resolver esto, ¡gracias a todos por ayudarme a señalarme en la dirección correcta!

¿Fue útil?

Solución 3

Encontró la forma correcta después de mucha prueba y error.

¡Ni siquiera uses la tubería en todo, y necesitas el! Símbolo delantero:

Todo lo que hace esta regla es pedirle al script PHP un solo correo electrónico y luego reenviar ese correo electrónico. Regla final:

:0
! `/usr/local/bin/php -f $HOME/emailtest/emailtester.php`

Tan simple ... Estoy un poco enojado, me tomó horas resolver esto, ¡gracias a todos por ayudarme a señalarme en la dirección correcta!

La respuesta de Michael parece que debería funcionar, ¿y tal vez lo hace en una circunstancia diferente? No pude hacerlo, por eso estoy respondiendo esto yo mismo ...

Nueva edición:

Nota: aún puede recuperar todo el correo electrónico en PHP a través de Stdin

Nota: puede poner/usr/local/bin/php en su script en sí mismo en la primera línea:

#!/usr/local/bin/php

Otros consejos

Estabas tan cerca ... necesitas tu siembras sin que la ! delantero:

:0
|/usr/bin/php /usr/home/myname/testemail/emailtester.php

EDITAR Pongo el camino completo a PHP, en caso de que Procmail $PATH está incompleto. Cámbielo a cualquiera que sea su ruta PHP real.

Para evitar bucles de correo electrónico, he hecho cosas como esta:

PATH=/usr/local/bin:/bin:/usr/bin
MAILDIR=$HOME/Mail
DEFAULT=$HOME/Mail/inbox
LOGFILE=$HOME/procmail.`date +%Y-%m`.log
SHELL=/usr/bin/ksh

MY_XLOOP='X-Loop: emailtester.php'

:0
* ! ^$MY_XLOOP
{
    # add a header
    # 'f' = filter: continue processing results of program
    # 'w' = wait for program to return
    # 'h' = pass message headers to program
    :0fwh
    | formail -A "$MY_XLOOP"

    # then forward the message
    # 'c' = send a copy to recipient and continue processing
    :0c
    | php /usr/home/myname/testemail/emailtester.php
}

# if we get here, then the message has an X-Loop header.
# let it fall into $DEFAULT
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top