Aller au contenu

Sujets conseillés

Posté

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 ;-)

Posté

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

Posté

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 ;)

Posté

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 traitement
end 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 boucle
if instr("-" & destinataire, MailExp) = 0 Then
'Traitement pour l'envoi du mail

end if
'puis, en dessous

destinataire = 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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...