P.O.K Posté 18 Juin 2009 Posté 18 Juin 2009 Bonjour, j'ai créé une page permettant l'envoi automatique de mail à diverses personnes. La liste de ces personnes est disponible dans une base de données mais il arrive que certaines personnes y apparaissent plusieurs fois. Je voudrai que mon code contrôle si le mail a déjà été envoyé à une personne et si oui, que l'envoi ne se fasse pas. Voici ma page : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head> <title> </title></head><body bgcolor="dddddd" style="text-align:center"><font face="Arial, Helvetica, sans-serif"></font><table width="800px" bgcolor="#FFFFFF"><tr> <td align="center"> <img src="bannerNewInter.jpg"><br> <br> <font face="Arial, Helvetica, sans-serif"><strong></strong></font> </td></tr><tr> <td> <% on error resume next Mail = request.querystring("Mail") Mailtmp2 = split(Mail, ",") dateech = request.querystring("date_echeance") heureech = request.querystring("heure_echeance") x=0 set Mail = server.CreateObject("Persits.MailSender") %> <% tmpcount= ubound(Mailtmp2) %> <% do while x <= tmpcount tmpMail2 = Mailtmp2(x) %> <% set conn = Server.CreateObject("ADODB.Connection") ConnString = "driver={SQL Server}; server=XXXXXX;uid=XXXXXX; pwd=XXXXXX;database=XXXXXX" conn.Open connString SQL = "Select MailDM, MailExp, MdpExp from DM, PropositionTM, Experts where dm.noDM = PropositionTM.numdm and experts.NoExpert = PropositionTM.NumExpert and NumProposition=" & tmpMail2 set rs = conn.execute (SQL)%> <% do while rs.eof = false %> <% MailDM = rs("MailDM") %> <% MailExp = rs("MailExp") %> <% MdpExp = rs("MdpExp") %> <%if NumEtat <> 4 then Mail.resetall Mail.host = "mail.???.ch" Mail.From = "test_AT_??.com" Mail.addaddress MailExp Mail.Subject = "Sujet 1" msg = "test1" Mail.Body = msg Mail.send Mail.resetall Mail.host = "mail.???.ch" Mail.From = "test_AT_??.com" Mail.addaddress MailDM Mail.Subject = "Sujet 2" msg2 = "test2" Mail.Body = msg2 Mail.send%> <%end if%> <% RS.Movenext %> <% loop %> <% RS.Close %> <% conn.Close %> <% Set conn=nothing x=x+1%> <%loop%> <font face="Arial, Helvetica, sans-serif"> Les mails ont été envoyés. <br> <br> <a href="menu.asp">Retour</a> </font> <br><br> </td></tr></table></body></html> Pouvez-vous m'aider ? Merci beaucoup ;-)
Portekoi Posté 18 Juin 2009 Posté 18 Juin 2009 Bonjour, Pardon pour ma franchise mais ton code est un vrai cauchemar. Pourquoi créer une connexion à une base de données dans ta boucle? Pourquoi utiliser "on error resume next" si tu n'interceptes pas les erreurs? Pourquoi ne déclares tu pas tes variables? Pourquoi ouvres tu et fermes tu sans cesse les balises ASP? do while rs.eof = false peut devenir : Do while Not Rs.eof Les lignes : Mail.host = "mail.???.ch" Mail.From = "test_AT_??.com" ne sont pas à mettre dans une boucle mais en dehors, comme la connexion. Et pour répondre à ta question utilise une variable dans laquelle tu vas stocker les destinataires déjà traités. Ensuite, avant d'ajouter un destinataire, tu testes pour savoir si le nouveau desinataire n'est pas déjà dans ta variable. Bon courage Portekoi
P.O.K Posté 18 Juin 2009 Auteur Posté 18 Juin 2009 Salut, merci pour ta réponse. C'est vrai que mon code pourrait être mieux écrit, mais je débute en programmation et essaie de faire de mon mieux. J'ai besoin de la base de données pour récupérer les adresses mails ainsi que d'autres informations qui seront transmis dans les mails. Le ""on error resume next" est là car si par exemple il manque une adresse à quelqu'un le script ne s'arrête pas. Pour les : Mail.host = "mail.???.ch" Mail.From = "test_AT_??.com" je suis obligé de les laisser là étant donné qu'il y a des "Mail.resetall" non ? Ensuite pour ma question, je ne vois pas comment faire pour stocker tous les destinataires déjà traités... Pourrais-tu m'expliquer ? Merci beaucoup
Portekoi Posté 18 Juin 2009 Posté 18 Juin 2009 Re, 1 - C'est pas parce que tu débutes que tu dois programmer comme ça 2 - Mets ta connexion à la base de données tout au début de ton code et pas dans une boucle. 3 - Justement le "On Error Resume Next" sert à intercepter les erreurs. Dire que c'est pour "que le script ne s'arrête pas" est totalement faux. Exemple ici : http://www.laltruiste.com/document.php?url...r_vbscript.html A toi de gérer le fait qu'une personne n'a pas de mail par un simple test : if mail_destinataire <> "" Then'mon traitementend if 3 - Mail.Reset devrait être suffisant 4 - Dans ta boucle, tu stockes dans une variable la liste des mails déjà envoyés : 'Dans la boucleif instr("-" & destinataire, MailExp) = 0 Then'Traitement pour l'envoi du mailend if'puis, en dessousdestinataire = destinataire & "_" & MailExp Si tu pars avec de mauvaises bases, tu n'arriveras pas à faire se que tu veux dans un temps respectable Donc, mon conseil, reprends un peu les bases et documente toi un peu plus. Bye Portekoi
P.O.K Posté 18 Juin 2009 Auteur Posté 18 Juin 2009 Ca fonctione :-D Merci beaucoup pour la réponse et le conseil ;-)
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant