Jump to content
Froxlor Forum
  • 0
Afox

E-Mail Piping

Question

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

Share this post


Link to post
Share on other sites

Recommended Posts

  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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.


 

 

Share this post


Link to post
Share on other sites
  • 0

In froxlor kannst du als Weiterleitung /dev/null angeben, glaube das müsste gehen.

Share this post


Link to post
Share on other sites
  • 0
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 😛

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

Das sind soweit ich weiss die Parameter die zusätzlich an das Script übergeben werden?!

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0
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

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0
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

Share this post


Link to post
Share on other sites
  • 0
#!/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);
?>

 

Share this post


Link to post
Share on other sites
  • 0

dann lass dir doch mal $data anzeigen ob da auch tatsächlich eine email mitgeliefert wird via cmd line

Share this post


Link to post
Share on other sites
  • 0

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.

Share this post


Link to post
Share on other sites
  • 0
19 minutes ago, Afox said:

also nur nochmal zur Vollständigkeit: die oben gepostete htaccess war in Ordnung und wahrscheinlich auch kompatibel mit Apache 2.4?

sollte ja

19 minutes ago, Afox said:

Wie man $data anzeigen lassen kann muss ich erst herausfinden

file_put_content('tmp/testmail', $data); ?

Share this post


Link to post
Share on other sites
  • 0

ohwe, nur copy'n'paste code einfach eingesetzt xD ai ai ai

 

direkt nach: $data=file_get_contents('php://stdin') or die('Error reading stdin. No message'); - dann ist $data auch defined

Share this post


Link to post
Share on other sites
  • 0

jepp, bin n00b. Muss ich leider zugeben.

Bekomme eine leere Datei und ein Fehler

Command died with status 255 (...)Command output: PHP Parse error:  syntax error, unexpected 'set_time_limit' (T_STRING)

so schaut´s aus

$data=file_get_contents('php://stdin') or die('Error reading stdin. No message');
file_put_contents('tmp/testmail', $data); 

#set timeout
set_time_limit(10);

 

Share this post


Link to post
Share on other sites
  • 0

zum einen am besten /tmp/testmail, nicht tmp/testmail :)

zum anderen sehe ich da in dem part jetzt keinen syntax-error... aber kommentare macht man normal mit // oder /* kommentar */ - mit der raute is schon ewig nicht gern gesehen

Share this post


Link to post
Share on other sites
  • 0

ja habe beides probiert /tmp und nur tmp. ist nicht mein Skript deshalb bin ich da entspannt :D

Share this post


Link to post
Share on other sites
  • 0

naja, ob /tmp/ oder tmp/ ändert nix am angeblichen syntax-error...Du hast vermutlich aus dem Forum einfach rauskopiert, genau das habe ich auch gemacht - und auch den syntax error erhalten...entferne mal die überschüssigen leerzeichen hinter dem semikolon in der file_put_contents zeile...das hat bei mir geholfen

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now





×
×
  • Create New...