Błąd procmaila podczas przesyłania potoku do skryptu php


0

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:me@gmail.com:mypass1??"
/bin/sh: 0: Can't open ??myusername:me@gmail.com: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?


Usuń cudzysłowy `` z całej linii php w przepisie.
Meuh

Odpowiedzi:


1

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,

echo "moo" | `echo wc`

jest równa

echo "moo" | wc

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ć, |egisterchociaż ma to miejsce w obecnym kodzie) i nie trzeba używać nawiasów klamrowych, aby dodać kilka flag.

:0bf
* ^Subject.*register$
| /usr/bin/php -f /root/data/scripts/register.php
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.