Avatar billede kimlarsen1978 Nybegynder
09. januar 2010 - 15:10 Der er 8 kommentarer og
1 løsning

Rekursiv funktion får: Out of Stack Space

Jeg har en funktion som tager et array af modtagere og sender en mail til dem én for én.

Dette gøres rekursivt, så jeg sikre at serveren er færdig med at behandle forrige mail, inden jeg sætter gang i den næste. Men jeg får "Out of Stack Space" når den har sendt ca. 350 mails.

***************************
'Kald afsendelse
blnSent = sendManyMails(strType, arrModtagere, 0, strEmne, strFinalBody, "", "", "")

Function sendManyMails(strType, arrRecipient, intPostInArray, strSubject, strBody, strCC, strBCC, strAttachment)
    If isArray(arrRecipient) Then
        numberOfPosts = UBound(arrRecipient)
        if intPostInArray > numberOfPosts then
            sendManyMails = true
        else
            strModtager = arrRecipient(intpostiarray)
            blnMailFunctionDone = false
            blnSuccess = false
            blnMailFunctionDone = sendJMailNew(strType, 1, "Svar_Laeses_Ikke@mydomain.dk", strSubject, strBody, strModtager, "", "", "", false)
            if blnMailFunctionDone then
                intPostInArray = intPostInArray + 1
                if sendManyMails(strType, arrRecipient, intPostInArray, strSubject, strBody, strCC, strBCC, strAttachment) then
                    sendManyMails = true
                end if
            end if
            sendManyMails = false
        end if
    End if
End Function
***************************************

Den giver fejlen på denne linje:
blnMailFunctionDone = sendJMailNew(strType, 1, "Svar_Laeses_Ikke@mydomain.dk", strSubject, strBody, strModtager, "", "", "", false)

Jeg kan Google mig frem til at det er fordi koden mener den har gang i noget endeløst.... Der er PT ca. 2.000 poster i mit array.

Hvad er der galt med funktionen?

PS: Jeg bør nok lige sige at "sendJMailNew" altid returnere TRUE. Det fortæller blot at funktionen er færdig, ikke om den aktuelle mail er sendt eller fejlet, men fortæller at serveren er klar til den næste mail.
Avatar billede claes57 Ekspert
09. januar 2010 - 15:20 #1
sæt dine variable i funktionen til null når du er færdig med dem - jeg gætter på, at asp laver et sæt til hvert kald, og derfor bliver fyldt op.
Avatar billede kimlarsen1978 Nybegynder
09. januar 2010 - 15:21 #2
hvike tænker du på?
Avatar billede kimlarsen1978 Nybegynder
09. januar 2010 - 15:25 #3
Jeg bruger dem jo til at sende til funktionen igen?

Skal jeg gøre like this?

'Kald afsendelse
blnSent = sendManyMails(strType, arrModtagere, 0, strEmne, strFinalBody, "", "", "")

Function sendManyMails(strType, arrRecipient, intPostInArray, strSubject, strBody, strCC, strBCC, strAttachment)
    If isArray(arrRecipient) Then
        numberOfPosts = UBound(arrRecipient)
        if intPostInArray > numberOfPosts then
            sendManyMails = true
        else
            strModtager = arrRecipient(intpostiarray)
            blnMailFunctionDone = false
            blnSuccess = false
            blnMailFunctionDone = sendJMailNew(strType, 1, "Svar_Laeses_Ikke@mydomain.dk", strSubject, strBody, strModtager, "", "", "", false)
            if blnMailFunctionDone then
                intPostInArray = intPostInArray + 1
                if sendManyMails(strType, arrRecipient, intPostInArray, strSubject, strBody, strCC, strBCC, strAttachment) then
                    sendManyMails = true
                end if
            end if
            strType = ""
            arrRecipient = null
            intPostInArray = 0
            strSubject = ""
            strBody = ""
            sendManyMails = false
        end if
    End if
End Function


?????
Avatar billede ksoren Nybegynder
09. januar 2010 - 16:37 #4
Jeg forstår slet ikke hvad du skal med en rekursiv funktion til dette
Avatar billede ksoren Nybegynder
09. januar 2010 - 16:39 #5
... du opnår ikke rigtig noget ved det. Du skal jo blot gennemløbe dit array, slut.
Avatar billede kimlarsen1978 Nybegynder
09. januar 2010 - 17:01 #6
Det har jeg prøvet, men server går helt i spunk hvis jeg initiere så mange kald til min mailfunktion. ...
Avatar billede kimlarsen1978 Nybegynder
09. januar 2010 - 17:02 #7
Det jeg gerne vil opnå er en mere "rolig" mailafsendelse hvor serveren får tid til at afslutte en afsendelse inden den næste kommer
Avatar billede kimlarsen1978 Nybegynder
09. januar 2010 - 17:39 #8
Hmmm, tror det var en fucked up streng operation i mit mailscript, som fuckede det op når det blev kaldt flere hundere gange... Når den er rettet kan jeg nok godt leve med:

Function sendManyEMails(strType, csRecipient, strSubject, strBody, strCC, strBCC, strAttachment)
    arrRecipient = split(csRecipient,",")
    for i=0 to ubound(arrRecipient)
        blnMailFunctionDone = sendJMailNew(strType, 1, "Svar_Laeses_Ikke@mydomain.dk", strSubject, strBody, arrRecipient(i), strCC, strBCC, strAttachment, false)
    next
End Function
Avatar billede kimlarsen1978 Nybegynder
13. februar 2010 - 18:48 #9
lukker
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