ENVOI MAIL SMTP, ATTACHEMENT [DEMANDE FORUM]

cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 19 févr. 2004 à 13:34
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012 - 27 janv. 2005 à 10:53
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/20569-envoi-mail-smtp-attachement-demande-forum

cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
27 janv. 2005 à 10:53
Si tu veux va voir mes dernières sources concernant l'envoi d'e-mail le code est complet.
piloudestetienne Messages postés 1 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 27 janvier 2005
27 janv. 2005 à 10:23
bonjour
Je suis en train de programmer un petit logiciel de mailing et j'utilise cette fonction que j'ai implemante ds une classe CMailAttach (donc un .cpp et un .h)
J'ai insere les lib.h precisee ci dessus et la librairie ws2_32.lib dans les settings

Qd je compile sans utiliser la classe, il n'y a pas de probleme. Mais je cree un objet qui appel ta fonction, j'ai l'erreur suivante:
Linking...
Australian mailingDlg.obj : error LNK2001: unresolved external symbol "public: int __thiscall CMailAttach::SendMail(char *,int,char *,char *,char *,char *,char *,bool,unsigned int,char *)" (?SendMail@CMailAttach@@QAEHPADH00000_NI0@Z)
Debug/Australian mailing.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

Est ce que j'est oublie un include ou une librairie...
Je n'est pas trouve ma reponse sur le net donc si tu pouvais me decoincer
En vous remerciant.

pilou
pcouderc Messages postés 2 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 5 janvier 2005
5 janv. 2005 à 10:51
pcouderc Messages postés 2 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 5 janvier 2005
5 janv. 2005 à 10:49
Pour une généralisation des envois de mails de type MIME, voir http://www.codeguru.com/Cpp/I-N/internet/email/comments.php/c6213/?thread=65964
gergalp Messages postés 70 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 mars 2007
1 déc. 2004 à 19:07
Pour ceux qui ont du mal a compiler a cause de tabela, il s'agit en fait des caracteres utilisés avec le base64:

char tabela[64] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'v', 'x', 'y', 'z', '0', '1', '2', '3',
'4', '5', '6', '7', '8', '9', '+', '/'};
spinta Messages postés 7 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 9 juin 2010
9 sept. 2004 à 11:39
J'ai les mêmes soucis que les autres :

- dasock n'est pas déclaré
- szRecv n'est pas déclaré
- SIZE_MSG_MAX n'est pas déclaré
etc....

Il doit manquer des déclarations....

Merci de donner un source compilable ou alors merci de donner un zip avec le projet complet.
victorcoasne Messages postés 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 7
10 août 2004 à 11:07
Je suis sous Dev-C++ il m'affiche des erreur de compilo :

Dans la fonction int SendData(char*,bool) :
- dasock n'est pas déclaré
- szRecv n'est pas déclaré
- SIZE_MSG_MAX n'est pas déclaré
Dans la fonction int SendMail (.....):
- dassin n'est pas déclaré
- byte_copy n'est pas déclaré
- base64_enc n'est pas déclaré
Dans la fonction byte_copy(--) // Bizarre c'est que l'erreur se trouve avant donc je passe le reste
albertoC Messages postés 20 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 2 juillet 2004
2 juil. 2004 à 12:21
pour plus d'infos aller voir :

http://www.salemioche.com/mime/mime_descr5.php

a+
alberto
Mephyston Messages postés 3 Date d'inscription mardi 28 janvier 2003 Statut Membre Dernière intervention 23 juin 2004
23 juin 2004 à 14:09
salut,
Je cherche aussi a utiliser ce code mais je ne sais tjs pas a quoi correspond ce tabela?

Merci
lescroel Messages postés 15 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 8 février 2005
16 mars 2004 à 11:19
Salut,

j'ai toujours des soucis avec des variables que je ne connais pas.

tabela ? Qu'est ce que c'est comme donnée (char, int) ???
Elle n'est déclarée nulle part dans le source.
Et SIZE_MSG_MAX, tu l'initialise à combien ?

J'arrive à envoyer des mails mais je n'ai pas la piece jointe.
Je pense que c'est à cause de tabela et que mon encodage mime n'est pas bon.

et dasock : où est il décalré et initialisé ?
et szRecv : où est il décalré et initialisé ?

Merci d'avance pour tes réponses car moi j'ai un soucis.
cs_coins Messages postés 12 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 20 avril 2004
15 mars 2004 à 17:58
excuse-moi! :-)

le smtp de nerim.net qui m'a renvoye le résultat comme
451. time out (quand j'ai envoie mail avec le fichier attachement d'image)
si, j'envoie mail avec fichier attachement .txt.
il me renvoie l'inofrmation comme 250 .ok

je pense que le problème n'est pas dans le serveur smtp , plustot ,
dans mon code, c'est pour cette raison, je t'ai envoyé mon fonction
pour tu peux regarder.

Par contre, ton programme marche bien avec le fichier attachement ?
parce que , si ton programme marche bien avec attachement d'image, je vais corriger la mienne .(sur le niveau syntaxe)
comment tu pense?
en tout cas, merci beaucoup qu tu peux m'aider!:-)
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
15 mars 2004 à 17:33
cela ne m'aide pas ! je t'ai demandé la session telnet!
cs_coins Messages postés 12 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 20 avril 2004
15 mars 2004 à 17:13
Salut!
Je t'envoie mon fonction de send Mail avec attachement,
et ce matin, j'ai essayé de changer le code comme le tiens,
mais, marche pas non plus. :-(

DWORD CSMTPPOPDB::mailsend(
char *server_smtp, //nom du server SMTP
char *mail_envoyeur, //mail de l'envoyeur
char *mail_destinataire, //mail du destinataire
char *pseudo, //pseudo de l'envoyeur
char *sujet_mail, //sujet du mail
char *texte_mail, //texte du mail
char *chemin_fichier,
int niveau,
bool htmlon) //chemin du fichier a attacher
{
SOCKET sock; //declaration de la socket
struct sockaddr_in SockAddr; //adresse de la socket
struct hostent *ServerHost; //description de l'host du server
int not=0;
char *type_fichier, *nom_fichier;
long hostAddr;
DWORD problem=0;
//recuperation infos fichier :
if(chemin_fichier!=NULL)
{
nom_fichier=seek_name(chemin_fichier);
type_fichier=verif_extens(chemin_fichier);
cout<<"ok\n";
}
cout<<type_fichier<<"\n";
cout<<nom_fichier<<"coucou"<<"\n";
cout<<chemin_fichier<<"\n";
/**********************************************/
//intialisation winsock
WSADATA wsaData;
if( int err = WSAStartup( 0x0101, &wsaData ) )
{
cerr << "WSAStartup failed... Error: " << err << endl;
exit( -1 );
}

// addr du serveur

bzero( &SockAddr, sizeof(SockAddr ) );
// converti l'adresse ip 9.100.1.1 en entier long
hostAddr = inet_addr( server_smtp );

if( ( long ) hostAddr != ( long ) -1 )
bcopy( &hostAddr, &SockAddr.sin_addr, sizeof( hostAddr ) );
else // si on a donne un nom
{
ServerHost = gethostbyname( server_smtp );
if ( ServerHost == NULL )
{
cerr << "ca marche pas " << endl;
exit( 0 );
}
bcopy( ServerHost->h_addr, &SockAddr.sin_addr,ServerHost->h_length );
}

SockAddr.sin_port = htons( 25 ); // host to network port
SockAddr.sin_family = AF_INET; // AF_*** : INET=internet
// creation de la socket

sock = socket( AF_INET, SOCK_STREAM, 0 );
if ( sock < 0)
{
cerr << " creation socket client marche pas" << endl;
exit( 0 );
}

setsockopt(sock, SOL_SOCKET, SO_DONTLINGER, (char *) ¬,
sizeof(not));


/*%%%%%%%%%%%%%%%%%%%%%%%%%%*/
if((connect(sock,(sockaddr*)&SockAddr,sizeof(SockAddr)))==SOCKET_ERROR)
{ cout<<"defais!\n"; return ERR_SOCK_CONNECT; }
cout<<"connect!";
u_long ioctl_blocking=1;
ioctlsocket(sock,FIONBIO,&ioctl_blocking);

//envoi des requetes au server smtp :
char Buf[1024+1]; //4k --> taille max tampon mail
sprintf(Buf,"HELO %s\r\n\0",pseudo);
SendData(Buf,true,sock);
sprintf(Buf,"MAIL FROM:<%s> \n\0",mail_envoyeur);
SendData(Buf,true,sock);
sprintf(Buf,"RCPT TO: <%s>\n\0",mail_destinataire);
SendData(Buf,true,sock);
SendData("DATA \n",true,sock);
strcpy(Buf,"");
sprintf(Buf,"From:%s<%s>\r\n\0",pseudo, mail_envoyeur);
SendData(Buf,false,sock);
sprintf(Buf,"To: <%s>\r\n\0",mail_destinataire);
SendData(Buf,false,sock);
sprintf(Buf,"Subject: %s\r\0", sujet_mail);
SendData(Buf,false,sock);
sprintf(Buf,"Date:%s\n\0",Horloge2());
SendData(Buf,false,sock);
sprintf(Buf, "X-Priority: %d\n",niveau);
SendData(Buf,false,sock);


if(chemin_fichier!=NULL) //donc, si il y a un fichier a attacher
{
//complete l'header du mail :
strcpy(Buf,"MIME-Version: 1.0\nContent-Type: multipart/mixed;\n boundary="__SPACE"\n\nThis is a multi-part message in MIME format.\n\n--__SPACE\nContent-Type: text/plain; charset="us-ascii"\nContent-Transfer-Encoding: quoted-printable\n\n");
//HTML ou pas?
SendData(Buf,false,sock);
sprintf(Buf,"%s",texte_mail);
SendData(Buf,false,sock);

/*---------------------fichier encode:--------------------------*/

FILE *infile;
infile=EncodageB64(chemin_fichier);
fseek(infile,0L,SEEK_END);
unsigned long taille = 0;

taille=ftell(infile);

/*FILE *infile=fopen(chemin_fichier,"rb");
FILE *outfile=fopen("temporai","w");
if(!infile)
cout<<"can not open the file\n";
base64_enc(infile, outfile);
infile=fopen("temporai","r");
fseek(infile,0L,SEEK_END);
unsigned long taille=0;
taille=ftell(infile);
fseek(infile,0L,SEEK_SET);
*/
/*
FILE *infile=fopen(chemin_fichier,"rb");
FILE *outfile=fopen("temporai","w");
if(!infile)
cout<<"can not open the file\n";
base64_enc(infile, outfile);
fseek(infile,0L,SEEK_END);
unsigned long taille=0;
taille=ftell(infile);
fseek(infile,0L,SEEK_SET);

fclose(infile); fclose(outfile);

infile=fopen("temporai","r");

//Retourne à la position initiale du fichier
*/
fseek(infile,0L,SEEK_SET);
//On initialise le buffer
// char *buf_lecture=new char[1024];

char *buf_lecture = (char*)malloc(taille * sizeof(char));
memset(buf_lecture,0,sizeof(buf_lecture));
while(!feof(infile)) //on lit le fichier et le mettre dans le buffe
{
fread(buf_lecture,taille,1,infile);

}
fclose(infile);
strcpy(Buf,"\n\n--__SPACE\n");
SendData(Buf,false,sock);

//entete de syntaxe de smtp
char entete[1024];
sprintf(entete,"Content-Type: text/plain;\n name="%s"\nContent-Transfer-Encoding: base64\nContent-Description: %s\nContent-Disposition: attachment;\n filename=%s\n",
type_fichier, nom_fichier, nom_fichier);
SendData(entete,false,sock);
// memset(Buf,0,sizeof(Buf));
//sprintf(Buf,buf_lecture);
SendData(buf_lecture,false,sock);

//SendData(Buf,false,sock);
//memset(Buf,0,sizeof(Buf));
strcpy(Buf,"\n\n--__SPACE--");
SendData(Buf,false,sock);
strcpy(Buf,"\r\n.\r\n");
SendData(Buf,true,sock);
delete buf_lecture;

}
else //pas de fichier a joindre
{
sprintf(Buf,"\r\n%s\r\n.\r\n",texte_mail);
}
SendData("QUIT \r\n",true,sock);
//fermeture connection
shutdown(sock,2);
closesocket(sock);

//kill le fichier encode si il y'en a:

return problem;
}

Merci!
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
14 mars 2004 à 11:30
tu pourrais me donner les codes de retour que nerim de retourne ? toute la session en fait stp ?
cs_coins Messages postés 12 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 20 avril 2004
13 mars 2004 à 19:47
salut, merci à toi que tu m'a répondu si rapidement,

c'est bien bizzare , je fais le fonction pareille que toi, c'est :

SendMailAttach("smtp.nerim.net"/*serveur de smtp*/,
25,
"nerim.net",
"*****@***",
"*****0***",
3,
false, //c'est à dire ceci n'est pas une mail html
"C:\\image.jpg");
au début, je pense que la problème qui vient de la syntaxe de smtp,
et ensuite, j'ai verifié la syntaxe de smtp , mais, touts sont correct !

et dans la console , il affiche touts les commandes jusqu'à le commande quit, il a bloqué.

jusqu'à maintenent , j'ai pas encore trouver la solution,
et je te remercie que tu peux m'aider!

J'attends ton réponse!
bye!
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
12 mars 2004 à 16:40
il suffit d'indiquer vers un fichier image et ca fonctionne comme indiqué dans l'exemple. peux-tu me donner ton appel à la fonction ?
cs_coins Messages postés 12 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 20 avril 2004
12 mars 2004 à 16:18
Bonjour, Arnotic,
J'ai une question , je pense que tu peut m'aider,
en fect, j'ai reussi , envoyer les e-mail avec les attachement des fichiers txt, ton code ma beaucoup aider!
mais, j'ai pas reussi l"attachement de fichier image , t'en a les solutions?
Merci d'avance!
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
11 mars 2004 à 20:52
tout simplement car ces derniers jour ne n'étais pas mais à Amsterdam ou je me connectais que très peu à internet et donc je pouvais tout gérer !

concernant le programme la réponse est non pour une raison. c'est que la source complète sera dans un article qui sera prochainement diffusé sur DA avec son programme.
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
11 mars 2004 à 20:39
pour etre franc, j'ai un peu de mal a me servir de ta source, tu voudras pas faire un petit programme d'exemple, rapidement?
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
11 mars 2004 à 19:32
merci, mais pourquoi ne pas le faire, sans que l'on fasse des remarques?
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
11 mars 2004 à 19:27
voici les headers :

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include
#include <winsock2.h>

pour les difficulté, explique ton problème.
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
11 mars 2004 à 19:01
vous pourriez au moins repondre au question que l'on vous pose !!!
cs_coins Messages postés 12 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 20 avril 2004
7 mars 2004 à 17:01
une question, j'ai executé ton code sous la visual c++, mais, j'ai du difficulté , tu peux m'expliquer comment ca marche
Merci avancé !
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
29 févr. 2004 à 16:33
juste une petite question, quels sont les headers necessaire pour compiler ce bout de code?
lescroel Messages postés 15 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 8 février 2005
26 févr. 2004 à 16:40
Et tabela ? Qu'est ce que c'est comme donnée (char, int) ???
Elle n'est déclarée nulle part dans le source.
Et SIZE_MSG_MAX, tu l'initialise à combien ?

J'arrive à envoyer des mails mais je n'ai pas la piece jointe.
Je pense que c'est à cause de tabela et que mon encodage mime n'est pas bon.

Merci d'avance pour tes réponses car moi j'ai un soucis.
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
26 févr. 2004 à 16:29
par contre le :
\r\n.\r\n
est important puisque c'est lui qui permet de clore la connection au serveur. si tu veux plus d'infos regarde la rfc du smtp.
lescroel Messages postés 15 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 8 février 2005
26 févr. 2004 à 16:07
Quand je mets ces deux lignes, le mail ne passe pas

/* Fin du message */
strcpy(szBuffer, "\r\n\r\n--bb32f0a41b7155b18982fa256e5974aba--\r\n.\r\n");
if ( SendData(szBuffer, true) == 0 ) { closesocket(dasock); return 0; }

Sinon il passe
lescroel Messages postés 15 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 8 février 2005
26 févr. 2004 à 14:56
J'ai essayé de compiler cette source mais avec quelques difficultés :

A quoi correspond tabela ?
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
19 févr. 2004 à 13:34
j'ai pas encore regardé ta source, mais justement j'en cherchais une pour envoyer un mail... je regarderais ce soir...
Rejoignez-nous