jerem3000
Messages postés52Date d'inscriptionjeudi 23 avril 2009StatutMembreDernière intervention 7 décembre 2011
-
21 août 2009 à 13:07
nicotwo
Messages postés34Date d'inscriptionsamedi 14 juin 2008StatutMembreDernière intervention 5 février 2010
-
21 août 2009 à 13:38
Bonjour
Je crée un programme qui permet d'envoyer par email le contenue d'un fichier .txt , il devrait normalement marche car il n'y a pas d'erreur a la compillation mais j'ai une erreur...
"Exception non gérée à 0x6893f693 (msvcr90d.dll) dans test email.exe*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000."
Je ne comprend pas trop de quoi cela peut venir, j'ai beaucoup chercher mais rien trouver.
J'espére étre dans la bonne parti du forum.
je vous marque mon code :
#define TAILLE_MAX 1000 // Tableau de taille 1000
#include <winsock.h>
#include
#include <string>
#include <stdlib.h>
#include <windows.h>
#include <stdio.h>
#include <cstdio>
#include <sstream>
#include <fstream>
#pragma comment(lib,"ws2_32.lib")
SOCKET to_server_socket = 0;
char * server_name;
int port = 25;
char destinataire[120] = "RCPT To: <";
char sender[120] = "MAIL From: <";
char * exp;
char * dest;
char * sujet;
char * message;
char buffer[15];
char body[1100] = "Subject: ";
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;
}
void Process( char * buffer )
{
Sleep( 1000 );
int size = strlen( buffer );
int retVal = send( to_server_socket, buffer, size, 0 );
char buf[ 1024 ];
buf[0] = 0x00;
while( !buf[0] )
int yeah = recv( to_server_socket, buf, 1024, 0 );
}
int main( int argc, char *argv[], char * )
{
std::string contenue;
FILE* fichier = NULL;
char chaine[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
fichier = fopen("C:\\readme.txt", "r");
if (fichier != NULL)
{
fgets(chaine, TAILLE_MAX, fichier); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
contenue += chaine;
printf("%s", chaine); // On affiche la chaîne
fclose(fichier);
}
const char *CstStr2 = contenue.c_str ();
if (strcmp(CstStr2,buffer) == 0) {
exit( -1 );
}
int not = 0;
unsigned long ioctl_blocking = 1;
/*cout<<"Entrez le nom du serveur smtp ou son ip\n";
cin>>server_name;
cout<<"Entrez l'adresse email de l'expediteur\n";
cin>>exp;
cout<<"\nEntrez l'adresse email du destinataire\n";
cin>>dest;
cout<<"\nEntrez le sujet du mail\n";
cin>>sujet;
cout<<"\nEntrez votre message\n";
cin>>message;*/
server_name = "smtp.orange.fr";
exp = "cannabis31@orange.fr";
dest = "cannabis31@orange.fr";
sujet = "le sujet";
strcat(sender,exp);
strcat(sender,">\r\n");
strcat(destinataire,dest);
strcat(destinataire,">\r\n");
strcat(body,sujet);
strcat(body," \r\n\r\n ");
strcat(body,message);
strcat(body," \r\n.\r\n");
WSADATA wsaData;
if( int err = WSAStartup( 0x0101, &wsaData ) )
{
exit( -1 );
}
struct sockaddr_in serverSockAddr; // addresse de la socket
struct hostent * serverHostEnt; // description du host serveur
long hostAddr; // addr du serveur
bzero( &serverSockAddr, sizeof( serverSockAddr ) ); // initialise a zero serverSockAddr
// converti l'adresse ip 9.100.1.1 en entier long
hostAddr = inet_addr( server_name );
if( ( long ) hostAddr != ( long ) -1 )
bcopy( &hostAddr, &serverSockAddr.sin_addr, sizeof( hostAddr ) );
else // si on a donne un nom
{
serverHostEnt = gethostbyname( server_name );
if ( serverHostEnt == NULL )
{
exit( 0 );
}
bcopy( serverHostEnt->h_addr, &serverSockAddr.sin_addr, serverHostEnt->h_length );
}
serverSockAddr.sin_port = htons( port ); // host to network port
serverSockAddr.sin_family = AF_INET; // AF_*** : INET=internet
// creation de la socket
to_server_socket = socket( AF_INET, SOCK_STREAM, 0 );
if ( to_server_socket < 0)
{
exit( 0 );
}
setsockopt(to_server_socket, SOL_SOCKET, SO_DONTLINGER, (char *) ¬, sizeof(not));
// requete de connexion
if( connect( to_server_socket, ( struct sockaddr * ) &serverSockAddr,
sizeof( serverSockAddr ) ) < 0 )
{
exit( 0 );
}
ioctlsocket ( to_server_socket, FIONBIO, &ioctl_blocking );
char buf[ 1024 ];
buf[0] = 0x00;
while( !buf[0] )
int yeah = recv( to_server_socket, buf, 1024, 0 );
Process( "EHLO Toto\r\n" );
Process( sender ); // mail de l'expediteur
Process( destinataire ); // mail du destinataire
Process( "DATA\r\n" );
Process( body );
Process( "QUIT\r\n" );
/* fermeture de la connection */
shutdown( to_server_socket, 2 );
return( closesocket( to_server_socket ) );
}
nicotwo
Messages postés34Date d'inscriptionsamedi 14 juin 2008StatutMembreDernière intervention 5 février 2010 21 août 2009 à 13:30
J'ai localisé le problème : ligne 109 : tu utilise le pointeur "message" qui pointe vers une chaîne alors que tu ne l'as pas inutilisée : message vaut NULL, d'où l'erreur. Il vaut que tu mettes dans message le contenu de ton fichier (qui est représenté par la string "contenue".
nicotwo
Messages postés34Date d'inscriptionsamedi 14 juin 2008StatutMembreDernière intervention 5 février 2010 21 août 2009 à 13:14
Bonjour,
Ce genre d'erreur se produit lorsque tu n'as pas initialisé un pointeur et que essaie de lire l'adresse vers laquelle il pointe. Pour faire simple, il faut chercher un endroit où tu utilises un pointeur nul.
P.S. : je n'ai testé le code, je vais voir d'où viens exactement le problème
jerem3000
Messages postés52Date d'inscriptionjeudi 23 avril 2009StatutMembreDernière intervention 7 décembre 2011 21 août 2009 à 13:30
j'ai ce problème depuis que j'ai mit le code qui envoie le contenue du fichier readme.txt dans l'anciéne version quand je marquer directement le message cela marcher trés bien
donc je pense que le problème viens de la:
std::string contenue;
FILE* fichier = NULL;
char chaine[TAILLE_MAX] = ""; // Chaîne vide de taille TAILLE_MAX
fichier = fopen("C:\\readme.txt", "r");
if (fichier != NULL)
{
fgets(chaine, TAILLE_MAX, fichier); // On lit maximum TAILLE_MAX caractères du fichier, on stocke le tout dans "chaine"
contenue += chaine;
printf("%s", chaine); // On affiche la chaîne
fclose(fichier);
}
const char *CstStr2 = contenue.c_str ();
if (strcmp(CstStr2,buffer) == 0) {
exit( -1 );
}
int not = 0;
unsigned long ioctl_blocking = 1;
Mais il n'y a pas de pointeur NULL donc je ne comprend.
Je suppose que l'erreur et toute bête et je m'en excuse d'avance je débute cela est mon premier programme