E-mail

FSA

Erfahrenes Mitglied
Hallo ich möchte gerne ein programm schreiben oder quellcode haben das eine email versendet ich habe schon den link gehabt:

http://www.online-tutorials.net/netzwerk/emails-verschicken/sourcecodes-t-18-23.html

aber der funktioniert bei mir nicht ich habe alles richtig gemacht auch mailadresse absender alles!:(
Mein mailprogramm: Windows Mail (nicht Windows live Mail!!)
Ich verwende MSVC++
OS:Windows Vista
Hoffe das sind alle angaben

Danke schonmal im Voraus!
 
Um eine Mail versenden zu können musst du dich erstmal mit dem SMTP Protokoll auseinander setzen.
Wenn du das kennst, dann kannst du selbst die Kommunikation mit dem Mailserver schreiben und brauchst keine fertigen Funktionen die du nicht kapierst. Brauchst allerdings noch Kentnisse in Winsock. Also Windows-Sockets. Weiß nicht wieviel du dich schon in der Netztwerk-Programmierung auskennst.
Falls du keine Ahung von dem allen hast, empfehle ich dir erstmal bei NULL anzufangen. Richtig C/C++ programmieren, Netzwerkprogrammierung (Winsock) und dann des SMTP-Protokoll. Ich kann dir dabei gerne helfen, da ich selbst schon einen Mailclient komplett selbst geschrieben habe, ohne irgendwelche fertigen Funktionen oder Bibliotheken.

grüße
 
Wir sind hier um zu helfen, nicht um die arbeit von anderen zu machen.
Wenn du beim Mailprogrammieren nicht weiter kommst, dann helfen wir dir gerne.
ABER nicht wenn du keine Bock hast dich damit auseinander zu setzen und einfach nur Code willst, den du am Schluss nicht mal kapierst. Ich könnte dir in den Code auch einen Trojaner mit einprogrammieren und du würdest es vllt nicht mal merken und beim Kompilieren und Ausführen hättest du einen auf deinem System. So als Beispiel ;)...

http://www.c-worker.ch/tuts.php
Diese Tutorial weißt dich in die Socket-Programmierung ein. Ist sehr gut finde ich

Und zum SMTP-Protokoll findest du auch sehr viel bei google...

grüße
 
Das mit dem trojaner würd ich schon merken:-)
Ich fress mich mal durch dann meld ich mich nochmal....
Danke Schön
 
ich hab jetzt ne frage an crash kid :

ich hab den code als Client:

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

//Prototypen
int startWinsock(void);
long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr);

int main(int argc, char** argv)
{
  long rc;
  SOCKET s;
  SOCKADDR_IN addr;
  char buf[256];

  if(argc<2)
  {
    printf("Usage: sock <hostname oder ip des servers>\n");
    return 1;
  }


  // Winsock starten
  rc=startWinsock();
  if(rc!=0)
  {
    printf("Fehler: startWinsock, fehler code: %d\n",rc);
    return 1;
  }
  else
  {
    printf("Winsock gestartet!\n");
  }

  // Socket erstellen
  s=socket(AF_INET,SOCK_STREAM,0);
  if(s==INVALID_SOCKET)
  {
    printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("Socket erstellt!\n");
  }

  // Verbinden
  memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
  addr.sin_family=AF_INET;
  addr.sin_port=htons(12345); // wir verwenden mal port 12345
  rc=getAddrFromString(argv[1],&addr);
  if(rc==SOCKET_ERROR)
  {
    printf("IP für %s konnte nicht aufgeloest werden\n", argv[1]);
    return 1;
  }
  else
  {
    printf("IP aufgeloest!\n");
  }


  rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
  if(rc==SOCKET_ERROR)
  {
    printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("Verbunden mit 127.0.0.1..\n");
  }


  // Daten austauschen
  while(rc!=SOCKET_ERROR)
  {
    printf("\nZeichenfolge eingeben [max 256]: ");
    gets(buf);
    send(s,buf,strlen(buf),0);
    rc=recv(s,buf,256,0);
    if(rc==0)
    {
      printf("Server hat die Verbindung getrennt..\n");
      break;
    }
    if(rc==SOCKET_ERROR)
    {
      printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
      break;
    }
    buf[rc]='\0';
    printf("\nServer antwortet: %s\n",buf);
  }
  closesocket(s);
  WSACleanup();
  return 0;
}

int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&wsa);
}


long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr)

{
  long rc;
  unsigned long ip;
  HOSTENT* he;


  /* Parameter prüfen */
  if(hostnameOrIp==NULL || addr==NULL)
    return SOCKET_ERROR;


  /* eine IP in hostnameOrIp ? */
  ip=inet_addr(hostnameOrIp);

  /* bei einem fehler liefert inet_addr den Rückgabewert INADDR_NONE */
  if(ip!=INADDR_NONE)
  {
    addr->sin_addr.s_addr=ip;
    return 0;
  }
  else
  {
    /* Hostname in hostnameOrIp auflösen */
    he=gethostbyname(hostnameOrIp);
    if(he==NULL)
    {
      return SOCKET_ERROR;
    }
    else
    {
      /*die 4 Bytes der IP von he nach addr kopieren */
      memcpy(&(addr->sin_addr),he->h_addr_list[0],4);
    }
    return 0;

  }
}

und server ist:

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

#pragma comment( lib, "ws2_32.lib")

//Prototypen
int startWinsock(void);

int main()
{
  long rc;
  SOCKET acceptSocket;
  SOCKET connectedSocket;
  SOCKADDR_IN addr;
  char buf[256];
  char buf2[300];

  // Winsock starten
  rc=startWinsock();
  if(rc!=0)
  {
    printf("Fehler: startWinsock, fehler code: %d\n",rc);
    return 1;
  }
  else
  {
    printf("Winsock gestartet!\n");
  }

  // Socket erstellen
  acceptSocket=socket(AF_INET,SOCK_STREAM,0);
  if(acceptSocket==INVALID_SOCKET)
  {
    printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("Socket erstellt!\n");
  }

  // Socket binden
  memset(&addr,0,sizeof(SOCKADDR_IN));
  addr.sin_family=AF_INET;
  addr.sin_port=htons(12345);
  addr.sin_addr.s_addr=ADDR_ANY;
  rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
  if(rc==SOCKET_ERROR)
  {
    printf("Fehler: bind, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("Socket an port 12345 gebunden\n");
  }

  // In den listen Modus
  rc=listen(acceptSocket,10);
  if(rc==SOCKET_ERROR)
  {
    printf("Fehler: listen, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("acceptSocket ist im listen Modus....\n");
  }

  // Verbindung annehmen
  connectedSocket=accept(acceptSocket,NULL,NULL);
  if(connectedSocket==INVALID_SOCKET)
  {
    printf("Fehler: accept, fehler code: %d\n",WSAGetLastError());
    return 1;
  }
  else
  {
    printf("Neue Verbindung wurde akzeptiert!\n");
  }

  // Daten austauschen
  while(rc!=SOCKET_ERROR)
  {
    rc=recv(connectedSocket,buf,256,0);
    if(rc==0)
    {
      printf("Server hat die Verbindung getrennt..\n");
      break;
    }
    if(rc==SOCKET_ERROR)
    {
      printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
      break;
    }
    buf[rc]='\0';
    printf("Client sendet: %s\n",buf);
    sprintf(buf2,"Du mich auch %s",buf);
    rc=send(connectedSocket,buf2,strlen(buf2),0);
  }
  closesocket(acceptSocket);
  closesocket(connectedSocket);
  WSACleanup();
  return 0;
}



int startWinsock(void)
{
  WSADATA wsa;
  return WSAStartup(MAKEWORD(2,0),&wsa);
}

Wenn ich jetzt server starte klapt alles dann starte ich client und der client schliesst sich sofort wieder aber der server wartet immernoch auf eine verbindung
Was ist der fehler?
 
Was kommt beim Client für ne Fehlermeldung? Vermutlich kann er irgendwas nicht initialisieren.
Die Winsock oder bekommt keinen Socket mehr. Es gibt mehrere möglichkeiten.
 
Ich hab ihn gerade kompiliert und schau auch grad. Der macht bei mir des selbe.

//Edit: hau die erste überprüfung von argc<2 raus.
 
Zurück