Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » e-mail

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.12.2004, 16:44 Uhr
~RUDl
Gast


hi!
kann mir vll jemand sagen warum mein programm nicht geht?
hier mal der source:

C++:
#include <winsock2.h>
#include <stdio.h>
#include <iostream>
using namespace std;
#pragma comment(lib,"wsock32.lib")

#define EOL  "\r\n"

DWORD smailid;
HANDLE hthr;
const WORD   VERSION_MAJOR  = 1;    
const WORD   VERSION_MINOR  = 1;
int error;
char pszBody[1500];

typedef struct threadd
{
    char name[200];
    char fromid[200];
    char toid[200];
    char serv[200];
    char sub[300];
    char mes[1000];
} TDATA;

void send(char *smtpservr, char *fromname, char *fromid, char *toid,
          char *subject, char *message);
void Check( int iStatus, char *szFunction );
DWORD WINAPI is_ok( LPVOID l);
int sendmail( LPVOID l);

int main()
{
  send("mail.web.de","Absendername","Anonymous@web.de","empfänger@web.de",
       "Betreff","Nachricht");
  getchar();
  return 0;
}

void send(char *smtpservr, char *fromname, char *fromid, char *toid,
          char *subject, char *message)
{
   TDATA td;

  strcpy(td.fromid,fromid);
  strcpy(td.name ,fromname);
  strcpy(td.serv ,smtpservr);
  strcpy(td.toid ,toid);
  strcpy(td.sub ,subject);
  strcpy(td.mes ,message);
  cout<<"Email an "<<toid<<" wird versendet . . ."<<endl;

  hthr=CreateThread(NULL,0,is_ok,(LPVOID)&td,CREATE_SUSPENDED,&smailid);  
  SetThreadPriority( hthr, THREAD_PRIORITY_TIME_CRITICAL);  
  ResumeThread(hthr);  
  WaitForSingleObject(hthr, INFINITE);
  
}

DWORD WINAPI is_ok( LPVOID l)
{
  TDATA *d=(TDATA *)l;
  if(sendmail(l)==0)
  cout<<"Versenden abgeschlossen"<<endl;
  else
  cout<<"Versenden gescheitert"<<endl;        
  return 0;
}


void Check( int iStatus, char *szFunction )
{  
  if (iStatus != SOCKET_ERROR && iStatus != 0)  return;
  else
  error=1;  
}

int sendmail( LPVOID l)
{
   WSADATA        WSData;
   LPHOSTENT      lpHostEntry;
   LPSERVENT      lpServEntry;
   SOCKADDR_IN    SockAddr;
   SOCKET         hServer;
   int            iProtocolPort;
   char           szSmtpServerName[100], szToAddr[100], szFromAddr[100];
   char           szBuffer[4096], szMsgLine[255];  

   TDATA *d=(TDATA *)l;
   error=0;  

   lstrcpy( szSmtpServerName,d->serv );  
   lstrcpy( szToAddr,   d->toid );
   lstrcpy( szFromAddr,d->fromid );
      
   if ( WSAStartup(MAKEWORD(VERSION_MAJOR, VERSION_MINOR), &WSData) )
   {      
      cout<<"Error: Kann Winsock nicht finden"<<endl;            
      return(1);
   }
  
   lpHostEntry = gethostbyname( szSmtpServerName );
   if (lpHostEntry == NULL)    
   {    
      cout<<"Error: Kann den SMTP Server("<<szSmtpServerName<<")"
            <<"nicht finden "<<endl;      
      return(1);
   }  
  
   hServer = socket( PF_INET, SOCK_STREAM, 0);
   if (hServer == INVALID_SOCKET)
   {            
      cout<<"Error: Cannot open mail server socket"<<endl;
      return(1);
   }
  
   lpServEntry = getservbyname( "mail", 0);
  
   if (lpServEntry == NULL)
     iProtocolPort = htons(IPPORT_SMTP);
   else
     iProtocolPort = lpServEntry->s_port;
  
   SockAddr.sin_family = AF_INET;
   SockAddr.sin_port = iProtocolPort;
   SockAddr.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
  
   if (connect( hServer, (PSOCKADDR) &SockAddr, sizeof(SockAddr)))
   {    
     cout<<"Error: Connecting to Server socket failed"<<endl;
     return (1);
   }

   Check( recv( hServer, szBuffer, sizeof(szBuffer), 0), "recv() Reply");
  
   wsprintf(szMsgLine,"HELO %s%s","microsoft [111.122.1.12]", EOL);
   Check(send(hServer,szMsgLine,strlen(szMsgLine), 0),"send() HELO");
   Check(recv(hServer,szBuffer,sizeof(szBuffer), 0),"recv() HELO");
  
   wsprintf( szMsgLine,"MAIL FROM:<%s>%s", szFromAddr,EOL);
   Check(send(hServer,szMsgLine,strlen(szMsgLine), 0),"send() MAIL FROM");
   Check(recv(hServer,szBuffer,sizeof(szBuffer), 0),"recv() MAIL FROM");

   wsprintf( szMsgLine,"RCPT TO:<%s>%s", szToAddr, EOL);
   Check(send(hServer,szMsgLine,strlen(szMsgLine),0),"send() RCPT TO");
   Check(recv(hServer,szBuffer,sizeof(szBuffer),0),"recv() RCPT TO");

   wsprintf( szMsgLine,"DATA%s", EOL);
   Check(send(hServer,szMsgLine,strlen(szMsgLine),0),"send() DATA");
   Check(recv(hServer,szBuffer,sizeof(szBuffer),0),"recv() DATA");


   char sdate[70];
   lstrcpy(sdate,"Date: ");
   char s1s[70];
   GetDateFormat(0x409,0,0,"ddd,dd MMM yyyy",s1s,200);
   lstrcat(sdate,s1s);
   lstrcat(sdate," ");
   GetTimeFormat(0x409,0,0,"HH:mm:ss",s1s,200);
   lstrcat(sdate,s1s);
   lstrcat(sdate," PM");

   char header[350];
   lstrcpy(header,"From: ");
   lstrcat(header,d->name );
   lstrcat(header,"<");
   lstrcat(header,d->fromid );
   lstrcat(header,">");
   lstrcat(header,"\r\n");
   lstrcat(header,"To: ");
   lstrcat(header,d->toid );
   lstrcat(header,"\r\n");
   lstrcat(header,"Subject: ");
   lstrcat(header,d->sub );
   lstrcat(header,"\r\n");
   lstrcat(header,sdate);
   lstrcat(header,"\r\n");
   lstrcat(header,"X-Mailer: Outlook Express 1.00\r\nMIME-Version:
           1.0\r\nContent-Type:text/plain;\r\n\tcharset=\"iso-8859-1\"
           \r\nContent-Transfer-Encoding: 7bit\r\n\r\n"
);

   wsprintf( szMsgLine,header);
   Check(send(hServer,szMsgLine,strlen(szMsgLine), 0),"send() header");
   if (error)
   return error;

  lstrcpy(pszBody,d->mes );
  lstrcat(pszBody,"\r\n\r\n");
  Check(send( hServer,pszBody, strlen(pszBody), 0), "send() message");
  wsprintf(szMsgLine,"%s.%s", EOL, EOL);
  Check(send(hServer,szMsgLine, strlen(szMsgLine),0),"send() end-message");
  Check(recv(hServer,szBuffer, sizeof(szBuffer),0),"recv() end-message");
  wsprintf(szMsgLine,"QUIT%s",EOL);
  Check(send(hServer,szMsgLine,strlen(szMsgLine),0),"send() QUIT");
  Check(recv(hServer,szBuffer,sizeof(szBuffer),0),"recv() QUIT");
  closesocket(hServer);
  WSACleanup();
  
return error;
}

ich hoffe ihr könnt mir helfen,
schon im vorraus danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.12.2004, 16:46 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Ich finde das schon ein bischen unverschämt von dir hier 3 Kilometer Quellcode zu posten und zu erwarten das jemand ohne nähere Beschreibung den Fehler für dich sucht.

Wie wärs wenn du beschreibst was das Problem ist, dann den relevanten(!!) Teil des Codes postest und dann noch eventuelle Fehlermeldungen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.12.2004, 16:53 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


was genau geht denn nicht?

vor allem wirste mit dieser helo-zeile:


C++:
wsprintf(szMsgLine,"HELO %s%s","microsoft [111.122.1.12]", EOL);



von 90% der (gescheiten) mailer abgewiesen, da helo ip und host nicht übereinstimmen, oder sitzt du auf 111.122.1.12???
--
class God : public ChuckNorris { };

Dieser Post wurde am 13.12.2004 um 16:55 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.12.2004, 17:15 Uhr
~RUDl
Gast


sry leuz.. aba das problem ist, ich weiß nicht von welchem part es ist
weil das compilieren geht eimandfrei!
ich glaub ma dann liegts an dem ip problem (
hättet ihr ne idee, dies zu lösen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.12.2004, 19:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja was ist denn das problem, das mit der HELO ist nur nebensächlich, kannst ja mal deine eigenen daten "per Hand" eintragen und dann probieren.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.12.2004, 19:48 Uhr
~RUdl
Gast


hmmz.. funkt auch nich
das erschütternde ist ja, dass das send true zurück gibt, dass es also gesendet wurde ABA NIX ANKOMMT!
ich habs mit arcor auch schon probiert, da funzt es auch nicht!
es muss aba irgendwie am server liegen,
und das problem ist; damit kenn ich mich null aus!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
13.12.2004, 20:36 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Ohne jetzt auf den Code geguckt zu haben, die meisten Mailserver erwarten das man sich vorher bei ihnen anmeldet bevor sie das senden gestatten. Das ist glaube ich erst seit ein paar Jahren so um Spam zu verhindern.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
13.12.2004, 21:06 Uhr
~RUDl
Gast


doh..
dann kann ich den ganzen code eigentlich in eimer schmeisen wenn ich das richtig sehe...
trotzdem danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
13.12.2004, 21:08 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ne du musst nur auth hinzufügen, meisten server unterstützen AUTH PLAIN, d.h du musst benutzername und passwort mit base64 encodieren und senden. Einfach mal googlen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
13.12.2004, 21:21 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


z.b siehe hier:

http://fiatlux.zeitform.info/technische_infos/e-mail_prot.html
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: