fabian ackle
02.08.2002, 22:14
ok, ich bin mit meinem latein am ende... habe den ganzen tag versucht das "mailprogremm" zum laufen zu bringen, was mir leider .o0(*#!@?^:mauer:') nicht gelungen ist :mad:
ich kann zum mailserver verbinden, und bekomme auch eine meldung von ihm, aber dann versuche ich mich mit 'helo fabian' anzumelden aber bekomme keine daten mehr zurück... (wenn ich es mit telnet mache geht es...)
weis echt nicht mehr weiter und goffe dass ihr mir helfen könnt:
#include <iostream.h>
#include <winsock.h>
#include <string.h>
long smsrc;
SOCKET smss;
SOCKADDR_IN smsaddr;
char smsbuf[256];
char smssbuf[256];
int StartWinsock(void){
WSADATA wsa;
return WSAStartup(MAKEWORD(2,0),&wsa);
}
//=========EVALUATE=================================
void evaluate(char indata[], char message[], char num[]){
if(strstr(indata,"ready")){
strcpy(smssbuf,"helo fabian\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
}
if(strstr(indata,"250") && strstr(indata,"bluewin.ch")){
strcpy(smssbuf,"mail from: <dubious@gmx.ch>\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
}
if(strstr(indata,"MAIL FROM")){
strcpy(smssbuf,"rcpt to: <");
strcat(smssbuf,num);
strcat(smssbuf,">\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
}
if(strstr(indata,"RCPT TO")){
strcpy(smssbuf,"data\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
}
if(strstr(indata,"start mail input")){
strcpy(smssbuf,message);
strcat(smssbuf,"\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
strcpy(smssbuf,".\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
strcpy(smssbuf,"QUIT\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
}
}
//==================================================
//=========getAdressfromString======================
long getAddrFromSMSString(char* hostnameOrIp, SOCKADDR_IN* smsaddr){
unsigned long ip;
HOSTENT* he;
if(hostnameOrIp==NULL || smsaddr==NULL)
return SOCKET_ERROR;
ip=inet_addr(hostnameOrIp);
if(ip!=INADDR_NONE){
smsaddr->sin_addr.s_addr=ip;
return 0;
}
else{
he=gethostbyname(hostnameOrIp);
if(he==NULL){
return SOCKET_ERROR;
}
else{
memcpy(&(smsaddr->sin_addr),he->h_addr_list[0],4);
}
return 0;
}
}
//==================================================
//======MAIL========================================
void main(){
char adresse[256];
char nachr[256];
cin >> adresse;
cin >> nachr;
smsrc=StartWinsock();
if(smsrc!=0){
cout << "Fehler: StartWinsock, Fehler CODE: " << smsrc << endl;
}
else{
cout << "Winsock gestartet!" << endl;
}
smss=socket(AF_INET,SOCK_STREAM,0);
if(smss!=INVALID_SOCKET){
cout << "SMS-Socket erstellt!" << endl;
}
memset(&smsaddr,0,sizeof(SOCKADDR_IN));
//==GETIP====================
smsrc=getAddrFromSMSString("mail.bluewin.ch",&smsaddr);
if(smsrc!=SOCKET_ERROR){
cout << "IP aufgeloest!\n";
}
smsaddr.sin_family=AF_INET;
smsaddr.sin_port=htons(25);
//===========================
smsrc=connect(smss,(SOCKADDR*)&smsaddr,sizeof(SOCKADDR));
if(smsrc!=SOCKET_ERROR){
cout << "Verbunden mit SMS-Server..." << endl;
smsrc=1;
while(smsrc){
smsrc=recv(smss, smsbuf, 256, 0);
smsbuf[smsrc-1]='\0';
cout << smsbuf << endl;
evaluate(smsbuf, nachr, adresse);
}
cout << "==> SENDEVORGANG BEENDET <==" << endl;
}
}
ok, ich weiss, es ist nicht so schön gecodet, aber ich hoffe ihr versteht ungefähr was ich damit bezwecken wollte :)
ach, die komischen variabel-namen haben übrigens auch ihre gründe :D
thx
fabian
ich kann zum mailserver verbinden, und bekomme auch eine meldung von ihm, aber dann versuche ich mich mit 'helo fabian' anzumelden aber bekomme keine daten mehr zurück... (wenn ich es mit telnet mache geht es...)
weis echt nicht mehr weiter und goffe dass ihr mir helfen könnt:
#include <iostream.h>
#include <winsock.h>
#include <string.h>
long smsrc;
SOCKET smss;
SOCKADDR_IN smsaddr;
char smsbuf[256];
char smssbuf[256];
int StartWinsock(void){
WSADATA wsa;
return WSAStartup(MAKEWORD(2,0),&wsa);
}
//=========EVALUATE=================================
void evaluate(char indata[], char message[], char num[]){
if(strstr(indata,"ready")){
strcpy(smssbuf,"helo fabian\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
}
if(strstr(indata,"250") && strstr(indata,"bluewin.ch")){
strcpy(smssbuf,"mail from: <dubious@gmx.ch>\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
}
if(strstr(indata,"MAIL FROM")){
strcpy(smssbuf,"rcpt to: <");
strcat(smssbuf,num);
strcat(smssbuf,">\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
}
if(strstr(indata,"RCPT TO")){
strcpy(smssbuf,"data\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
}
if(strstr(indata,"start mail input")){
strcpy(smssbuf,message);
strcat(smssbuf,"\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
strcpy(smssbuf,".\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
strcpy(smssbuf,"QUIT\n");
cout << smssbuf << endl;
send(smss, smssbuf, strlen(smssbuf), 0);
}
}
//==================================================
//=========getAdressfromString======================
long getAddrFromSMSString(char* hostnameOrIp, SOCKADDR_IN* smsaddr){
unsigned long ip;
HOSTENT* he;
if(hostnameOrIp==NULL || smsaddr==NULL)
return SOCKET_ERROR;
ip=inet_addr(hostnameOrIp);
if(ip!=INADDR_NONE){
smsaddr->sin_addr.s_addr=ip;
return 0;
}
else{
he=gethostbyname(hostnameOrIp);
if(he==NULL){
return SOCKET_ERROR;
}
else{
memcpy(&(smsaddr->sin_addr),he->h_addr_list[0],4);
}
return 0;
}
}
//==================================================
//======MAIL========================================
void main(){
char adresse[256];
char nachr[256];
cin >> adresse;
cin >> nachr;
smsrc=StartWinsock();
if(smsrc!=0){
cout << "Fehler: StartWinsock, Fehler CODE: " << smsrc << endl;
}
else{
cout << "Winsock gestartet!" << endl;
}
smss=socket(AF_INET,SOCK_STREAM,0);
if(smss!=INVALID_SOCKET){
cout << "SMS-Socket erstellt!" << endl;
}
memset(&smsaddr,0,sizeof(SOCKADDR_IN));
//==GETIP====================
smsrc=getAddrFromSMSString("mail.bluewin.ch",&smsaddr);
if(smsrc!=SOCKET_ERROR){
cout << "IP aufgeloest!\n";
}
smsaddr.sin_family=AF_INET;
smsaddr.sin_port=htons(25);
//===========================
smsrc=connect(smss,(SOCKADDR*)&smsaddr,sizeof(SOCKADDR));
if(smsrc!=SOCKET_ERROR){
cout << "Verbunden mit SMS-Server..." << endl;
smsrc=1;
while(smsrc){
smsrc=recv(smss, smsbuf, 256, 0);
smsbuf[smsrc-1]='\0';
cout << smsbuf << endl;
evaluate(smsbuf, nachr, adresse);
}
cout << "==> SENDEVORGANG BEENDET <==" << endl;
}
}
ok, ich weiss, es ist nicht so schön gecodet, aber ich hoffe ihr versteht ungefähr was ich damit bezwecken wollte :)
ach, die komischen variabel-namen haben übrigens auch ihre gründe :D
thx
fabian