如何避免在c#中发送重复邮件

时间:2013-04-10 06:32:21

标签: c# smtpclient

我编写了一个代码,只要用户从前端添加内容,就会向管理员发送邮件进行审核......问题是管理员有时会收到两封内容相同的邮件。

下面是我的代码

            MailMessage mail = new MailMessage();

            string mailto = ConfigurationManager.AppSettings["adminStoryEmail"].ToString();
            mail.To.Add(mailto);
            //mail.To.Add("vidyasagar.patil@viraltech.in");
            mail.From = new MailAddress(ConfigurationManager.AppSettings["fromEmail"]);
            mail.Subject = ConfigurationManager.AppSettings["email_subject"];
            if (uploadedpath != "")
            {
                mail.Body = "Email ID : " + txtEmail.Text + "<br /> Title : " + txtStoryTitle.Text + "<br />" + " Download :   " + " http://www.achievewithdell.in/uploads/" + uploadedpath + "<br />";
                if (story != "")
                {
                    mail.Body += "New story has been added" + " http://www.achievewithdell.in/admin/ManageStory.aspx";
                }
            }
            else
            {
                mail.Body = "Email ID : " + txtEmail.Text + "<br /> Title : " + txtStoryTitle.Text + " <br />";
                if (story != "")
                {
                    mail.Body += "New story has been added" + " http://www.achievewithdell.in/admin/ManageStory.aspx";
                }
            }
            mail.IsBodyHtml = true;

            SmtpClient smtp = new SmtpClient();
            smtp.Host = ConfigurationManager.AppSettings["smtp_host"];  //Or Your SMTP Server Address
            smtp.Port = 25;
            smtp.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["smtp_userid"], ConfigurationManager.AppSettings["smtp_password"]); //Or your Smtp Email ID and Password
            smtp.DeliveryMethod = SmtpDeliveryMethod.Network;

            smtp.Send(mail);

2 个答案:

答案 0 :(得分:0)

调试并确保未调用smtp Send()方法两次,在该行上放置一个断点。

答案 1 :(得分:0)

您说有时电子邮件会被发送两次。这表明你给我们的代码很好,问题可能在于调用代码的问题。

你可以消除重复的一种方法是将你的邮件排队,也许是在数据库中(存储:to,from,subject,body等)。然后定期,遍历要发送的邮件,忽略重复并标记已发送的邮件,以便不再发送邮件。

像其他海报建议的那样,将重构失败到你的应用程序中,取出你的调试器并设置一个断点。根据您的Visual Studio版本,您可以使用Breakpoint Hit Count,因此您只能在第二次断点处着陆。