Mailen mit telnet

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von buli, 17.12.2006.

  1. #1 buli, 17.12.2006
    Zuletzt bearbeitet: 17.12.2006
    buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Hallo!
    Mit telnet kann man ja Mails abrufen und verschicken.
    Da dachte ich mir, warum nicht mal ein script dazu schreiben? :D

    Leider funzt es nicht so ganz.

    Hier mein script:

    Code:
    #! /bin/bash
    #
    # Mailtel
    #
    POP_1=pop.gmx.net
    SMTP_1=mail.gmx.net
    POP_2=pop.mail.yahoo.de
    SMTP_2=smtp.mail.yahoo.de
    
    function pop_1() {
    echo "Geben Sie Ihren Benutzernamen ein:"
    read user
    echo "Geben Sie Ihr Passwort ein:"
    read -s pass
    
    telnet $POP_1 110
    user $user
    pass $pass
    }
    
    function smtp_1() {
    echo "Geben Sie Ihren Benutzernamen ein:"
    read user
    echo "Geben Sie den Empfänger ein:"
    read empf
    echo "Geben Sie den Betreff ein:"
    read subj
    
    telnet $SMTP_1 25
    
    echo -e "helo"                              # Diese echos werden
    echo -e "mail from: $user"            # erst nach dem
    echo -e "rcpt to: $empf"               # disconnect ausgeführt
    echo -e "data"
    echo -e "subject: $subj"
    echo -e "Hallo!"
    echo -e "."
    echo -e "quit"
    }
     
    function pop_2() {
    echo "Geben Sie Ihren Benutzernamen ein:"
    read user
    echo "Geben Sie Ihr Passwort ein:"
    read -s pass
    
    telnet $POP_2 110
    user $user
    pass $pass
    }
    
    function smtp_2() {
    echo "Geben Sie Ihren Benutzernamen ein:"
    read user
    echo "Geben Sie den Empfänger ein:"
    read empf
    echo "Geben Sie den Betreff ein:"
    read subj
    
    telnet $SMTP_2 25
    
    echo -e "helo"                                       # Diese echos werden
    echo -e "mail from: $user"                      # erst nach dem
    echo -e "rcpt to: $empf"                         # disconnect ausgeführt
    echo -e "data"
    echo -e "subject: $subj"
    echo -e "Hallo!"
    echo -e "."
    echo -e "quit"
    }
    
    echo "Möchten Sie Mails [v]erschicken, oder [a]brufen?"
    read eing
    echo "Welchen Server möchten Sie verwenden?"
    echo "GMX [1], oder Yahoo [2] ?"
    read serv
    
    if [ $eing == "a" ] && [ $serv == "1" ]; then
    pop_1
    
    elif [ $eing == "v"  ] && [ $serv == "1" ]; then
    smtp_1
    
    elif [ $eing == "a" ] && [ $serv == "2" ]; then
    pop_2
    
    elif [ $eing == "v" ] && [ $serv == "2" ]; then
    smtp_2
    
    fi
    
    Connecten kann ich mich zu pop3 und smtp.
    Aber die ganzen "echos" (s.kommentare) werden erst nach dem disconnect ausgeführt.(smtp)

    Beim pop-server werden alle eingegebenen Befehle mit einem error kommentiert.

    Hat jemand nen Tip/Denkanstoss für mich?
    Ist sowas überhaupt mit sh möglich?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 lordlamer, 17.12.2006
    lordlamer

    lordlamer Haudegen

    Dabei seit:
    15.05.2003
    Beiträge:
    703
    Zustimmungen:
    0
    Ort:
    hamburg
    Hrm,

    wofür soll das script gut sein? Entweder man weiss über das entsprechende Protokoll bescheid und wie man darüber kommuniziert oder man lässt es sein ;)

    Und wenn ich schon über telnet irgendwie was teste dann hat das seinen grund und es sollte interaktiv sein damit ich auch wirklich seh was da passiert.

    Mfg Frank

    ps: so wird das mit deinem script nicht gehen. dafür gibt es andere programme
     
  4. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    Dass es eigentlich keinen praktischen Nutzen hat, weiss ich auch.
    Ich interessiere mich halt dafür, und wollte mal rumprobieren.

    Ansonsten fand ich deine Antwort nicht sehr konstruktiv.
     
  5. agebel

    agebel Grünschnabel

    Dabei seit:
    12.11.2006
    Beiträge:
    7
    Zustimmungen:
    0
    telnet ist ja ein interaktives Programm, dass input erwartet. Wenn du das einfach so startest, erwartet es diesen Input natürlich von der Tastatur. Mit der Standard-Pipe | kannst du z.B. Input übergeben (z.B. echo "irgendwas" | telnet host)
     
  6. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Das wird aber schief gehen, weil jedesmal nach dem Senden des Befehls ein Disconnect erfolgt und somit z.B. Authentifizierung u.ä. nicht möglich ist. expect könnte hier evtl. eine Lösung sein, hab ich aber noch keine grosse Erfahrung mit, ist aber dafür gemacht interaktive Eingaben zu ermöglichen.
    Der Sinn des Skripts ist aber auch mir schleierhaft. Jeder simple SMTP-Client für die Konsole kann die gewünschten Funktionalitäten und wesentlich mehr.
     
  7. #6 Schneemann, 17.12.2006
    Schneemann

    Schneemann Routinier

    Dabei seit:
    27.06.2006
    Beiträge:
    289
    Zustimmungen:
    0
    Ort:
    /home/janosch
    hi,

    Benutzt man nicht andere Befehle zum authentifizieren?
    So wie es aussieht benutzt du in SMTP_1 auch den gmx-smtp server und der verlangt ein username und ein passwort.

    Ich hab mir hier die entsprechenden funktionen selber programmiert, ist aber PHP. Vielleicht hilft es dir trotzdem:

    SMTP:
    PHP:
    <?php
      
    function smtp_read($socket,$ok 250,$end "\r\n",$showend FALSE) {
        
    $ok = (string)$ok;
        
    $n 0;
        
    $data "";
        
    $i 0;
        while (
    TRUE) {
          
    $byte fgets($socket,2);
          
    $data .= $byte;
          if (
    $byte==$end{$n}) $n++;
          else 
    $n 0;
          if (
    $n==strlen($end)) break;
          if (
    $i==strlen($ok)) {
            if (
    substr($data,0,$i)!=$ok) return FALSE;
          }
          
    $i++;
        }
        if (!
    $showend$data substr($data,0,strlen($data)-strlen($end));
        return 
    $data;
      }

      function 
    smtp_open($server,$port 25,$user NULL,$pass NULL) {
        if (
    $user==NULL xor $pass==NULL) return FALSE;
        
    $socket fsockopen($server,$port);
        if (!
    $socket) return FALSE;
        
    fputs($socket,"HELO\r\n");
        if (
    smtp_read($socket)===FALSE) return FALSE;
        if (
    $user!=NULL and $pass!=NULL) {
          
    fputs($socket,"AUTH LOGIN\r\n");
          if (
    smtp_read($socket,334)===FALSE) return FALSE;
          
    fputs($socket,base64_encode($user)."\r\n");
          if (
    smtp_read($socket,334)===FALSE) return FALSE;
        }
        return 
    $socket;
      }
      function 
    smtp_send($socket,$from,$to,$msg) {
        
    fputs($socket,"MAIL FROM:<$from>\r\n");
        if (
    smtp_read($socket)===FALSE) return FALSE;
        foreach (
    $to as $t) {
          
    fputs($socket,"RCPT TO:<$t>\r\n");
          if (
    smtp_read($socket)===FALSE) return FALSE;
        }
        
    fputs($socket,"DATA\r\n");
        if (
    smtp_read($socket,354)===FALSE) return FALSE;
        
    fputs($socket,"$msg\r\n.\r\n");
        if (
    smtp_read($socket)===FALSE) return FALSE;
      }
    ?>
    POP:
    PHP:
    <?php
      
    function pop3_read($socket,$end "\r\n",$showend FALSE) {
        
    $n 0;
        
    $data "";
        
    $i 0;
        while (
    TRUE) {
          
    $byte fgets($socket,2);
          
    $data .= $byte;
          if (
    $byte==$end{$n}) $n++;
          else 
    $n 0;
          if (
    $n==strlen($end)) break;
          if (
    $i==3) {
            if (
    substr($data,0,3)!="+OK") return FALSE;
          }
          
    $i++;
        }
        if (!
    $showend$data substr($data,0,strlen($data)-strlen($end));
        return 
    $data;
      }

      function 
    pop3_open($user,$pass,$server,$port 110) {
        
    $socket fsockopen($server,$port);
        if (!
    $socket) return FALSE;
        if (
    pop3_read($socket)===FALSE) return FALSE;
        
    fputs($socket,"USER $user\r\n");
        if (
    pop3_read($socket)===FALSE) return FALSE;
        
    fputs($socket,"PASS $pass\r\n");
        if (
    pop3_read($socket)===FALSE) return FALSE;
        return 
    $socket;
      }
      function 
    pop3_close($socket) {
        
    fputs($socket,"QUIT\r\n");
        
    fclose($socket);
      }
      function 
    pop3_stat($socket) {
        
    fputs($socket,"STAT\r\n");
        
    $stat pop3_read($socket);
        if (
    substr($stat,0,3)!="+OK") return FALSE;
        list(
    $ok,$newmails,$size) = explode(" ",$stat);
        return array(
    "newmails"=>$newmails,"size"=>$size);
      }
      function 
    pop3_list($socket,$n NULL) {
        if (
    $n!=NULL$n " ".$n;
        
    fputs($socket,"LIST$n\r\n");
        
    $list pop3_read($socket,"\r\n.\r\n");
        if (
    substr($list,0,3)!="+OK") return FALSE;
        list(
    $ok,$list) = explode("\r\n",$list,2);
        
    $list explode("\r\n",$list);
        
    $array = array();
        foreach (
    $list as $li) {
          list(
    $id,$size) = explode(" ",$li);
          
    $array[$id] = $size;
        }
        return 
    $array;
      }
      function 
    pop3_get($socket,$n) {
        
    fputs($socket,"RETR $n\r\n");
        
    $mail pop3_read($socket,"\r\n.\r\n");
        if (
    $mail===FALSE) return FALSE;
        list(
    $ok,$mail) = explode("\r\n",$mail,2);
        return 
    $mail;
      }
      function 
    pop3_remove($socket,$n) {
        
    fputs($socket,"DELE $n\r\n");
        
    $ok pop3_read($socket);
        if (
    $ok===FALSE) return FALSE;
        else return 
    TRUE;
      }
      function 
    pop3_reset_removed($socket) {
        
    fputs($socket,"RSET\r\n");
        
    $ok pop3_read($socket);
        if (
    $ok===FALSE) return FALSE;
        else return 
    TRUE;
      }
      function 
    pop3_get_header($socket,$n,$c 0) {
        
    fputs($socket,"TOP $n $c\r\n");
        
    $header pop3_read($socket,"\r\n.\r\n");
        return 
    $header;
      }
    ?>
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. buli

    buli Debianator

    Dabei seit:
    16.09.2006
    Beiträge:
    789
    Zustimmungen:
    0
    Ort:
    Essen/Ruhrgebiet
    @ agebel
    Das mit der pipe hat mich schomal einen Schritt weiter gebracht, danke!

    @theton
    Wie gesagt:
    Der praktische Nutzen des scripts ist hierbei für mich weniger relevant.
    Meine Programmierkenntnisse sind noch ganz am Anfang, und da wollte ich einfach mal rumexperimentieren. ;)
    "expect" scheint eine gute Idee zu sein. :))

    @Schneemann
    Code:
    So wie es aussieht benutzt du in SMTP_1 auch den gmx-smtp server und der verlangt ein username und ein passwort.
    Eigentlich nicht:
    php kann ich leider nicht, aber vll kann ich ja das ein oder andere nützlich für mich übertragen.
    Danke!
     
  10. #8 Wolfgang, 17.12.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Das geht auch sehr leicht mit perl.

    Kleines Beispiel für GMX.
    Benötigt werden beide Module:
    use Net::SMTP;
    use Net::SMTP_auth

    Code:
    #!/usr/bin/perl -w
    use Net::SMTP;
    use Net::SMTP_auth;
    
    my $m_host = "mail.gmx.net";
    my $m_from = "user\@gmx.ch";
    my $m_to = "user\@domain.de";
    my $user = "username";
    my $passwort = "geheim";
    
    #$smtp = Net::SMTP_auth->new($m_host);
    my $smtp = Net::SMTP_auth->new($m_host, Timeout => 30, Debug => 1);
    my $ret=$smtp->auth('CRAM-MD5', $user, $passwort);
    print "Not succes System $!\n" unless $ret;
    if ($ret){
    my $ok=$smtp->mail("wolle <$m_from>");
    $ok=$smtp->to($m_to);
    $smtp->data();
    $smtp->datasend("To: $m_to\n");
    $smtp->datasend("From: $m_from\n");
    $smtp->datasend("Subject: Wolles testmail\n");
    
    
    $smtp->datasend("\n");
    $smtp->datasend("Das ist eine Test MSG\n");
    $smtp->datasend(scalar localtime(time));
    $smtp->datasend("Tschau wolle\n");
    
    
    $smtp->dataend();
    print "Gesendet\n";
    }
    $smtp->quit;
    
    Gruß Wolfgang
     
Thema:

Mailen mit telnet

Die Seite wird geladen...

Mailen mit telnet - Ähnliche Themen

  1. Postfix Mail-Queue Leeren / Mailenabled

    Postfix Mail-Queue Leeren / Mailenabled: Morgen, habe ein Problem mit unserem (sehr alten) Postfix Mailserver..... In der Warteschlange sind mehrer 10000 Mails die er einfach nicht...
  2. Kann Linux aus einen Script heraus mailen?

    Kann Linux aus einen Script heraus mailen?: Hallo, irgendwie stehe ich auf dem Schlauch... Ich möchte doch nur ein einfaches Mail von einen Linux (CentOS4.4) bekommen, sobald er wieder...
  3. Damn Small und Mailen

    Damn Small und Mailen: Hallo liebe „Linuxianer“, ich habe mir ein DamnSmall auf meine Festplatte installiert und kann auch, mit meinem 56k Modem eine...
  4. lokales mailen funktioniert nicht

    lokales mailen funktioniert nicht: hallo an alle, lokal zu mailen bekomme ich nicht hin. leider verstehe ich meine eigene konfiguration nicht mehr. :think: was ich versuche,...
  5. cron soll nur bestimmte aktionen mailen

    cron soll nur bestimmte aktionen mailen: Morgen. Weiß jemand ob es eine möglichkeit gibt , dass cron nicht jede aktion die er ausführt mailt sondern nur bestimmte . Ich hab bisher...