Afox Posted February 7, 2019 Posted February 7, 2019 Hallo, ich würde gerne sämtlichen E-Mail-Verkehr einer bestimmten Adresse an eine Remote-Adresse (http://www.domain.com/api/api-script) pipen. Wie kann ich das am Froxlor-verträglichsten umsetzen? Eine Weiterleitung mit der URL darin wird wohl nicht funktionieren gehe ich mal davon aus. Außerdem fände ich in dem Fall nicht so gut, dass die Mail dann doppelt vorhanden wäre. Gruß, Afox
d00p Posted February 8, 2019 Posted February 8, 2019 schau mal hier: https://thecodingmachine.io/triggering-a-php-script-when-your-postfix-server-receives-a-mail
Afox Posted February 8, 2019 Author Posted February 8, 2019 wow, vielen Dank! Also arbeite ich mit einer access file und einer Zeile in der ich den "hook" definiere. Noch zwei drei Fragen: Was ist eigentlich der :dummy Parameter? Welcher Nutzer und welcher Speicherort wäre zu empfehlen? Ich dachte an user=froxlor und argv= froxlor-root-Verzeichnis? Gruß, Afox
d00p Posted February 8, 2019 Posted February 8, 2019 Da ich nur für dich gegoogelt habe, kann ich dir da nicht viel helfen, aber ich würde schätzen das der Syntax der Zeile vllt so ist und der Parameter nach dem Doppelpunkt einfach nicht nötig ist in dem Fall
Afox Posted February 8, 2019 Author Posted February 8, 2019 ich bekomme es nicht hin. ich muss die rohe Mail an das Skript übergeben und irgendwie funktioniert das nicht mit dem Ansatz. Natürlich suche ich auch schon den ganzen Tag und manche arbeiten mit einem Eintrag in /etc/aliases, wie z.B. hier: https://serverfault.com/questions/506894/how-to-route-email-to-a-script Aber wenn ich z.B. in Froxlor eine Weiterleitung zu einem lokalen Nutzer "somelocaluser@localhost.localdomain" erstellen würde, wäre ja weiterhin das Problem mit der Doppelung - wenn es überhaupt so funktioniert.
d00p Posted February 9, 2019 Posted February 9, 2019 In froxlor kannst du als Weiterleitung /dev/null angeben, glaube das müsste gehen.
Afox Posted June 28, 2019 Author Posted June 28, 2019 sorry dass ich nochmal schreibe aber ich komme einfach nicht weiter. Ich glaube das Hauptproblem ist, dass beim Aufruf von Quote /api/tickets.email ein 404 zurückgegeben wird, was ja wiederum bedeutet dass die rewrite Regel nicht angewendet wird(?), die ja eigentlich auf http.php weiterleiten müsste. Ich habe gecheckt ob mod_rewrite aktiviert ist (ja, ist es), die RewriteEngine wird ja eigentlich durch die htaccess aktiviert und nun weiß ich einfach nicht mehr woran es noch liegen könnte. In meiner hilflosen Unwissenheit habe ich noch testweise allow_url_fopen aktiviert, Vermutungen in Richtung php-fpm und/oder den Dateirechten angestellt (steht nun alles in dem api-Ordner auf 777 bis auf die htaccess) oder vermutet dass es an dem Unterschied POSTender Nutzer (33) zu empfangender-Webspace-Nutzer (über 10000) liegt. Zu Letzterem und php-fpm habe ich aber keine Änderungen durchgeführt weil ich auch nicht genau weiß wie bzw. ob das wirklich ein Problem sein kann.
d00p Posted February 9, 2019 Posted February 9, 2019 Just now, d00p said: In froxlor kannst du als Weiterleitung /dev/null angeben, glaube das müsste gehen. Also, vermutlich nicht via Webinterface, eher direkt in der DB ?
d00p Posted June 28, 2019 Posted June 28, 2019 404 hat nichts mit lese-berechtigung zu tun, dann würdest du einen 403 kriegen. Wie sieht denn die .htaccess bzw. die rewrite-regel aus?
Afox Posted June 28, 2019 Author Posted June 28, 2019 Quote <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.*/api) RewriteRule ^(.*)$ %1/http.php/$1 [L] </IfModule> Das Ticketsystem liegt im root Ordner von "customer". Der Aufruf der API wäre dann so http://customerurl.tld/api
d00p Posted June 28, 2019 Posted June 28, 2019 Hast du denn entsprechende Leute bei osTicket mal gefragt? Wo liegt diese .htaccess? Im docroot oder in /api/ ?
Afox Posted February 9, 2019 Author Posted February 9, 2019 ehm, habe ich einen Gedankenfehler oder wäre das dann genauso als würde ich gar keine Weiterleitung anlegen? Weil ich muss ja eigentlich die Nachricht an ein PHP-Skript weiterleiten und die Zustellung an den original Empfänger verhindern.
d00p Posted June 28, 2019 Posted June 28, 2019 Im zweifel aktivier halt mal rewrite logging/debugging das du siehst was matched und was nicht
d00p Posted February 9, 2019 Posted February 9, 2019 Naja, das kann das kann dein Script doch dann machen...glaub ich...machen ja andere Filter nicht anders, wenn Spam schmeiss weg....dein Script kann ja auch das mit der Mail machen was es soll und dann sagen: weg mit
Afox Posted June 28, 2019 Author Posted June 28, 2019 ja der hat es bei sich probiert und meint es würde funktionieren. Die htaccess liegt in /api/.
d00p Posted June 28, 2019 Posted June 28, 2019 dann lass dir doch von denen mal die genauen voraussetzungen nennen um zu wissen ob dir was fehlt. Ist halt ehrlich gesagt so gar kein froxlor problem sorry
Afox Posted June 28, 2019 Author Posted June 28, 2019 ja werde ich tun, danke für nochmal für Deine Hilfe. Das rewrite-Logging Ergebnis habe ich dort auch schon gepostet. Der Vollständigkeit halber: Quote [rewrite:trace3] [rid#########/initial] [perdir /path/to/ticketsystem/api/] strip per-dir prefix: /path/to/ticketsystem/api/tickets.email -> tickets.email [rewrite:trace3] [rid#########/initial] [perdir /path/to/ticketsystem/api/] applying pattern '^(.*)$' to uri 'tickets.email' [rewrite:trace4] [rid#########/initial] [perdir /path/to/ticketsystem/api/] RewriteCond: input='/path/to/ticketsystem/api/tickets.email' pattern='!-f' => matched [rewrite:trace4] [rid#########/initial] [perdir /path/to/ticketsystem/api/] RewriteCond: input='/path/to/ticketsystem/api/tickets.email' pattern='!-d' => matched [rewrite:trace4] [rid#########/initial] [perdir /path/to/ticketsystem/api/] RewriteCond: input='/api/tickets.email' pattern='(.*/api)' => matched [rewrite:trace2] [rid#########/initial] [perdir /path/to/ticketsystem/api/] rewrite 'tickets.email' -> '/api/http.php/tickets.email' [rewrite:trace2] [rid#########/initial] [perdir /path/to/ticketsystem/api/] trying to replace context docroot /path/to/ticketsystem/ with context prefix [rewrite:trace1] [rid#########/initial] [perdir /path/to/ticketsystem/api/] internal redirect with /api/http.php/tickets.email [INTERNAL REDIRECT] [rewrite:trace3] [rid##########/initial/redir#1] [perdir /path/to/ticketsystem/api/] add path info postfix: /path/to/ticketsystem/api/http.php -> /path/to/ticketsystem/api/http.php/tickets.email [rewrite:trace3] [rid##########/initial/redir#1] [perdir /path/to/ticketsystem/api/] strip per-dir prefix: /path/to/ticketsystem/api/http.php/tickets.email -> http.php/tickets.email [rewrite:trace3] [rid##########/initial/redir#1] [perdir /path/to/ticketsystem/api/] applying pattern '^(.*)$' to uri 'http.php/tickets.email' [rewrite:trace4] [rid##########/initial/redir#1] [perdir /path/to/ticketsystem/api/] RewriteCond: input='/path/to/ticketsystem/api/http.php' pattern='!-f' => not-matched [rewrite:trace1] [rid##########/initial/redir#1] [perdir /path/to/ticketsystem/api/] pass through /path/to/ticketsystem/api/http.php
Afox Posted February 10, 2019 Author Posted February 10, 2019 also ich bin jetzt nochmal bei dem von dir geposteten Ansatz geblieben und muss nochmal eine Verständnisfrage stellen: wenn man z.B. wie dort ${sender} ${size} ${recipient} hinzufügt, heißt das dann dass die original Nachricht verändert wird, also wenn ich diese Parameter weglasse, dann wirklich nur die rohe Nachricht weitergeleitet wird? Oder werden dann wichtige Dinge wie die originalen Sender und Empfänger erst garnicht angefügt? In den man-pages wird das Wort "expand" verwendet was ich so übersetzen würde, dass die Nachricht um diese Dinge erweitert wird. http://www.postfix.org/pipe.8.html
d00p Posted February 10, 2019 Posted February 10, 2019 Das sind soweit ich weiss die Parameter die zusätzlich an das Script übergeben werden?!
Afox Posted February 10, 2019 Author Posted February 10, 2019 ich weiß gerade nicht ob ich wegen dem Folgenden ein neues Thema aufmachen soll. Ich bekomme in diesem Zusammenhang nun einen Fehler auf Seiten der API: Quote Got error 'Primary script unknown\n' die htaccess sieht so aus: <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.*/api) RewriteRule ^(.*)$ %1/http.php/$1 [L] </IfModule> Hier (http://www.coders.pro/2017/01/got-error-primary-script-unknown-update-php-fpm-apache-2-4/) wird behauptet, dass wenn man die htaccess umschreibt es wieder funktioniert. Aber damit kenne ich mich überhaupt nicht aus und ich weiß gerade wirklich nicht wie es richtig lauten müsste bzw. ob es überhaupt falsch ist.
d00p Posted February 10, 2019 Posted February 10, 2019 2 minutes ago, Afox said: Ich bekomme in diesem Zusammenhang nun einen Fehler auf Seiten der API: ja wie genau pipest du jetzt da was wo hin? 4 minutes ago, Afox said: Hier (http://www.coders.pro/2017/01/got-error-primary-script-unknown-update-php-fpm-apache-2-4/) wird behauptet, dass wenn man die htaccess umschreibt es wieder funktioniert. Aber damit kenne ich mich überhaupt nicht aus und ich weiß gerade wirklich nicht wie es richtig lauten müsste bzw. ob es überhaupt falsch ist. Naja, man sieht doch was der da gemacht hat, die "RewriteBase" war im originalen am Ende, was natürlich für die RewriteRules vorher einfach nicht zählt. die Base ergibt siich aber auch daraus wie du die Domain eingerichtet hast, also ob das script unter domain.tld direkt liegt oder z.B. domain.tld/ordner/ - da wäre ggfls die rewrite base dann "ordner" - je nach dem
Afox Posted February 10, 2019 Author Posted February 10, 2019 das Skript an das ich die Mail weiterleite piped das Ganze an myurl.tld/api/tickets.email diese URL ist auch mit Froxlor angelegt worden. PHP 7.0 mit PHP-FPM aktiv. mod_rewrite habe ich im Apache (2.4) enabled.
d00p Posted February 10, 2019 Posted February 10, 2019 1 minute ago, Afox said: das Skript an das ich die Mail weiterleite piped das Ganze an myurl.tld/api/tickets.email ja zeig halt mal her das script. Ggfls leite das doch erstmal an ein test-script weiter, dass die inhalte enfach ausgibt, damit du weisst ob alles passt
Afox Posted February 10, 2019 Author Posted February 10, 2019 #!/usr/bin/php -q <?php $config = array( 'url'=>'http://myurl.tld/api/tickets.email', 'key'=>'APIKEY' ); #pre-checks function_exists('file_get_contents') or die('upgrade php >=4.3'); function_exists('curl_version') or die('CURL support required'); #read stdin (piped email) $data=file_get_contents('php://stdin') or die('Error reading stdin. No message'); #set timeout set_time_limit(10); #curl post $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $config['url']); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_USERAGENT, 'Ticket API Client'); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect:', 'X-API-Key: '.$config['key'])); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $result=curl_exec($ch); curl_close($ch); //Use postfix exit codes...expected by MTA. $code = 75; if(preg_match('/HTTP\/.* ([0-9]+) .*/', $result, $status)) { switch($status[1]) { case 201: //Success $code = 0; break; case 400: $code = 66; break; case 401: /* permission denied */ case 403: $code = 77; break; case 415: case 416: case 417: case 501: $code = 65; break; case 503: $code = 69; break; case 500: //Server error. default: //Temp (unknown) failure - retry $code = 75; } } exit($code); ?>
d00p Posted February 10, 2019 Posted February 10, 2019 dann lass dir doch mal $data anzeigen ob da auch tatsächlich eine email mitgeliefert wird via cmd line
Afox Posted February 10, 2019 Author Posted February 10, 2019 also nur nochmal zur Vollständigkeit: die oben gepostete htaccess war in Ordnung und wahrscheinlich auch kompatibel mit Apache 2.4? Wie man $data anzeigen lassen kann muss ich erst herausfinden.
Question
Afox
Hallo,
ich würde gerne sämtlichen E-Mail-Verkehr einer bestimmten Adresse an eine Remote-Adresse (http://www.domain.com/api/api-script) pipen.
Wie kann ich das am Froxlor-verträglichsten umsetzen?
Eine Weiterleitung mit der URL darin wird wohl nicht funktionieren gehe ich mal davon aus. Außerdem fände ich in dem Fall nicht so gut, dass die Mail dann doppelt vorhanden wäre.
Gruß,
Afox
52 answers to this question
Recommended Posts
Archived
This topic is now archived and is closed to further replies.