Avatar billede axkris Nybegynder
23. februar 2005 - 16:47 Der er 3 kommentarer og
1 løsning

Fjerne dobbeltgængere i submittet e-mail-adresser

Hej alle

Jeg har en formular med et textarea, hvor mine brugere kan indskrive en eller flere e-mail-adresser, som der skal sendes e-mail til. Og så har jeg et asp-script, som modtager de submittede e-mail-adresser og sende en besked til dem.

Jeg skal blot have jeres hjælpe til at få mig en asp-funktion, som sorterer de submittede e-mail-adresser og fjerner dobbeltgængere.

Submittet:
mig@e-mail.dk
mig@e-mail.dk
mig@e-mail.dk
dig@e-mail.dk
mig@e-mail.dk
os@e-mail.dk

Resultat:
mig@e-mail.dk
dig@e-mail.dk
os@e-mail.dk

Kan du hjælpe?

Blot til orientering har jeg allerede en funktion, som checker om e-mail-adresser er gyldige. Så en sådan behøver jeg ikke.
Avatar billede eagleeye Praktikant
23. februar 2005 - 17:08 #1
Ja du kan lave i stil med det nu ved jeg ikke helt hvad der adskiller en email adresse men hvis det er eks return (vbCrLF) så kan det gøres sådan her, andre skille tegn kan naturligvis også bruges. Her det lagt i en function:


function removeDuplicates(str)
dim arrAlle, i, tmp
arrAlle = Split(str,vbCrLf)
tmp=","
for i = 0 to ubound(arrAlle)
  if instr(1,tmp,","&arrAlle(i)&",",1)=0 then tmp=tmp & arrAlle(i) & ","
next
if len(tmp)>1 then tmp = mid(tmp,2,len(tmp)-2)
removeDuplicates = replace(tmp,",",vbCrLF)
end function


og så kalde det sådan her:

'En test streng med email adresser
emails = "mig@e-mail.dk" & vbCrLF & "mig@e-mail.dk" & vbCrLF & "mig@e-mail.dk" & vbCrLf & "dig@e-mail.dk" & vbCrLF & "mig@e-mail.dk"

emails = removeDuplicates(emails)
response.write replace(emails,vbCrLf,"<br>")
Avatar billede axkris Nybegynder
23. februar 2005 - 17:40 #2
Omkring 50% af gengangerne.... går igen ;)

Så det virker kun 50%. Noget som jeg gør forkert?

<%

Server.ScriptTimeout = 10000000
On Error Resume Next

Dim V_ValiderEmail, V_Snabler, V_UgyldigeDomaener, V_Domaene, V_GyldigeEndelser, V_GyldigEndelse, V_Endelse, V_Ekskluder, V_i, V_Status

Function Valider(V_ValiderEmail)

    Valider            = True
    V_ValiderEmail    = LCase(V_ValiderEmail)
   
    ' (1) Check laengde '-----------------------------------------------------------------------
   
    If Len(V_ValiderEmail) < 5 Then
        Valider    = False
        V_Status    = "E-mail adressen er for kort."
        Exit Function
    End If

    ' (2) Skal indeholde @ '--------------------------------------------------------------------
   
    If InStr(V_ValiderEmail,"@") = 0 Then
        Valider    = False
        V_Status    = "Der mangler et ""@"" i e-mail adressen."
        Exit Function
    End If

    ' (3) Undgaa "@." og ".@" '-----------------------------------------------------------------
   
    If ((InStr(V_ValiderEmail,"@.") <> 0) OR (InStr(V_ValiderEmail,".@") <> 0)) Then
        Valider    = False
        V_Status    = "Der må ikke være et punktum lige op af et ""@"" i e-mail adressen."
        Exit Function
    End If

    ' (4) Check om der er noget foran @ '-------------------------------------------------------
   
    If Len(Left(V_ValiderEmail,InStr(V_ValiderEmail,"@") - 1)) = 0 Then
        Valider    = False
        V_Status    = "Der mangler noget foran ""@"" i e-mail adressen."
        Exit Function
    End If

    ' (5) Minimum 1 "." '-----------------------------------------------------------------------

    If InStr(V_ValiderEmail,".") = 0 Then
        Valider    = False
        V_Status    = "En e-mail adresse indeholder mindst eet punktum."
        Exit Function
    End If

    ' (6) Max 3 tegn efter sidste "." '---------------------------------------------------------

    If (Len(V_ValiderEmail) - InStrRev(V_ValiderEmail,".") > 4) Then
        Valider    = False
        V_Status    = "Der er for mange tegn efter sidste punktum i e-mail adressen."
        Exit Function
    End If

    ' (7) Undgaa ".." '-------------------------------------------------------------------------

    If InStr(V_ValiderEmail,"..") <> 0 Then
        Valider    = False
        V_Status    = "Der mŒ ikke være to punktummer lige op af hinanden i e-mail adressen."
        Exit Function
    End If

    ' (8) Min 2 tegn efter sidste "." '---------------------------------------------------------

    If (Len(V_ValiderEmail) - InStrRev(V_ValiderEmail,".") < 2) Then
        Valider    = False
        V_Status    = "Der skal være mindst to tegn efter sidste punktum i e-mail adressen."
        Exit Function
    End If

    ' (9) Ingen "_" efter "@" '-----------------------------------------------------------------

    If ((InStr(V_ValiderEmail,"_") <> 0) AND (InStrRev(V_ValiderEmail,"_") > InStrRev(V_ValiderEmail,"@"))) Then
        Valider    = False
        V_Status    = "Der må ikke være en underscore (_) efter ""@""."
        Exit Function
    End If

    ' (10) Tjek for flere "@" '-----------------------------------------------------------------

    V_Snabler = 0

    For V_i = 1 TO Len(V_ValiderEmail)
        If Mid(V_ValiderEmail,V_i,1) = "@" Then
            V_Snabler = V_Snabler + 1
        End If
    Next

    If V_Snabler > 1 Then
        Valider    = False
        V_Status    = "E-mail adressen indeholder for mange ""@""."
        Exit Function
    End If

    ' (11) Check V_Domaene ud fra array '-------------------------------------------------------

    V_UgyldigeDomaener    = Array("hotmai.com","yahho.dk","hotmaile.com","mail1stofanet.dk","ofri.dk","post1.dk","post2.dk","post3.dk","post4.dk","post5.dk","post6.dk","post7.dk","post8.dk","fc.skolekom.dk","post9.dk","hommail.com","jupiipost.dk","forom.dk","furom.dk","frorum.dk","mail.forum.dk","mailforum.dk","forum.mail.dk","sol.ak","guld.dk","hormail.com","wanacoo.dk","sol.mail.dk","mail.tel.dk")
    V_Domaene                = Right(V_ValiderEmail,(Len(V_ValiderEmail) - InStrRev(V_ValiderEmail,"@")))

    For V_i = 0 TO UBound(V_UgyldigeDomaener)
        If V_Domaene = V_UgyldigeDomaener(V_i) Then
            Valider    = False
            V_Status    = "E-mail adressens domæne er ugyldigt."
            Exit Function
        End If
    Next

    ' (12) Tjek om TLD'en er korrekt '----------------------------------------------------------

    V_GyldigEndelse    = False
    V_GyldigeEndelser    = Array("dk","com","edu","gov","int","mil","net","org","af","al","dz","as","ad","ao","ai","aq","ag","ar","am","aw","ac","au","at","az","bs","bh","bd","bb","by","be","bz","bj","bm","bt","bo","ba","bw","bv","br","io","bn","bg","bf","bi","kh","cm","ca","cv","ky","cf","td","cs","cl","cn","cx","cc","co","km","cg","ck","cr","ci","hr","cu","cy","cz","dj","dm","do","tp","ec","eg","sv","gq","er","ee","et","fk","fo","fj","fi","fr","gf","pf","tf","ga","gm","ge","de","gh","gi","gr","gl","gd","gp","gu","gt","gg","gn","gw","gy","ht","hm","va","hn","hk","hu","is","in","id","ir","iq","ie","im","il","it","jm","jp","je","jo","kz","ke","ki","kp","kr","kw","kg","la","lv","lb","ls","lr","ly","li","lt","lu","mo","mk","mg","mw","my","mv","ml","mt","mh","mq","mr","mu","yt","mx","fm","md","mc","mn","ms","ma","mz","mm","na","nr","np","nl","an","nc","nz","ni","ne","ng","nu","nf","mp","no","om","pk","pw","ps","pa","pg","py","pe","ph","pn","pl","pt","pr","qa","re","ro","ru","rw","kn","lc","vc","ws","sm","st","sa","sn","sc","sl","sg","sk","si","sb","so","za","gs","es","lk","sh","pm","sd","sr","sj","sz","se","ch","sy","tw","tj","tz","th","tg","tk","to","tt","tn","tr","tm","tc","tv","ug","ua","ae","gb","uk","us","um","uy","su","uz","vu","ve","vn","vg","vi","wf","eh","ye","yu","cd","zm","zr","zw","info")
    V_Endelse            = Right(V_ValiderEmail,(Len(V_ValiderEmail) - InStrRev(V_ValiderEmail,".")))

    For V_i = 0 TO UBound(V_GyldigeEndelser)
        If V_Endelse = V_GyldigeEndelser(V_i) Then
            V_GyldigEndelse = True
            Exit For
        End If
    Next
   
    If NOT V_GyldigEndelse Then
        Valider    = False
        V_Status    = "Domæne endelsen (f.eks. "".dk"" el. "".com"") er ikke korrekt."
        Exit Function
    End If

    ' (13) Check hver enkelt tegn '-------------------------------------------------------------

    For V_i = 1 TO Len(V_ValiderEmail)
        If NOT IsNumeric(Mid(V_ValiderEmail,V_i,1)) AND (LCase(Mid(V_ValiderEmail,V_i,1)) < "a" OR LCase(Mid(V_ValiderEmail,V_i,1)) > "z") AND Mid(V_ValiderEmail,V_i,1) <> "_" AND Mid(V_ValiderEmail,V_i,1) <> "." AND Mid(V_ValiderEmail,V_i,1) <> "@" AND Mid(V_ValiderEmail,V_i,1) <> "-" Then
            Valider    = False
            V_Status    = "E-mail adressen indeholder et eller flere ugyldige tegn."
            Exit Function
        End If
    Next

    ' (14) Adresser der skal ekskluderes (grundet SPAM el. lign.) '-----------------------------

    V_Ekskluder    = Array("test@test.dk")

    For V_i = 0 TO UBound(V_Ekskluder)
        If V_ValiderEmail = V_Ekskluder(V_i) Then
            Valider    = False
            V_Status    = "Der kan ikke sendes til den valgte adresse da den er ekskluderet pga. misbrug."
            Exit Function
        End If
    Next

End Function

function removeDuplicates(str)

    dim arrAlle, i, tmp
    arrAlle = Split(str,",")
    tmp=";"
    for i = 0 to ubound(arrAlle)
        if instr(1,tmp,","&arrAlle(i)&",",1)=0 then
            tmp=tmp & arrAlle(i) & ","
        end if
    next

    if len(tmp)>1 then
        tmp = mid(tmp,2,len(tmp)-2)
    end if

    removeDuplicates = replace(tmp,";",",")

end function

strEmailAddresses = Request.Form("emailAddresses")
strSubject = Request.Form("subject")
strMessageHTML = Request.Form("messageHtml")
'strMessageTextOnly = Request.Form("messageTextOnly")

if strEmailAddresses <> "" and strSubject <> "" and (strMessageHTML <> "" or strMessageTextOnly <> "") then

    strEmailAddresses = replace(strEmailAddresses, ";", " ")
    strEmailAddresses = replace(strEmailAddresses, vbcrlf, " ")
       
    while inStr(strEmailAddresses, "  ") > 0
        strEmailAddresses = replace(strEmailAddresses, "  ", " ")
    wend
       
    strEmailAddresses = replace(strEmailAddresses, " ", ",")
   
    strEmailAddresses = removeDuplicates(strEmailAddresses)

    aArr = Split(strEmailAddresses, ",")

    For i = LBound(aArr) To UBound(aArr)
       
        if trim(aArr(i)) <> "" then
            if Valider(aArr(i)) then
                Response.write "<br>" & aArr(i)
                Set JMail          = Server.CreateObject("JMail.SMTPMail")
                JMail.ServerAddress = "smtp.xxxxxxxx.dk"
                JMail.Sender        = "nyhedsbrev@xxxxxxxxxx.dk"
                JMail.SenderName    = "xxxxxxxxx.dk"
                JMail.Subject      = strSubject
                 
                JMail.AddRecipient aArr(i)
                 
                JMail.Priority      = 3
                JMail.AddHeader      "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
                JMail.HTMLBody         = strMessageHTML

                JMail.Execute    
                Set JMail = Nothing
            else
                response.write "<br>FEJL VED CHECK: " & aArr(i) & " begrundelse: " & V_Status
            end if
        end if   
    Next

end if

%>
Avatar billede eagleeye Praktikant
23. februar 2005 - 17:44 #3
og prøv at rette funktionen til dette, så den bruger ; i omkring den nye streng med email adresser:


function removeDuplicates(str)

    dim arrAlle, i, tmp
    arrAlle = Split(str,",")
    tmp=";"
    for i = 0 to ubound(arrAlle)
        if instr(1,tmp,";"&arrAlle(i)&";",1)=0 then
            tmp=tmp & arrAlle(i) & ";"
        end if
    next

    if len(tmp)>1 then
        tmp = mid(tmp,2,len(tmp)-2)
    end if

    removeDuplicates = replace(tmp,";",",")

end function
Avatar billede axkris Nybegynder
23. februar 2005 - 17:46 #4
Det virker - mange tak :-D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester