2016-06-30 20 views
7

Bir e-posta oluşturmak için aşağıdaki kodu kullanıyorum. Herhangi bir nedenle, rastgele bir e-posta gönderir. Her zaman olmaz, ayda sadece birkaç kez. Kodumda buna neden olabilecek bir şey görüyor musunuz? Kullanıcı sayfadaki bir gönder düğmesine tıkladığında tetiklenir. Bunun olmasını önlemek için buna ekleyebileceğim bir şey var mı? TIASystem.Net.Mail Yeni MailMessage rastgele iki şekilde e-posta gönderiyor mu?

Try 
    Dim Attachment As String 
    Attachment = path + myUniqueFileName 

    Dim mailMessage As MailMessage = New MailMessage 
    mailMessage.From = New MailAddress("[email protected]") 
    mailMessage.Subject = "Report " + " " + myUniqueFileName 
    mailMessage.IsBodyHtml = True 
    mailMessage.To.Add(New MailAddress(Session("EmailAddress"))) 
    mailMessage.Attachments.Add(New Attachment(Attachment)) 
    mailMessage.Body = "Attached is your report" 

    Dim smtp As SmtpClient = New SmtpClient 

    smtp.Host = "mail.net" 

    Dim NetworkCred As System.Net.NetworkCredential = New System.Net.NetworkCredential 

    smtp.Credentials = New NetworkCredential("test", "test") 
    smtp.UseDefaultCredentials = False 
    smtp.Send(mailMessage) 

Catch ex As Exception 

    Dim message As String = ex.ToString 
    Dim sb As New System.Text.StringBuilder() 
    sb.Append("<script type = 'text/javascript'>") 
    sb.Append("window.onload=function(){") 
    sb.Append("alert('") 
    sb.Append(message) 
    sb.Append("\n") 
    sb.Append(String.Format("{0:f2}", Convert.ToDouble(TotalAmount))) 
    sb.Append("')};") 
    sb.Append("</script>") 
    ClientScript.RegisterClientScriptBlock(Me.GetType(), "alert", sb.ToString()) 

End Try 

Resim Düğmesi Kodu:

<asp:ImageButton ID="cmdFinish" runat="server" Height="38px" ImageUrl="~/Images/Finish.png" Width="99px" UseSubmitBehavior="false" OnClientClick="this.disabled = true; this.value = 'Sending...';" Text="Send" /> 
+2

sadece bir tahmin, kullanıcı basın geri tarayıcının düğme veya yenilemek (posta gönderiliyor sonra) sayfa yine geri gönderme bu tetiği yaparsa? –

+0

Aynı zamanda Oturum da olabilir. Oturum ["EmailAddress"] 'seçeneğini ayarladığınızda, Kullanıcı e-postasının bir defadan fazla eklenmesi zaten var mıdır? – Kramb

+0

Sayfa yenilenirse başka bir gönderiyi tetikleyeceğini düşünüyorum. Geri gönderilmiyorsa ekleyeceğim yer burası mı? – user1342164

cevap

3

Daha önce aynı sorunu yaşadıysanız, bu yüzden benim çözüm paylaşabilir düşünüyorum: Bu benim mark-up kodu için

olduğunu düğme yeniden tıklatarak önlemek için tekrar:

<asp:Button ID="btnSend" runat="server" CssClass="btn btn-primary" Width="150px" UseSubmitBehavior="false" OnClientClick="this.disabled = true; this.value = 'Sending...';" Text="Send" /> 

Bildirimi OnClientClick="this.disabled = true; this.value = 'Sending...'.

Bu sizin düğmesini devre dışı ve tıklamadan sonra metni değiştirecektir. , Sen .Dispose olması gereken birkaç nesne kullandığınız Öncelikle

Response.Redirect("~/yourForm.aspx") 
+0

Resim düğmesi kodumu önerilere göre değiştirildiğime ekledim ve şimdi üzerine tıkladığımda hiçbir şey olmuyor. Herhangi bir fikir? – user1342164

+1

Bu yazıya verdiğim yanıtta gördüğünüz gibi, düğmeyi eşzamansız olarak devre dışı bırakmak için 'setTimeout' kullanmanızı öneririm: http://stackoverflow.com/questions/37955604/disabled-button-doesnt-submit-postback-in- updatepanel/37955693 # 37955693. Aksi takdirde, geri gönderme yapılmayacaktır. – ConnorsFan

+1

Sanırım çalışmıyor, çünkü bir ImageButton'dur. Yanılıyorsam beni düzeltin ama hatırladığım kadarıyla bir "LinkButton" kullanarak çalışmayı başaramadım ve normal bir düğme kullanmaya başvurdum. –

2

: sayfa yenilendiğinde

Ayrıca verilerin yeniden kaydetme/yeniden gönderim/tekrar göndermeyi önlemek için, sadece benim formunu hatırlatarak() 'onlarla işiniz bittiğinde (Ben blokları kendim kullanmayı tercih ediyorum) - bunun tekrar gönderilmesinin sebebi olduğunu söylemiyorum, ama bunu bir olasılık olarak ortadan kaldırmak en iyisi olabilir ve bu en iyi uygulamadır. Here, yararlı bulabileceğiniz Kullanımlar ve alternatif stratejiler hakkında kullanışlı bir makaledir. İkincisi

, iletiyi göndermek için kullanılıyor sunucu için SMTP günlüklerine erişim var mı? Bakmaya değer olabilirdi. Kısa bir süre içinde 2 mesaj görüyorsanız, bahse girebilirsiniz ki bu bir düğmenin çift tıklamasıdır. Crush Sundae'nin tıklatıldığında düğmeyi devre dışı bırakma yönteminin gerçekten bu sorunla ilgilenmesi gerektiği, ancak düğmenin OnClientClick özelliğinin (here) belgelerini incelemede bir miktar değer bulabilirsiniz.