automatischer E-Mail-Versand in C++

Hallo...

Ich habe ein Programm in C++ geschrieben, welches durch einen globalen Hook in einer dll Datei Text in einer Textdatei abspeichert... Programmierer werden wissen was ich meine... jetzt will ich aber, dass diese Textdatei automatisch an eine bestimmte E-mail adresse gesendet wird, und wollte fragen, ob es eine möglichkeit gibt, dies unter Windows XP ausführbar zu machen??


ist alles natürlich nur für private Zwecke gedacht und dafür, das ich besser Programmieren lerne :)


Schonmal Danke im Vorraus für eure Hilfe...
 
Muss es direkt im Programm sein? Sonst könntest du ja etwas externes, wie sendmail (oder eine dementsprechende Alternative) verwenden. Da muss das Programm ja nur mit den dementsprechenden Parametern aufgerufen werden.

Ansonsten musst du's mit Sockets machen und gucken, wie eine Mail im Detail aufgebaut ist. Kenn mich da nicht so aus, habe bisher nur HTTP-Requests gemacht. :/
 
Der Code sollte schon in der .main des Programms stehn, ansonsten wäre das ein bissjen Kompliziert...
Aber das mit den Sockets war schonmal keine so schlechte idee, nur leider habe ich mich mit Socketprogrammierung noch nicht wirklich tiefgehend beschäftigt...

habe hier auch ein bissjen Java Code dazu gefunden, aber konnte diesen nicht in C++ umsetzten, da ich in Java so gut wie nichts kann... vllt jmd. eine Idee? oder kann mir jmd. sagen, was ich noch lernen muss um das zu realisieren??

Code:
public static void main(String args[]) throws IOException,
      UnknownHostException {
    String msgFile = "file.txt";
    String from = "java2s@java2s.com";
    String to = "yourEmail@yourServer.com";
    String mailHost = "yourHost";
    SMTP mail = new SMTP(mailHost);
    if (mail != null) {
      if (mail.send(new FileReader(msgFile), from, to)) {
        System.out.println("Mail sent.");
      } else {
        System.out.println("Connect to SMTP server failed!");
      }
    }
    System.out.println("Done.");
 
Hehe, so einfach wird es nicht in C++ gehen. ^^
Scheinbar bietet Java dort eine Klasse, um E-Mails zu versenden. Mir währe nicht bekannt, dass es sowas auch für C++ gibt, aber man kann ja mal nach einer Lib googeln¹.

Wenn du's mit Sockets machen willst, dann schau dir mal dashier an:
http://www.codeguru.com/forum/showthread.php?t=300530
Der Code von "Andreas Masur" ist m.M.n ganz übersichtlich.

1.: Ohne Gewähr, da nicht getestet:
http://www.chilkatsoft.com/email-library.asp
 
Hehe, so einfach wird es nicht in C++ gehen. ^^
Scheinbar bietet Java dort eine Klasse, um E-Mails zu versenden. Mir währe nicht bekannt, dass es sowas auch für C++ gibt, aber man kann ja mal nach einer Lib googeln¹.

Wenn du's mit Sockets machen willst, dann schau dir mal dashier an:
http://www.codeguru.com/forum/showthread.php?t=300530
Der Code von "Andreas Masur" ist m.M.n ganz übersichtlich.

1.: Ohne Gewähr, da nicht getestet:
http://www.chilkatsoft.com/email-library.asp

Beide Beispiele beziehen sich auf Visual C++. Da wird es wohl entsprechende Klassen geben, die durch das .Net-Framework bereitgestellt werden.

Wenn du das in purem C++ machen willst, verwende WinSock und schau dir RFC2821 und RFC2045 an, wie eine Email aufgebaut sein muss und wie sie ordnungsgemäß versendet werden kann.
Alternativ könntest du auch jwSMTP oder eine andere fertige Lib verwenden.
 
jwSMTP ist eigentlich eine recht gute Lösung, die ich auch empfehlen würde. Dessen bediene ich mich immer, wenn ich Mails via C++ versenden muss. Auch unter Windows ist sie wohl problemlos verwendbar: http://bitmuncher.de/files/jwsmtp_doc/win.html Allerdings fehlt ihr noch eine Unterstützung für verschlüsselten Email-Versand und 100% RFC-kompatibel ist sie auch nicht.
 
@ http://www.codeguru.com/forum/showthread.php?t=300530

Der code ist recht anstaendig, allerdings wuerde ich am Ende des Dialogs noch die Message des Mailserers auswerten um zu wissen ob man ueberhaupt was versendet hat.
Zudem hat der keinen Code zur authentifizierung mit drin. Das bedeutet du brauchst irgendwo im lokalen Netz ein Mailrelay. Das Einbauen von Authentifizierung ist jedoch ziemlich isi und bedeutet nur ein weiteres kommando an den Mailserver zu schicken:

Du brauchst folgenden String: \000USER\@DOMAIN.COM\000PASSWORD
Den kodierst du als BASE64
Nach dem HELO schickste dann:

AUTH PLAIN CODIERTER_STRING


Wenn da eine solide Mailfunktion bei rauskommt, waers schoen wenn du die im code/SW Bereich veroeffentlichen wuerdest ;)

 
Zurück
Oben