Source für smtp-Protokoll



  • Du willst von einem Programm auf einen Mailserver zugreifen.

    Hier ein Code für das SMTP-Protokoll.
    Ist aber ANSI-C

    #include <errno.h>
    #include <stdlib.h>
    #include <string.h>
    
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>    /* sockaddr_in structure */
    #include <netdb.h>          /* /etc/hosts table entries */
    
    #define TCP_PORT 25
    #define MAX_ZEICHEN 4096
    
    int smtpsend (char *hostadress,char *from,char *to,char *betreff,int zeilen,char *daten)
    {
    
    struct sockaddr_in myname;
    struct sockaddr_in *nptr;
    
    int moh;
    struct hostent *hp, *gethostbyaddr();
    char    buf[MAX_ZEICHEN];
    
        if (( moh = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
          printf("network client socket failure \n");
          return -1;
       }
    
        myname.sin_port = htons(TCP_PORT); /* Server port # */
        myname.sin_family = AF_INET;    /* Internet domain */
        hp = gethostbyname (hostadress);
        bcopy ( hp -> h_addr_list[0], &myname.sin_addr.s_addr,hp -> h_length );
        if ( ( connect ( moh, (struct sockaddr *) &myname, sizeof(myname) ) ) < 0 ) 
        {
        printf("network client connect failure \n");
        close (moh);
        return -1;
        } 
    
    sprintf(buf,"HELO irgendwas.at\r\n");
    write (moh,buf, strlen(buf));
    bzero (buf, sizeof(buf));
    read(moh,buf,sizeof(buf));
    
    sprintf(buf,"MAIL FROM: <%s>\r\n",from);
    write (moh,buf, strlen(buf));
    bzero (buf, sizeof(buf));
    read(moh,buf,sizeof(buf));
    if (strncmp(buf,"250",3) != 0) return -1;
    
    sprintf(buf,"RCPT TO: <%s>\r\n",to);
    write (moh,buf, strlen(buf));
    bzero (buf, sizeof(buf));
    read(moh,buf,sizeof(buf));
    if (strncmp(buf,"250",3) != 0) return -1;
    
    sprintf(buf,"DATA \r\n");
    write (moh,buf, strlen(buf));
    bzero (buf, sizeof(buf));
    read(moh,buf,sizeof(buf));
    if (strncmp(buf,"354",3) != 0) return -1;
    
    sprintf(buf,"SUBJECT:%s\r\n",betreff);
    write (moh,buf, strlen(buf));
    bzero (buf, sizeof(buf));
    
    sprintf(buf,"%s\r\n",daten);
    write (moh,buf, strlen(buf));
    bzero (buf, sizeof(buf));
    
    sprintf(buf,".\r\n");
    write (moh,buf, strlen(buf));
    bzero (buf, sizeof(buf));
    
    sprintf(buf,"QUIT\r\n");
    write (moh,buf, strlen(buf));
    bzero (buf, sizeof(buf));
    read(moh,buf,sizeof(buf));
    if (strncmp(buf,"250",3) != 0) return -1;
    
        close (moh);
        return 1;
    
    }
    

    [ 19.07.2001: Beitrag editiert von: Marc++us ]





  • Hi,

    nimm doch einfach den Server von GMX:
    mail.gmx.net

    hoffe ich konnte helfen

    mfg
    V_R

    ------------------
    Am 8. Tag schuf Gott Windows und vorbei war es mit dem Paradies!



  • Ich kann zu mail.gmx.net eine Verbindung über den Port 25 herstellen (23 geht nicht; muss auch nicht unbedingt sein), doch ich kann in das Telnet-Fenster nichts eingeben.
    Hast du das auch schon probiert? Geht das bei dir?
    P.S.: Danke für deinen Hinweis!



  • Dann machst du irgendwas falsch. Sicher dass du verbunden bist? Es müßte sowas in der Art kommen:
    Trying 194.221.183.20...
    Connected to mail.gmx.de.
    Escape character is '^]'.
    220 {mail07} GMX Mailservices ESMTP

    dann kannst du anfangen ...



  • Hi,

    hast du auch das echo an? Wenn nicht dann kannst du nicht sehen, was du schreibst.
    Das muesste bei telnet irgendwo unter Einstellungen sein. Das heißt glaub ich lokales Echo [] und dann musst du das anklicken. (ich kann es dir nicht genau sagen, da ich meistens unter Linux bin).

    mfg
    V_R

    ------------------
    Am 8. Tag schuf Gott Windows und vorbei war es mit dem Paradies!



  • Bei mir kommt genau das, was bei dir auch kommt, bloß dass bei mir nicht mail07 sondern mail02 kommt. Wenn ich anschließend irgendeinen Buchstaben drücke erscheint dieser nicht im fenster! Bei anderen Servern (www.c-plusplus.net) hab ich da keine Probleme...bis auf das Passwort naja...
    Mir fällt gerade ein, dass ich immer "mail.gmx.net" eingegeben habe und nicht die IP. Ich werd das gleich mal ausprobieren.



  • Ich hab das jetzt mal probiert bei mir kommt, wenn ich die IP eingebe auch "mail07" aber eingeben kann ich immer noch nichts. Muss ich irgend etwas einstellen oder eine besondere Taste drücken???
    Übrigens kommt bei mir nur das ab 220 {mail07...
    das davor nicht.



  • Hi,

    also meine Ausgabe unter Telnet:

    db_vr:~# telnet mail.gmx.net 25
    Trying 194.221.183.20...
    Connected to mail.gmx.net
    Escape character is '^]'.
    220 {mp004-rz3} GMX Mailservice ESMTP

    Das muesste da stehen, wenn du dich eingeloggt hast. (oder sowas in der Art. das {mp004-rt3} kann anders sein.
    Dann dürfte eigendlich alles klappen.
    Wenn das nicht funzt, dann benutz diese Adresse hier: mail.ccc.de
    Das ist der Mail-Server von Chaos Computer Club.
    Einfach: telnet mail.ccc.de 25 eingeben und dich dann mit helo bekannt machen. dann mit
    mail from: E-Mailadresse
    die Adresse vom Absender festlegen. Mit
    rcpt to: E-Mailadresse
    die Adresse vom Empfänger festlegen. Mit
    DATA
    beginnst du eine Mail und enden tut sie mit einem '.' in einer neuen Zeile.

    mfg
    V_R

    ------------------
    Am 8. Tag schuf Gott Windows und vorbei war es mit dem Paradies!





  • Ich bin da gerade auf ein neues Problem gestoßen. Für den helo-Befehl benötige ich ja meine eigene IP. Wie bekomme ich diese???



  • Hi,

    also normalerweise kann man sich mit jedem X beliebigen Namen anmelden. Aber wenn du deine IP-Adresse wissen willst, dann oeffne mal ne Konsole und gib folgendes ein:
    netstat -n
    dann bekommst alles IP-Adressen aufgelistet unter Local Adress steht deine IP.

    mfg
    V_R

    ------------------
    Am 8. Tag schuf Gott Windows und vorbei war es mit dem Paradies!



  • du hast recht. Man kann sich mit jedem namen bekannt machen (muss aber einen Punkt enthalten). Wenn ich "mail from: öksdfhg@ölkjhf.de" (also eine beliebige Adresse eingebe) wird die akzeptiert. Aber wenn ich als Empfänger meine eigene (jolayer@gmx.de) eingebe wird diese nicht angenommen. Woran liegt das?



  • Hi,

    keine ahnung woran das liegt. Versuch mal folgenden Server:
    mail.bbs-ahrweiler.de

    mfg
    V_R

    ------------------
    Am 8. Tag schuf Gott Windows und vorbei war es mit dem Paradies!



  • Du kannst die IP auch rausfinden, indem du winipcfg unter Ausführen eingibst, da kriegst du die IP für jeden Adapter.

    TheToast



  • @TheToast: Danke. Der Tipp ist echt gut!
    @virtuell_Realisticer: Wenn ich die Empfängeradresse eingebe kommt folgendes:
    Relaying denied. IP name lookup failed [meine IP]

    Hat eigentlich schon irgendjemand auf diese Weise eine Mail verschickt???



  • hab dasselbe problem wie arnoldapfelstrudel. und zwar jetzt auf nem guten dutzend mailserver. haben die vielleicht neuerdings schärfere sicherheitsvorkehrungen???



  • Hi,

    ihr habt recht. Man hat nicht die Berechtigung um eine E-Mail zu versenden:
    Host [meine IP] has not the permissiont to realy send mail.
    So sieht's aus. Ich muss nochmal zu Hause in meinem Schrank nachschauen, dann kann ich dir noch ein paar andere Adressen geben.

    mfg
    V_R

    ------------------
    Am 8. Tag schuf Gott Windows und vorbei war es mit dem Paradies!


Anmelden zum Antworten