begin process at 2012 05 30 17:25:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

socket et serveur smtp


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

socket et serveur smtp

dimanche 5 septembre 2004 à 13:50:34 | socket et serveur smtp

lombredudragon

Voila j'aimerais savoir si c'est possible d'envoyer un mail de cette maniere:

#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")


void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);

SOCKET sock;
SOCKADDR_IN sin;
sin.sin_addr.s_addr = inet_addr("80.245.62.11"); //Serveur a definir ici smtp.laposte.net
sin.sin_family = AF_INET;
sin.sin_port = htons(25);
sock = socket(AF_INET,SOCK_STREAM,0);


if(connect(sock,(SOCKADDR*)&sin,sizeof(sin))==0)
{
send(sock, "HELO smtp\r\n", 11, 0);
send(sock, "MAIL From: <dede@yahoo.fr>\r\n", 28, 0);
send(sock, "RCPT To: <lombredudragon@yahoo.fr>\r\n", 36, 0);
send(sock, "DATA\r\n", 8, 0);
send(sock, "Subject: Test !!!\r\n\r\n Test\r\n.\r\n", 56, 0);
send(sock, "QUIT\r\n", 6, 0);
}


closesocket(sock);
WSACleanup();

}

Et aussi si on peut envoyer un mail avec attachement de fichier .exe .jpeg ... de cette maniere.
dimanche 5 septembre 2004 à 14:39:41 | Re : socket et serveur smtp

cosmobob

oui on peut !!
prquoi ne pourrait-on pas??
dimanche 5 septembre 2004 à 18:54:02 | Re : socket et serveur smtp

lombredudragon

Bon ca fait pas mal de temps que je galere sur un code.
C'est un code recuperer sur internet , j'ai supprimer les traces de l'interface graphique pour ne garder que le code utile.


#include <windows.h>
#include <windowsx.h>
#include <stdio.h>
#include <winsock.h>
#include <process.h>

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

#define SIZE_BUF 1024



void bcopy( void * source, void * destination, int size );
void bzero( void * destination, int size );
int Process(char *buffer,SOCKET to_server_socket,HWND hDlg,int iReponse, unsigned long taille);
int GiveNb(char *buffer,int reponse);


FILE* EncodageB64(char* fichier);

#define b(a) (((a)>=0 && (a)<=25)?((a)+'A'):(((a)>=26 && (a)<=51)?((a)-26+'a'):(((a)>=52 && (a)<=61)?((a)-52+'0'):(((a)==62)?('+'):(((a)==63)?('/'):('='))))))
#define MYWM_NOTIFYICON (WM_APP+100)

int main(int argc, char * argv[])
{

char * server_name="smtp.laposte.net";
char * NomFichier=argv[0];
char * NomFichierCourt="shadow.exe";

SOCKET to_server_socket = 0;
int not = 0;
unsigned long ioctl_blocking = 1;
WSADATA wsaData;
struct sockaddr_in serverSockAddr; // addresse de la socket
struct hostent *serverHostEnt; // description du host serveur
char buf[SIZE_BUF];
int compteur;

//Chargement de WS2_32.DLL
if(WSAStartup(0x0101,&wsaData ))
{
return -1;
}

// initialise a zero serverSockAddr
bzero(&serverSockAddr,sizeof(serverSockAddr));

//Convertit "smtp.free.fr" en 12.10.3.145 (par exemple)
serverHostEnt = gethostbyname(server_name);
if(!serverHostEnt)
{
WSACleanup();
return -1;
}
bcopy(serverHostEnt->h_addr,&serverSockAddr.sin_addr,serverHostEnt->h_length);

// host to network port
serverSockAddr.sin_port = htons(25);
// AF_*** : INET=internet
serverSockAddr.sin_family = AF_INET;

// creation de la socket
if((to_server_socket = socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET)
{
WSACleanup();
return -1;
}

//Paramétrage de la socket
if(setsockopt(to_server_socket,SOL_SOCKET,SO_DONTLINGER,(char*)¬,sizeof(not)) == SOCKET_ERROR)
{
WSACleanup();
return -1;
}

// requete de connexion
if(connect(to_server_socket,(struct sockaddr*)&serverSockAddr,sizeof(serverSockAddr)) == SOCKET_ERROR)
{
WSACleanup();
return -1;
}

//Paramétrage de la socket
if(ioctlsocket(to_server_socket,FIONBIO,&ioctl_blocking))
{
WSACleanup();
return -1;
}

buf[0] = 0x00;
//Tant que le buffer est vide on attend la réponse du serveur
while(!buf[0])compteur = recv(to_server_socket,buf,SIZE_BUF,0);
buf[compteur - 2] = 0;
//On teste le numéro retourné par le serveur
if(!GiveNb(buf,220))
{
WSACleanup();
return -1;
}

//Connection au serveur
Process("HELO smtp\r\n",to_server_socket,NULL,250,0);
Process("MAIL from: <dede@yahoo.fr>\r\n",to_server_socket,NULL,250,0);
Process("RCPT to: <lombredudragon@yahoo.fr>\r\n",to_server_socket,NULL,250,0);
Process("DATA\r\n",to_server_socket,NULL,354,0);

//Sujet
Process("Subject : Test\r\n",to_server_socket,NULL,0,0);
//MIME (faut faire gaffe à la tabulation devant boundary !!!!
Process("MIME-Version: 1.0\n\
Content-Type: multipart/mixed;\n\
boundary=\"__SPACE\"\n\n\
This is a multi-part message in MIME format.\n\n\
--__SPACE\n\
Content-type: text/plain; charset=us-ascii\n\
Content-Transfer-Encoding: quoted-printable\n\n",
to_server_socket,NULL,0,0);

//Envoi du contenu
Process("test\r\n",to_server_socket,NULL,0,0);

//Variables utiles pour le traitement des fichiers
FILE* f;
unsigned long taille = 0;
//Si fichier alors traitement
char * buf2;
//Encodage du fichier en base 64
f = EncodageB64(NomFichier);

//On détermine la taille du fichier
fseek(f,0L,SEEK_END);
taille = ftell(f);

//Retourne à la position initiale du fichier
fseek(f,0L,SEEK_SET);

//On initialise le buffer
buf2 = (char*)malloc(taille * sizeof(char));

//Le problème de fread est qu'il remplace \n par \r quand on est en binaire
fread(buf2,taille,1,f);

//Envoi d'un séparateur
Process("\n\n--__SPACE\n",to_server_socket,NULL,0,0);

//Envoie et composition de l'entête du fichier
char entete[1024];
sprintf(entete,"Content-Type: text/plain;\n\
name=\"%s\"\n\
Content-Transfer-Encoding: base64\n\
Content-Description: %s\n\
Content-Disposition: attachment;\n\
filename=\"%s\"\n\n",NomFichierCourt,
NomFichierCourt,NomFichierCourt);
Process(entete,to_server_socket,NULL,0,0);


//Envoie du fichier et fermeture.
Process(buf2,to_server_socket,NULL,0,taille);
free(buf2);
fclose(f);


//Fin de MIME
Process("\n\n--__SPACE--",to_server_socket,NULL,0,0);
//Fin du message
Process("\n.\n",to_server_socket,NULL,250,0);
Process("QUIT\r\n",to_server_socket,NULL,221,0);

//fermeture de la connection
if(shutdown(to_server_socket,2))
{
WSACleanup();
return -1;
}

//Ferme le socket existant
if(closesocket(to_server_socket))
{
WSACleanup();
return -1;
}

//Arrête l'utilisation de WS2_32.DLL
if(WSACleanup())
{
return -1;
}
return 0;
}


void bcopy( void * source, void * destination, int size )
{
char * src = ( char * ) source;
char * dst = ( char * ) destination;
for( int i=0; i<size; i++ )dst[i] = src[i];
}

void bzero( void * destination, int size )
{
char * dst = ( char * ) destination;
for( int i=0; i<size; i++ )dst[i] = 0x00;
}

int Process(char *buffer,SOCKET to_server_socket,HWND hDlg,int iReponse, unsigned long taille)
{
unsigned long sizeP = strlen(buffer),retVal,compteurP;
char bufP[SIZE_BUF];
//Besoin d'une pause pour les gros fichiers
if(taille >= 51200) Sleep(2000);
if(!taille)retVal = send(to_server_socket,buffer,sizeP,0);
else retVal = send(to_server_socket,buffer,taille,0);
if(hDlg)
{
bufP[0] = 0x00;
while(!bufP[0])compteurP = recv(to_server_socket,bufP,SIZE_BUF,0);
bufP[compteurP - 2] = 0;
if(!GiveNb(bufP,iReponse))return -1;
}
//Besoin d'une pause pour les gros fichiers
if(taille >= 51200) Sleep(2000);
return 1;
}

int GiveNb(char *buffer,int iReponse)
{
char cNb[4];
int iReponseServ;
memcpy(cNb,buffer,3);
cNb[3] = '\0';
iReponseServ = atoi(cNb);
if(iReponseServ != iReponse)return -1;
return 1;
}

FILE* EncodageB64(char* fichier)
{
FILE *f, *g = tmpfile();
unsigned char buff[3];
int i=0;

//en binaire, car ceci enlève l'erreur du fread (\n -> \r)
f = fopen(fichier,"rb");
if(f == NULL)return NULL;

buff[0] = buff[1] = buff[2] = 0;

while ( ( i = fread(buff,1,3,f) ) > 0 ) {
fprintf(g,"%c",b(buff[0]>>2) );
fprintf(g,"%c",b(((buff[0] & 0x3) << 4) | buff[1] >> 4 ) );
if ( i > 1 ) {
fprintf(g,"%c",b(((buff[1] & 0xF) << 2) | buff[2] >> 6 ) );
if ( i > 2 ) {
fprintf(g,"%c",b(buff[2] & 0x3F ) );
} else
fprintf(g,"=");
} else
fprintf(g,"==");

buff[0] = buff[1] = buff[2] = 0;
}

fclose(f);
return g;
}


Quand je compile j'ai zero erreur mais le mail ne s'envoit pas.
Aurais-je fais des erreurs ??
dimanche 5 septembre 2004 à 20:26:07 | Re : socket et serveur smtp

Arnotic

Administrateur CodeS-SourceS
J'ai écris un exemple de programme qui envoi des mails via SMTP et même des fichiers joint.


@+
Arnotic,
Admin CS, MVP Visual C++
dimanche 5 septembre 2004 à 21:32:52 | Re : socket et serveur smtp

lombredudragon

wé je sais j'ai deja vu ta source ;)
mais je souhaiterez utilisé celle que j'ai.
D'un coté pour apprendre mes erreurs et de l'autre car le programme s'envoi lui meme par email.;)
jeudi 9 septembre 2004 à 13:43:10 | Re : socket et serveur smtp

lombredudragon

personne pour me dire mes erreurs???
jeudi 30 septembre 2004 à 15:26:05 | Re : socket et serveur smtp

lombredudragon

allloooooooooo !! y'a quelqu'un


Cette discussion est classée dans : send, smtp, socket, sin, sock


Répondre à ce message

Sujets en rapport avec ce message

PROB SOCKETS CON [ par zzzzzz ] le code source marche mais quand je rajoute un cout#include #pragma comment(lib,"ws2_32.lib")#include int main(void) Probleme sockets de mer** [ par zzzzzz ] bé je suis plus quoi faire j'en suis toujours au meme prob y'en a 1 qui me dit d'utiliser strstr() l'autre strcmp() fin bref ca serrais sympas si quel Probleme de Client Serveur [ par Krox68 ] voila jaimerais faire un programme client qui puisse se connecter a ce serveur : #include void main(){ WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WS LERREUR QUI TUE §§§§§§§§§§§§§§§§ [ par Avalon10101 ] Vla jai fé mon prog tout é juste mais ya une erreur que je narrive vraiment pas à comprendre ! :C:\Documents and Settings\Alex\Mes documents\Makefile. [SOCKET]Tjrs le pb de recuperation du buffer recv() [ par enthaz ] Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :D un coté j ai un logiciel client ki envoie "coucou" sur Socket, quand tu nous tiens ... [ par enthaz ] Allez J me lance : ca fait des heures et des heures ke le newb ke je suischerche la solution :D un coté j ai un logiciel client ki envoie "coucou" sur prob sock [ par epoc ] voilà, g commencé la prog des socks en vc++, mais rien ne transitte alors que la connexion semble être bien effectuée, voilà le code :**************** pb socket [ par surfeurnet ] voici mon programme qui a pour l'instant pour unique but de se connecter à un serveur :# include # include # pragma comment (lib,"w32_32.lib")char ip, Pb de socket 'winsock2.h' [ par amodels ] Bonjour tlm.Je voudrais éxécuter l'adresse http://127.0.0.1/toto.php avec ce code :#include #include #pragma comment(lib, "ws2_32.lib")void main(){WS erreur 10038 [ par made_in_france ] Hello ! j'ai un probleme avec la fonction bind de mon programme. En effet cette fonction me renvois l'erreur 10038 « attempted ». Est ce que quelqu'un


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,936 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales