Email versenden (C++)

Diskutiere Email versenden (C++) im Developer Network Forum im Bereich Hardware & Software Forum; Hi ! Also ich möchte jetzt gerne lernen, eine Email per sockets zu versenden zu können. Ich möchte jetzt nicht gleich den vollständigen code...
  • Email versenden (C++) Beitrag #1
H

Hijack Onur

Bekanntes Mitglied
Dabei seit
05.12.2006
Beiträge
179
Reaktionspunkte
0
Ort
Berlin
Hi !

Also ich möchte jetzt gerne lernen, eine Email per sockets zu versenden zu können.
Ich möchte jetzt nicht gleich den vollständigen code von euch, nur den aufbau.

Habe schon einiges gesehn, wie z.B. "HELO smptserver", und so weiter, ich würde mich freuen wenn jmd. mir helfen würde.

Onur !
 
  • Email versenden (C++) Beitrag #2
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Da hast du zwei verschiedene Aufgaben zu lösen. Erstmal die Socket-Programmierung an sich, und zweitens die Kommunikation mit dem Mail-Server.
Es gab hier vor ein paar Wochen ein ähnliches Thema; einfach mal danach suchen.
Die Kommandos für den Mailserver sind recht einfach:
http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol
Zu Sockets gibts Beispielcode wie Sand am Meer. Einfach mal Google mit Tutorial Win32 Sockets C++ oder sowas in der Art füttern.
 
  • Email versenden (C++) Beitrag #3
H

Hijack Onur

Bekanntes Mitglied
Dabei seit
05.12.2006
Beiträge
179
Reaktionspunkte
0
Ort
Berlin
danke , cmddegi !

so jetzt habe ich volgenden code bereit:

Code:
#include <windows.h>
#include <stdio.h>

int main()
{
    WSADATA wsadata;
    SOCKET sock;
    
    if(WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
    {
    MessageBox(NULL, "Fehler bei der Initialization !", "Fehler", MB_OK | MB_ICONERROR);
    }
    
    sock = socket(AF_INET, SOCK_STREAM, 0);
    
    if(sock == INVALID_SOCKET)
    {
    MessageBox(NULL, "Fehler beim Erstellen des Socket's !", "Fehler", MB_OK | MB_ICONERROR);
    }
    
    sockaddr_in Info;
    
    Info.sin_port=htons(25);
    Info.sin_family=AF_INET;
    
    if(connect(sock,(sockaddr*)&Info, sizeof(Info)) != SOCKET_ERROR)
    {
    MessageBox(NULL, "Error", "Error", MB_OK | MB_ICONERROR);
    }
    
    send(sock, "HELO smtp.mail.yahoo.de", sizeof("HELO smtp.mail.yahoo.de"), 0);
    Sleep(500);
    send(sock, "MAIL FROM: [email protected]", sizeof("MAIL FROM: [email protected]"), 0);
    Sleep(500);
    send(sock, "RCPT TO: [email protected]", sizeof("RCPT TO: [email protected]"), 0);
    Sleep(500);
    send(sock, "DATA", sizeof("DATA"), 0);
    Sleep(500);
    send(sock, "Subject: C++ Mailer", sizeof("Subject: C++ Mailer"), 0);
    Sleep(500);
    send(sock, "From: [email protected]", sizeof("From: [email protected]"), 0);
    Sleep(500);
    send(sock, "To: [email protected]", sizeof("To: [email protected]"), 0);
    Sleep(500);
    send(sock, "Hello", sizeof("Hello"), 0);
    Sleep(500);
    send(sock, "This is a test.", sizeof("This is a test."), 0);
    Sleep(500);
    send(sock, "Goodbye.", sizeof("Goodbye."), 0);
    Sleep(500);
    send(sock, ".", sizeof("."), 0);
    Sleep(500);
    send(sock, "QUIT", sizeof("QUIT"), 0);
    Sleep(500);
}

doch leider funktoniert es irgendwie nicht, also kompilieren funktoniert ohne fehler, aber die mail kommt nicht an.

Hoffe jmd. kann mir weiterhelfen.
 
  • Email versenden (C++) Beitrag #4
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Vermutlich verlangt der Server eine Authentifizierung. Einfach mal mit Hyperterminal oder so ausprobieren.
 
  • Email versenden (C++) Beitrag #5
H

Hijack Onur

Bekanntes Mitglied
Dabei seit
05.12.2006
Beiträge
179
Reaktionspunkte
0
Ort
Berlin
Authentifizierung, ja das hatte ich mir bereits gesacht.. kann mir da jemand vlt. weiterhelfen, hab schon überall gesucht, doch leider nicht's richtig verstanden.. also gefunden hab ich schon einiges, doch wie gesagt nicht's verstanden.

Warte auf eure Hilfe :).
 
  • Email versenden (C++) Beitrag #6
Scorn07

Scorn07

Bekanntes Mitglied
Dabei seit
14.01.2007
Beiträge
253
Reaktionspunkte
0
  • Email versenden (C++) Beitrag #7
H

Hijack Onur

Bekanntes Mitglied
Dabei seit
05.12.2006
Beiträge
179
Reaktionspunkte
0
Ort
Berlin
Es funktoniert aber immer noch nicht, auch nicht mit der Auth., .. die Mail kommt einfach nicht an, auch nicht als SPAM-MAIL.
 
  • Email versenden (C++) Beitrag #8
S

Stefan

Guest
Vielleicht solltest du mal abfragen, was der Mailserver zurückgibt, und dir das dann ausgeben - ich hab mir sagen lassen, das sei recht hilfreich :)
 
  • Email versenden (C++) Beitrag #9
H

Hijack Onur

Bekanntes Mitglied
Dabei seit
05.12.2006
Beiträge
179
Reaktionspunkte
0
Ort
Berlin
Also so sieht jetzt mein Code aus :

Code:
#include <windows.h>
#include <stdio.h>

char Data[MAX_PATH];

int main()
{
    WSADATA wsadata;
    SOCKET sock;
    
    if(WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
    {
    MessageBox(NULL, "Fehler bei der Initialization !", "Fehler", MB_OK | MB_ICONERROR);
    }
    
    sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    
    if(sock == INVALID_SOCKET)
    {
    MessageBox(NULL, "Fehler beim Erstellen des Socket's !", "Fehler", MB_OK | MB_ICONERROR);
    }
    
    sockaddr_in client;
    
    client.sin_port=htons(25);
    client.sin_addr.s_addr=inet_addr("217.12.11.35");
    client.sin_family=AF_INET;
    
    if(connect(sock,(sockaddr*)&client, sizeof(client)) == SOCKET_ERROR)
    {
    MessageBox(NULL, "Connection to ip failed !", 0, MB_OK | MB_ICONWARNING);
    WSACleanup();
    }
    
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "EHLO smtp004.mail.ukl.yahoo.com", sizeof("EHLO smtp004.mail.ukl.yahoo.com"), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "AUTH LOGIN", sizeof("AUTH LOGIN"), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "mein benutzer name", sizeof("mein benutzer name"), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "mein password", sizeof("mein password"), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "MAIL FROM: [email protected]", sizeof("MAIL FROM: [email protected]"), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "RCPT TO: [email protected]", sizeof("RCPT TO: [email protected]"), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "DATA", sizeof("DATA"), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "From: [email protected]", sizeof("From: [email protected]"), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "To: [email protected]", sizeof("To: [email protected]"), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "Subject: Hallo", sizeof("Subject: Hallo"), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "", sizeof(""), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "Hallo Onur.", sizeof("Hallo Onur."), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, ".", sizeof("."), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    send(sock, "QUIT", sizeof("QUIT"), 0);
    recv(sock, Data, sizeof(Data), 0);
    printf(Data);
    printf("\n");
    system("pause");
}

So als Bericht erhalte ich jedesmal :

bericht.bmp


hoffe jmd. kann mir weiterhelfen.

Onur !
 
  • Email versenden (C++) Beitrag #10
Scorn07

Scorn07

Bekanntes Mitglied
Dabei seit
14.01.2007
Beiträge
253
Reaktionspunkte
0
Ich hab deinen Code nur überflogen, aber soweit ich das gesehen hab fehlt bei dir die Base64 Kodierung.
Nach "AUTH LOGIN".
 
  • Email versenden (C++) Beitrag #11
H

Hijack Onur

Bekanntes Mitglied
Dabei seit
05.12.2006
Beiträge
179
Reaktionspunkte
0
Ort
Berlin
Das habe ich bereits, doch nur hier habe ich "mein password" hin geschrieben, also im original sind meine login Daten in base64 kodiert.

Keine andere Ideen ? :confused:
 
Thema:

Email versenden (C++)

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben