Mam przepis na procmail, który pobiera treść wiadomości i wysyła ją do skryptu php. Jednak procmail narzeka z błędem.
Oto, jak to działa: Użytkownik, który potrzebuje dostępu do parametrów sprzętowych, musi zarejestrować się za pośrednictwem poczty e-mail w następujący sposób:
Temat: Zarejestruj
ciało: ??
Procmail następnie wysyła ciało do skryptu php w celu przetworzenia. Powód, dla którego używam „??” jest ułatwienie mi odfiltrowywania śmieci z ciała przez grep.
Oto błąd w procmail.log:
From fetchmail Fri Nov 25 15:41:36 2016
Subject: Register
Folder: /root/mail/inbox/inbox 3673
procmail: [20601] Fri Nov 25 15:43:44 2016
procmail: Assigning "DEFAULT=/root/mail/inbox/inbox"
procmail: Assigning "PMDIR=/root/.procmail"
procmail: Match on "^Subject.*[R|r]egister$"
procmail: Executing "/usr/bin/php,-f,/root/data/scripts/register.php"
procmail: Executing "??myusername:[email protected]:mypass1??"
/bin/sh: 0: Can't open ??myusername:[email protected]:mypass1??
Oto mój przepis na procmail:
SHELL=/bin/sh
HOME=$HOME
PATH=$HOME/bin:/usr/local/bin:/usr/bin:/bin:/sbin:/usr/sbin
SENDMAIL=/usr/sbin/sendmail
MAILDIR=$HOME/mail
LOGFILE=/var/log/procmail.log
LOGABSTRACT="all"
VERBOSE="on"
DEFAULT=$HOME/mail/inbox/inbox
PMDIR=$HOME/.procmail
:0
* ^Subject.*[R|r]egister$
{
:0 bf
| `/usr/bin/php -f /root/data/scripts/register.php`
}
Oto skrócony fragment skryptu register.php:
#!/usr/bin/php
<?php
while ( false !== ( $user_register = fgets ( STDIN ) ) )
{
$user_info = preg_match ( "/\?\?.*\?\?/", @$user_register, $new_registration ) ;
foreach ( $new_registration as $input )
{
print ( $input."\n" ) ;
}
}
Nie sądzę, żeby miało to coś wspólnego z kodem php, ponieważ mam podobnie skonstruowane przepisy i kod php.
Jakieś wskazówki?
Odpowiedzi:
Prawidłowa składnia polega na usunięciu cudzysłowów wokół skryptu PHP, chyba że jego szczególnym celem jest wydrukowanie nazwy polecenia, do którego ma zostać przesłany komunikat na standardowe wyjście.
Innymi słowy,
jest równa
Istnieje wiele innych uproszczeń i poprawek, które możesz wprowadzić. Warunki w programie Procmail domyślnie nie rozróżniają wielkości liter (i nie sądzę, że zamierzasz dopasować,
|egister
chociaż ma to miejsce w obecnym kodzie) i nie trzeba używać nawiasów klamrowych, aby dodać kilka flag.źródło