Avatar billede hlt Juniormester
11. april 2011 - 16:05 Der er 18 kommentarer og
1 løsning

Send mail via koden

Hej,
Jeg sidder med et problem som er ved at drive mig til vanvid.
Det drejer sig om at jeg er ved at lave en funktion på en hjemmeside til afsendelse af nyhedsbreve til en forening jeg er med i. Det hele virker sådan set fint nok, bortset fra at alle mails bliver sendt 2 gange. Der er kun et sted i koden hvor jeg kalder min send funktion, men den sender alligevel samme mail til samme afsender 2 gange.
Det er kodet i VB
Nøjagtig samme kode bliver brugt til vores kontaktside, men der sendes jo så kun en gang til modtageren.
Er der nogen der måske har prøvet noget tilsvarende?
Mvh
Avatar billede keysersoze Guru
11. april 2011 - 16:13 #1
Det er heldigvis ikke en fejl i frameworket så fejlen må skyldes uheldig kode - uden noget kode er det umuligt for os at gætte, men du kunne evt også prøve at køre siden med debugging, sætte et par breakpoints de vigtige steder i dit nyhedsbrevflow og på den måde ret let finde ud af hvad der går galt.
Avatar billede arne_v Ekspert
11. april 2011 - 16:35 #2
Noget post back??
Avatar billede hlt Juniormester
11. april 2011 - 16:40 #3
Tak for dit svar. Jeg sætter koden ind nedenfor med lidt forklaring:
Først har jeg min gridview liste med en checkbox som afkrydses for dem der skal have sendt en mail. Denne funktion trickes af en knap
-----------------------------------------
For Each row As GridViewRow In GridView1.Rows
' find checkboksen
Dim cb As CheckBox = row.FindControl("renewCheckBox")
If cb IsNot Nothing AndAlso cb.Checked Then
Dim uID As String = GridView1.DataKeys(row.RowIndex).Value
Try
  sendAll(uID)'Modtager modtagerens id
Catch ex As Exception
messageLabel.Text = messageLabel.Text & "<br ><b>FEJL: </b>" & ex.Message
End Try
End If
Next
----------------------------------------
sendAll funktionen:
Dim mMailServer As String = "mail.mailserver.dk"
Dim mFrom As String = "admin@xxxxx.dk"
Dim mPassword As String = "Password"
Try
Dim UserRealName As String = ""
UserRealName = webhelper.getUserName(uid)
username = webhelper.getUserNamefromProviderKey(uid)
mTo = Membership.GetUser(username).Email
mSubject = "Besked fra foreningen"
mMsg = "mail indhold"
Dim message As New MailMessage(mFrom, mTo, mSubject, mMsg)
Dim mySmtpClient As New SmtpClient(mMailServer)
mySmtpClient.UseDefaultCredentials = False
mySmtpClient.Credentials = New NetworkCredential(mFrom, mPassword)
message.IsBodyHtml = True
Dim membershipResp As String = adminHelper.getMemberResponsibleEmail
mySmtpClient.Send(message)
message.Dispose()
------------------------------------------------
Avatar billede hlt Juniormester
11. april 2011 - 16:48 #4
Jeg synes jeg har prøvet med postback. Hvis jeg sætter en test af det på, så kommer der ingen mail.
Avatar billede hlt Juniormester
11. april 2011 - 17:19 #5
Jeg glemte at skrive at jeg bhar prøvet at få returneret mail adresse som der sendes til lige efter at jeg har kørt sætningen med send. Og den returnere også kun en som den skal.
Avatar billede keysersoze Guru
11. april 2011 - 17:46 #6
nu kan jeg ikke helt se hvilken event det køres i - men hvis du udkommenterer selve mail-koden og sætter et breakpoint i sendAll(uID) giver det så nogen forklaring på problemet?
Avatar billede hlt Juniormester
11. april 2011 - 18:00 #7
Det sættes igang med et onclick event på en knap. Så gennemgås listen og dem der er krydset af får tilsendt en mail. jeg har prøvet at sætte en retur tekst på. og der returneres kun en tekst pr. bruger, hvilket er rigtigt nok. men der sendes 2 mails til samme bruger. Og den tekst der returnes fra sendAll returneres lige efter at message.send er kaldt. Så hvis det var koden der fejlede, ville jeg så ikke få returneret 2 gange tekst?
Jeg undrer mig godt nok, eller også har jeg bare stirret mig blind på koden. men så meget kode er der jo heller ikke.
Avatar billede hlt Juniormester
11. april 2011 - 18:11 #8
Jeg ved ikke hvor meget man skal lægge i det, men der er så også forskel på den rækkefølge de dukker op i min indbakke. Nogen gange komme mailen til den samme bruger lige efter hinanden, og andre gange kommer de blandet.
Avatar billede keysersoze Guru
11. april 2011 - 18:30 #9
Rækkefølgen kan du ikke bruge til noget.

Jeg vil stadig foreslå at du benytter debugging-værktøjet i Visual Studio, at udskrive tekst på en side som debugging var noget man kunne gøre i klassisk ASP for alt afhængig af events osv kan du ikke være sikker på at den tekst der udskrives svarer til hvad der reelt set når at ske.
Avatar billede hlt Juniormester
11. april 2011 - 19:55 #10
Men er der også sådan et debugging værktøj i visual webdeveloper 2010?
Avatar billede keysersoze Guru
11. april 2011 - 20:02 #11
ja
Avatar billede hlt Juniormester
11. april 2011 - 21:02 #12
Burde jeg kunne finde ud af noget ved at bruge trace? Jeg kan ikke rigtig bruge debuggeren, da websitet kører på en webserver og databasen har jeg ikke adgang til fra andre maskiner end serveren.
Avatar billede keysersoze Guru
11. april 2011 - 22:07 #13
Der er ingenting der slår rigtig debugging da du kan få mange flere informationer gennem den end med noget andet - skulle der fx ske en redirect vil du ikke opdage den ved at udskrive værdier til skærm eller til trace men du kan da i hvert fald forsøge med tracen.

Alternativt må du i din sendAll skriv til en logfil.
Avatar billede hlt Juniormester
12. april 2011 - 09:52 #14
Nu har jeg prøvet med trace. Og det er jo et dejligt stykke værktøj. Jeg sidder lidt med en fornemmelse af at have fundet en guldåre. he he....
Nå men ihvertfald, så har jeg sat nogle trace'es ind og jeg kan se at mit gridviev bliver løbet igennem 2 gange. Men hvorfor kan jeg ikke lige se. Der er en løkke som gennemgår alle rækker. Og hvis en checkbox i en række er afkrydset, så skal den sende. Men hvorfor går den igennem listen 2 gange?
Avatar billede keysersoze Guru
12. april 2011 - 10:03 #15
Hvis du synes at trace er en guldåre så vent til du kommer i gang med rigtig debugging...

Vi kan ikke ud fra de oplysninger du har givet sige hvorfor listen gennemgås to gange - så prøv at sætte lidt flere trace-mærker i dine events, check hvor mange gange du databinder osv.
Avatar billede hlt Juniormester
12. april 2011 - 10:11 #16
Jeg ville gerne have rigtig debugging. Men det er vist pt. ikke muligt.
Men hvad mener du med databinder? Jeg har min liste som bliver sat ved page_load. Den viser jo rigtigt med dem der skal være på listen.
Men jeg kan selvfølgelig godt lige sætte lidt mere trace ind.
Avatar billede hlt Juniormester
12. april 2011 - 10:38 #17
Nu har jeg forsøgt med list ekstra trace. Og det ser dælme ud som om min knap event bliver kørt 2 gange. Jeg har sat min trace liste ind nedenfor.
I den har jeg indsat et trace lige efter at knappen er blevet trykket. Jeg ved ikke om det giver mening. Men hvorfor hulen bliver koden i knap event kørt 2 gange?


Begin Raise PostBackEvent    0,0191071770294828    0,000016
Her der lige blevet trykket på knappen. Det er før listen bliver gennemløbet    0,0293934005578921    0,010286
Før for løkke.......    0,0298607783950195    0,000467
Inden i hver række:e6cf4ec8-893a-4ea2-9041-6eb64b5f3702    0,0299683339642329    0,000108
Inden i hver række hvis checkbox er afkrydset: før sendAll: e6cf4ec8-893a-4ea2-9041-6eb64b5f3702    0,030001299047784    0,000033
----------------------------    0,0300180609546744    0,000017
Før send    0,0443019992764444    0,014284
Efter send    0,0531176448403359    0,008816
Inden i hver række hvis checkbox er afkrydset: efter sendAll: e6cf4ec8-893a-4ea2-9041-6eb64b5f3702    0,0531866480237013    0,000069
----------------------------    0,0532115115189221    0,000025
Inden i hver række:944fea2e-06c6-407b-9ae2-9a76782a2599    0,0532349781885687    0,000023
Inden i hver række:a2cae684-d361-4902-b766-85cd9ff72701    0,0532592829535597    0,000024
Inden i hver række:1eec1647-b512-49fd-a7dc-b44b3b52fb64    0,0532799559720579    0,000021
Her der lige blevet trykket på knappen. Det er før listen bliver gennemløbet    0,0533073337533122    0,000027
Før for løkke.......    0,053326889311351    0,000020
Inden i hver række:e6cf4ec8-893a-4ea2-9041-6eb64b5f3702    0,0533453274089305    0,000018
Inden i hver række hvis checkbox er afkrydset: før sendAll: e6cf4ec8-893a-4ea2-9041-6eb64b5f3702    0,0533634861413951    0,000018
----------------------------    0,0533799686831706    0,000016
Før send    0,0567678294308355    0,003388
Efter send    0,0645048462863297    0,007737
Inden i hver række hvis checkbox er afkrydset: efter sendAll: e6cf4ec8-893a-4ea2-9041-6eb64b5f3702    0,0645598812139532    0,000055
----------------------------    0,0645780399464178    0,000018
Inden i hver række:944fea2e-06c6-407b-9ae2-9a76782a2599    0,0645992716951456    0,000021
Inden i hver række:a2cae684-d361-4902-b766-85cd9ff72701    0,0646202240787586    0,000021
Inden i hver række:1eec1647-b512-49fd-a7dc-b44b3b52fb64    0,0646392209065677    0,000019
aspx.page    End Raise PostBackEvent
Avatar billede hlt Juniormester
12. april 2011 - 10:48 #18
Så fandt jeg fejlen. Det er næsten lidt pinligt. Jeg har lavet siden om fra at have kode i samme fil til at have koden i en code behind fil. Og der har jeg ikke fået fjernet den onclick der er lavet på knappen. Så når jeg klikkede var der både en onclick der kørte koden men også en handles sendButton.click. Så derfor bliver koden inden i knap eventen kørt 2 gange. Det er jo latterligt. Den burde jeg have set.
Det er testet og virker fint nu.
Sender du mig et svar, keysersoze? Så for du point. Om ikke andet så fik jeg øjnene op for trace istedet for at bruge den gamle metode med at skrive til et tekstfelt.
Avatar billede keysersoze Guru
12. april 2011 - 18:55 #19
svar :)
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