ENVOI MAILS AVEC PROTOCOLE SMTP

ketchupy45 Messages postés 101 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 13 décembre 2007 - 10 janv. 2006 à 11:37
cs_Darksheep Messages postés 69 Date d'inscription samedi 4 novembre 2000 Statut Membre Dernière intervention 15 septembre 2009 - 2 sept. 2007 à 11:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35490-envoi-mails-avec-protocole-smtp

cs_Darksheep Messages postés 69 Date d'inscription samedi 4 novembre 2000 Statut Membre Dernière intervention 15 septembre 2009
2 sept. 2007 à 11:37
oK je prend note :)
Thx for your answer
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
31 août 2007 à 23:10
Ce n'est pas moi qui le dit mais msdn.

Pas si bête que ça d'ailleurs. Sans équivoque, c'est dit ici:
http://msdn2.microsoft.com/en-us/library/ms742213.aspx

"An application must call the WSACleanup function for every successful time the WSAStartup function is called. This means, for example, that if an application calls WSAStartup three times, it must call WSACleanup three times. The first two calls to WSACleanup do nothing except decrement an internal counter; the final WSACleanup call for the task does all necessary resource deallocation for the task."

Si on suit leur logique, il est possible qu'un prog utilise deux librairies faisant chacune appel aux sockets. Par exemple utilisant une lib pour gérer tout ce qui est UDP et l'autre pour TCP. Selon les brillantes explications de msdn si chaque lib appelle wsastartup elle doit aussi faire cleanup. CQFD. Et si en plus le prog en question fais son wsastartup, ça fait trois.

Relire ce bordel me rappelle à quel point je hais l'implémentation des socket sur win32. Elle est tout sauf conforme à la spécification établie et correctement implémentée sur plus de 20 systèmes d'exploitations sauf windoze.
cs_Darksheep Messages postés 69 Date d'inscription samedi 4 novembre 2000 Statut Membre Dernière intervention 15 septembre 2009
31 août 2007 à 20:55
Belle source :)
juste un truc katsankat :
si comme tu dit le role de WSAStartup est de vérifier la version de la dll,(Ce qui est vrai )
et qu'on doit l'appeller une seule fois au début du programme,
Alors appeller autant de fois WSACleanup() ne revient il pas à ne l'appeller qu'une fois à la fin ?
dans ce cas pourquoi spécifier qu'on doit appeller autant de fois WSACleanup que WSAStartup si on ne l'appelle qu'une fois ?C'est bête XD
KissyFroth Messages postés 38 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 7 avril 2007
22 avril 2006 à 16:39
Bon normalement la plupart des erreurs sont résolues, le programme ne gère pas l'envoi à plusieurs utilisateurs et je n'ai aucune idée du pourquoi, lors de certains envois, la taille des pièces jointes apparait à 0 octets. (mais bon tant que dans le contenu elles sont intactes c'est le principal non ?)
Biroto Messages postés 11 Date d'inscription jeudi 10 octobre 2002 Statut Membre Dernière intervention 15 avril 2006
15 avril 2006 à 13:46
oula dsl comme je disais jai la tete ds le cul lol
jai dit nimporte quoi
mais essayes de mettre
while( !buf[0] )
int yeah = recv( to_server_socket, buf, 1024, 0 );
buf[yeah]=0
enfin ma remarque nest surement pas tres pertinente vu que j'ai pas lu la suite du code
Biroto Messages postés 11 Date d'inscription jeudi 10 octobre 2002 Statut Membre Dernière intervention 15 avril 2006
15 avril 2006 à 13:43
je n'ai pas eu le courage de lire tout ton code, je viens juste de me réveiller jai la tete ds le cul :p
mais j'ai vu que tu parlais du recv donc je suis allé voir
A mon avis la avec ce que ta mi tu ne sors jamais de la boucle while( !buf[0] )
essayes de remplacer
while( !buf[0] )
int yeah = recv( to_server_socket, buf, 1024, 0 );

par

while( !buf[0] )
{
int yeah = recv( to_server_socket, buf, 1024, 0 );
buf[yeah]=0;
}

salut
ketchupy45 Messages postés 101 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 13 décembre 2007 1
20 mars 2006 à 18:34
Bonjour, est ce normal que lors de l'envoi de pieces jointes la taille de celle ci apparait a 0 Ko à la réception?
Est ce que l'envoi a plusieurs utilisateurs est géré?
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
11 févr. 2006 à 12:27
PS : Je n'est pas voter :) je met 9/10
wxccxw Messages postés 755 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 30 janvier 2011
8 févr. 2006 à 12:44
moi j'aprouve SMTP.WANADOO.FR 25
KissyFroth Messages postés 38 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 7 avril 2007
11 janv. 2006 à 01:26
Au cas ou vous ne l'auriez pas remarqué voici une petite liste de serveurs smtp
que j'ai rajouté à la fin de mon prog

Les serveurs marqués de * sont testés et approuvés pour mon prog.

///////////////////////////////////////////
// Serveurs SMTP //

// smtp.laposte.net
// smtp.ifrance.com
// smtp.mail.yahoo.fr
// * smtp.neuf.fr
// * smtp.cegetel.net
// mail.club-internet.fr
// smtp.wanadoo.fr
KissyFroth Messages postés 38 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 7 avril 2007
10 janv. 2006 à 17:10
Tu as certainement raison au niveau de la programmation et j'ai corrigé mon programme
comme tu me le conseillais. (en fait je ne connaissais pas le role de WSAStartup : maintenant
je saurais)
Cependant, comme il fallait s'y attendre le bug ne vient pas de là.
En fait le programme plante quand il se produit une erreur lors de l'envoi. Je soupconne que
ca vient de la fonction "recv" qui plante. J'ai deja essayé d'arreter la boucle d'envoi lorsqu'une
reponse indiquait une erreur mais ca n'a rien fait.Donc l'erreur se produit dans la fonction "Process".
Mais ou ?
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
10 janv. 2006 à 16:33
Le rôle de WSAStartup() est de vérifier la version de la dll, se fait une seule fois au début du programme.
Aussi -toujours spécifique à win32- la fonction WSAcleanup libère la dll: msdn dit qu'on doit l' appeler pour libérer les ressources de l' application. msdn dit aussi qu'on doit appeler wsacleanup autant de fois qu'on a appelé wsastartup, ton bug pourrait venir de là -sans confirmation de ma part.
Tu peux placer les deux dans ton point d'entrée:

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE a, PSTR b, int v)
{
if( int err = WSAStartup( 0x0202, &wsaData ) ) //et pas 0x0101 puisque ws2_32
{
MessageBox (NULL, TEXT ("dll winsock 2 non trouvée"), NULL, NULL);
return 0;
}
DialogBoxParam(hinst, (LPCTSTR)PAGE, 0, AppDlgProc, 0);
WSACleanup();
return 0;
}
KissyFroth Messages postés 38 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 7 avril 2007
10 janv. 2006 à 12:31
Voilà c'est corrigé. J'en profite pour apporter 2 petites précisions : j'ai fait cette source avec VC++ 6 et N'OUBLIEZ PAS D'INCLURE ws2_32.lib dans PROJECT->SETTINGS->LINK->Objects/Library Modules
sinon la compilation ne marchera pas.
ketchupy45 Messages postés 101 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 13 décembre 2007 1
10 janv. 2006 à 11:37
Salut Il serait bien que tu mette le zip avec tes fichiers de codes.
Rejoignez-nous