System.Net.Mail新MailMessage随机发送重复的电子邮件?

时间:2016-06-30 13:02:33

标签: asp.net vb.net email

我正在使用以下代码生成电子邮件。出于某种原因,随机发送一封重复的电子邮件。它不会一直发生,一个月只发生几次。您是否看到任何可能导致此问题的代码?当用户单击页面上的提交按钮时会触发它。我可以添加一些东西来防止这种情况发生吗? TIA

Try
    Dim Attachment As String
    Attachment = path + myUniqueFileName

    Dim mailMessage As MailMessage = New MailMessage
    mailMessage.From = New MailAddress("Test@Test.com")
    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

图片按钮代码:

 <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 个答案:

答案 0 :(得分:3)

我之前遇到过同样的问题,所以我想我可能会分享我的解决方案:

这是按钮的标记代码,以避免再次重新点击它:

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

注意OnClientClick="this.disabled = true; this.value = 'Sending...'

它将禁用您的按钮并在单击后更改其文本。

另外,为了避免在刷新页面时重新保存/重新提交/重新发送数据,我只是回忆起我的表单:

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

答案 1 :(得分:2)

首先,你要使用一些应该是的对象。当你完成它们时,我会更喜欢使用(我更喜欢自己使用块) - 不要说这就是原因重复发送,但最好将其作为一种可能性消除,这是最佳做法。 Here是一篇方便的文章,介绍了您可能会觉得有用的用法和替代策略。

其次,您是否可以访问用于发送邮件的服务器的SMTP日志?这可能值得一试。如果您在很短的时间内看到2条消息,那么您可以打赌它是一个按钮双击。粉碎Sundae在单击按钮时禁用按钮的方法应该真正处理该问题,但您可能会发现在检查按钮的OnClientClick属性(here)的文档时有一些价值。