SMTP-Umleitung mittels inetd und netcat mit SMTP AUTH Erweiterung

thimo

Neuer User
Mitglied seit
9 Jul 2009
Beiträge
9
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich habe hier einen NetDeliver V2000, der gescannte Dokumente direkt per SMTP versenden kann. Leider unterstützt das Gerät kein SMTP AUTH.

Nun wollte ich mittels inetd und netcat diese Funktion auf der FritzBox nachrüsten:

1. Der NetDeliver schickt das Dokument an die FritzBox (inetd).
2. Das Bash-Script fügt die Anmeldeprozedur hinzu und übergibt die weitere Bearbeitung an netcat.

Die reine Umleitung mittels netcat funktioniert auch problemlos:

Code:
#! /bin/sh
/usr/bin/nc -w 5 smtp.provider.de 25 2>&1

Allerdings lässt sich die SMTP-Anmeldung nicht so einfach integrieren. Ich müsste im Script in den eigenen STDIN-Puffer schreiben können. Ich habe es bereits mit Named Pipes, dem Schreiben auf /proc/self/fd/0 etc. versucht. Leider ohne Erfolg.

Frage: Gibt es eine Möglichkeit ein Bash-Script in den eigenen STDIN-Puffer schreiben zu lassen? In etwa so:

Code:
#! /bin/sh
echo AUTH LOGIN > /proc/self/fd/0
echo $USER > /proc/self/fd/0
echo $PWD > /proc/self/fd/0
/usr/bin/nc -w 5 smtp.provider.de 25 2>&1

Dieses Beispiel funktioniert wie gesagt nicht. Die Daten kommen nur in der Standard-Ausgabe an.

Danke,
Thimo
 
Frage: Gibt es eine Möglichkeit ein Bash-Script in den eigenen STDIN-Puffer schreiben zu lassen?

Nein. Schon deshalb nicht, weil es den STDIN-Puffer nicht gibt.

Der Vorschlag von buehmann bringt die richtigen Kommandos zum Server. Ich vermute aber, daß der Client durcheinander kommen wird, weil der Server Antworten schicken wird auf Befehle, von denen der Client nichts weiß. Je nachdem, welche Antwort wann kommt, kann es sein, daß eine Nachricht gesendet werden kann, aber selbst wenn, hat man vermutlich keine Kontrolle darüber, ob tatsächlich eine Nachricht gesendet wurde, was meistens unerwünscht ist.

Das selbe Problem gäbe es übrigens auch, wenn das obige Beispiel mit dem STDIN-Puffer möglich wäre.
 
@buehmann
Super, ich danke dir. Genau danach habe ich gesucht.

@RalfFriedl
Ja, möglich. Muss damit jetzt ein wenig experimentieren...
 
Hier nun das Ergebnis.
Damit der Client nicht durcheinander kommt, wird der entsprechende Response vom SMTP-Server unterdrückt.

Code:
#! /bin/sh

# SMTP forwarding

# Read email settings
eval `cfg2sh ar7 emailnotify | sed 's/^emailnotify_//'`

{
    # Adjust input stream
    
    if [[ "$accountname" != "" && "$passwd" != "" ]]; then
        echo AUTH LOGIN
        echo `echo -n $accountname | uuencode -m user | head -n2 | tail -n1`
        echo `echo -n $passwd | uuencode -m pass | head -n2 | tail -n1`
    fi
    
    while read line; do
        echo $line
    done
    
} | /usr/bin/nc -w 5 $SMTPServer 25 2>&1 | {
    
    # Adjust output stream
    
    while read line; do
        if echo $line | egrep -v "^334|^235" > /dev/null 2>&1; then
            echo $line
        fi
    done

}

eventadd 1 "Forwarded email to $SMTPServer"
 
Zuletzt bearbeitet:
Habe es umgebaut, so dass es mit der Standard-Firmware der Fritz!Box funktioniert (also ohne Freetz). So kann ich nun von meinem HP Color LaserJet CM2320 Mails versenden, obwohl der CM2320 kein SMTP AUTH kann.

Habe es nur mit t-online.de Accounts zum Laufen bekommen, GMail z.B. funktioniert so nicht, da es zwingend eine Verschlüsselung erfordert.

Code:
#! /bin/sh

# Save this as "/var/media/ftp/CBM-FlashDisk-01/smtpgateway"
#
# SMTP forwarding
# based on http://www.ip-phone-forum.de/showthread.php?t=199967 by thimo
# Changed to run on normal Fritz!Box firmware by probono
# To enable this until the next reboot on the Fritz!Box, run
# echo "587 stream tcp nowait root /var/media/ftp/CBM-FlashDisk-01/smtpgateway" >> /etc/inetd.conf
# and restart inetd with kill -HUP <PID>

SMTPServer=smtpmail.t-online.de

{
	echo "AUTH PLAIN"	
	echo "AUTHSTRING==" 

    while read line; do
        echo $line
    done
    
} | /usr/bin/nc $SMTPServer 25 2>&1 | {
    
    # Adjust output stream
    
    while read line; do
        if echo $line | egrep -v "^334|^235" > /dev/null 2>&1; then 
            echo $line
        fi
    done
}

eventadd 1 "Mail weitergeleitet an $SMTPServer"

Den AUTHSTRING== habe ich erzeugt mit
perl -MMIME::Base64 -e 'print encode_base64("\000jms1\@jms1.net\000not.my.real.password")'
wie auf http://qmail.jms1.net/test-auth.shtml beschrieben
 
Hi, ich habe den Thread zufälligerweise noch abonniert. Deswegen ein Hinweis: Mir scheinen die beiden while-Schleifen überflüssig zu sein; wenn es nicht einen guten Grund für sie gibt, sollte man sie lieber wegoptimieren, um die CPU zu schonen: (ungetestet)
Code:
#! /bin/sh

# Save this as "/var/media/ftp/CBM-FlashDisk-01/smtpgateway"
#
# SMTP forwarding
# based on http://www.ip-phone-forum.de/showthread.php?t=199967 by thimo
# Changed to run on normal Fritz!Box firmware by probono
# To enable this until the next reboot on the Fritz!Box, run
# echo "587 stream tcp nowait root /var/media/ftp/CBM-FlashDisk-01/smtpgateway" >> /etc/inetd.conf
# and restart inetd with kill -HUP <PID>

SMTPServer=smtpmail.t-online.de

{
    echo "AUTH PLAIN"	
    echo "AUTHSTRING==" 

    cat
    
} | /usr/bin/nc $SMTPServer 25 2>&1 | egrep -v "^334|^235"

eventadd 1 "Mail weitergeleitet an $SMTPServer"

Gruß,

Andreas

PS: Ah, jetzt sehe ich den möglichen Grund: Vielleicht sind sie nötig, um das Buffering von cat und egrep zu umgehen …
 
Zuletzt bearbeitet:
Hallo,

bin absoluter Laie auf diesem Gebiet.

Habe mir einen HP 2320fxi zugelegt, der bekanntermaßen kein SMTP Auth. kann.
Angeschlossen ist das Teil bei mir an eine Fritzbox 7270 v3 mit der aktuellsten Laborfirmware von AVM übers Netzwerk.
Frage nun: muß ich genannten Quellcode nur per telnet auf Fritzbox eingeben (mit entsprechenden Provider) und dann kann ich meine Scanns mit der Scan to Mail Funtion des Druckers versenden ?

Danke für die Hilfe !!!
 
Hallo,

Frage noch mal an wegen der Erweiterung.
Habe dazu als absoluter Laie bisher nichts brauchbares gefunden, wie ich diese Funktionen meinen Router beibringen soll, um so meinen Drucker (CM2320fxi) das mailen beibringen zu können.

Danke nochmal im voraus für die Hilfe !!!
 
Bitte um paar Tipps wie ich den Code auf der Fritz!Box abspielen soll

Hallo probono@,

ebenso will ich auch endlich die Option Scan-to-Email benutzen, anstatt jedes Mal das jeweilige Notebook mit dem Scanner über den USB-Anschluss verbinden zu müssen. Nervig, da wenn gescannt wird, dann ist es meist stressig. Außerdem sehr umständlich (erst zum Scanner > dann wieder zum PC > dann wieder zum Scanner = also nicht produktiv).

Bemerkung zum USB-Fernanschluss:
Die Lösung mit dem USB-Fernanschluss-Treiber von AVM will ich nicht mehr und kann sowieso nicht mehr benutzen, da ich an der Fritz!Box seit paar Monaten einen DYMO-LabelWriter Duo Drucker über den USB-Anschluss im Netzwerk erfolgreich betreibe. Leider immer noch ohne MultiplePrint :( - d. h. nur den Etiketten-Drucker kann ich ansprechen. Den zweiten integrierten Bänder-Drucker kann ich über USB der Fritz!Box ohne einen Modding so noch nicht erreichen. Also der passende MultiplePrint-Code muss noch her und zum Freetzen/Modden muss ich noch vieles lernen, da ich mit diesem Router (außer ihn kurz mit Telnet anzupingen) sonst nie was sonderlich noch gemacht habe.​


Ich will gerne über Modden/Freetzen lernen und hier mit einsteigen, da ich einiges an Nutzpotential im Alltag sehe.
Wie könnte ich anfangen, damit ich deinen Code auf meiner Fritz!Box ebenso erfolgreich umsetze?

Es muss nicht ausführliches - Schritt für Schritt Anleitung - sein. Jedoch über paar kleine Tipps wäre ich froh, damit ich irgendwie anfangen könnte.

Ohne einen Anstoß weiß ich ansonsten nicht wie ich überhaupt einen Code abspielen könnte.

Wie geschrieben, ich habe noch nie die Firmware der Firtz!Box modifiziert und das Schreiben hier ist mein erster Anfang in diesem Forum.

Vielen Dank im Voraus für paar Tipps.

Gruß
evin
 
Hallo probono,

wo soll im Script das Passwort, Benutzername und die E-Mail-Adresse des Empfängers eingetragen, nach AUTHSTRING==?
Die Website kann ich leider nicht lesen, da ich IE10 benutze (der Autor sperrt die User von $MS-Browser)

Gruß
evin
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.