Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

E-Mail versenden....

Diskussion: E-Mail versenden.... im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo Leute! Ich benutze den Compiler Dev-C++ und möchte ein Programm schreiben, dass E-Mails verschickt. Ich habe dazu folgenden ...

Antwort
Alt 15.08.07, 17:13   #1 (permalink)
 
Registriert seit: 30.01.04
Nijopeon Leistung: Facit NTK
Nijopeon eine Nachricht über ICQ schicken
Likes: 0
Exclamation E-Mail versenden....

Anzeige

Hallo Leute!

Ich benutze den Compiler Dev-C++ und möchte ein Programm schreiben, dass E-Mails verschickt.

Ich habe dazu folgenden Code:

Code:
#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@ano.de","empfänger@etwas.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; 
}
Hm funktioniert soweit wunderbar, solange ich ein offenes Mail-Relay benutze, da es diese aber kaum noch gibt, und dieses auch nicht für meine Zwecke dient muss ich den Code wohl um ein POP3 Login erweitern. Ich google mich schon die ganze Zeit tot, ich finde einfach nichts passendes. Habt ihr was?

Vielen Dank!
Nijopeon ist offline   Mit Zitat antworten
Alt 15.08.07, 17:36   #2 (permalink)
 
Registriert seit: 27.02.07
mucki Leistung: Z3
Likes: 2
Standard

So gehts mit Telnet:
Code:
telnet pop.web.de 110
user mucki
pass geheim
quit
Dann hat man eine kurze Weile Zeit, mit smtp was zu schicken. Musst du halt nur noch in deinem Code so umsetzen.
mucki ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 15.08.07, 17:45   #3 (permalink)
Themenstarter
 
Registriert seit: 30.01.04
Nijopeon Leistung: Facit NTK
Nijopeon eine Nachricht über ICQ schicken
Likes: 0
Standard

hmm super ich teste mal...

besten Dank!
Nijopeon ist offline   Mit Zitat antworten
Alt 15.08.07, 17:48   #4 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 441
Standard

Schau dir mal die jwSMTP-Bibliothek an. Die kann auch zumindest grundlegende Authentifizierung. Wobei du auch einfach Bugfixing in meinem Bitmailer machen kannst: http://sourceforge.net/projects/bitmailer/
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist gerade online   Mit Zitat antworten
Alt 15.08.07, 18:14   #5 (permalink)
Themenstarter
 
Registriert seit: 30.01.04
Nijopeon Leistung: Facit NTK
Nijopeon eine Nachricht über ICQ schicken
Likes: 0
Standard

hm wenn ich mit mit Telnet einlogge und dann das Programm starte wird die Mail verschickt....

Hat jemand eine Idee wie ich das mit dem Quellcode verbinden kann also das das Programm das selbst macht?
Nijopeon ist offline   Mit Zitat antworten
Alt 15.08.07, 18:53   #6 (permalink)
 
Registriert seit: 27.02.07
mucki Leistung: Z3
Likes: 2
Standard

na genauso, wie du das mit smtp auch gemacht hast, erst verbinden (diesmal port 110) und dann:
Code:
send(hServer,"user mucki",strlen("user mucki"),0);
send(hServer,"pass geheim",strlen("pass geheim"),0);
send(hServer,"quit",strlen("quit"),0);
falls du emails auch abrufen willst, hier sind noch ein paar pop-befehle:
Code:
list,stat,retr x (z.B. retr 1),dele x
mucki ist offline   Mit Zitat antworten
Alt 16.08.07, 12:53   #7 (permalink)
Themenstarter
 
Registriert seit: 30.01.04
Nijopeon Leistung: Facit NTK
Nijopeon eine Nachricht über ICQ schicken
Likes: 0
Standard

Dankeee! Du bist ein Schatz *gg*
Wird wohl hinhaun thxxxxx
Nijopeon ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » E-Mail versenden....
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[C++] E-mail versenden <b00n> Code Kitchen 7 03.08.07 16:21
SMTP MAIL versenden brave_snoopy Internet Allgemein 5 09.03.06 23:58
E-Mail versenden mit C++ Neuer06 Code Kitchen 5 28.02.06 17:36
HTML-FormularDaten per mail versenden halimeh (Web-) Design und webbasierte Sprachen 3 21.11.04 11:16


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61