Webmaster Hub: ASP : Contrôler si un mail n'a pas été transmis plusieurs fois à une même adresse - Webmaster Hub

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

ASP : Contrôler si un mail n'a pas été transmis plusieurs fois à une même adresse Noter : -----

#1 L'utilisateur est hors-ligne   P.O.K 

  • Groupe : Actif
  • Messages : 46
  • Inscrit(e) : 18-septembre 08

Posté 18 juin 2009 - 09:37

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>&nbsp;</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 ;-)
0

#2 L'utilisateur est hors-ligne   Portekoi 

  • Calimérosateur / Dictationneur
  • Groupe : Admin
  • Messages : 3 647
  • Inscrit(e) : 12-janvier 05
  • Genre:Homme
  • Localisation:Meaux
  • Société:CGD

Posté 18 juin 2009 - 10:30

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
0

#3 L'utilisateur est hors-ligne   P.O.K 

  • Groupe : Actif
  • Messages : 46
  • Inscrit(e) : 18-septembre 08

Posté 18 juin 2009 - 12:19

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

#4 L'utilisateur est hors-ligne   Portekoi 

  • Calimérosateur / Dictationneur
  • Groupe : Admin
  • Messages : 3 647
  • Inscrit(e) : 12-janvier 05
  • Genre:Homme
  • Localisation:Meaux
  • Société:CGD

Posté 18 juin 2009 - 12:32

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
0

#5 L'utilisateur est hors-ligne   P.O.K 

  • Groupe : Actif
  • Messages : 46
  • Inscrit(e) : 18-septembre 08

Posté 18 juin 2009 - 13:29

Ca fonctione :-D


Merci beaucoup pour la réponse et le conseil ;-)
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)