根据收到的Request.QueryString参数发送电子邮件

时间:2017-03-07 00:06:39

标签: c# asp.net

大家好我有一个场景,我希望你能看到它,有可能你得到我现在没有得到的东西,我必须条件,第一个在参数符合标准时工作,第二个不起作用(即使已满足所有参数,也不会发送电子邮件:

       try
        {
            SmtpClient smtpClient = new SmtpClient();
            MailMessage mail = new MailMessage();

            if (Request.QueryString["dot"].ToLower() == "rejected" || Request.QueryString["dep"].ToLower() == "rejected" || Request.QueryString["fdny"].ToLower() == "rejected")
            {
                mail.To.Add(new MailAddress("receiver@domain.org"));
                mail.From = new MailAddress("sysadmin@domain.org", "DONOTREPLY");
                mail.Subject = "The Subjectt";
                mail.IsBodyHtml = true;
                mail.Body = "testing testing testing";
                smtpClient.Send(mail);
            }                                                   
            else if (Request.QueryString["dot"].ToLower() == "gcl36" && (Request.QueryString["fdny"].ToLower() == "rejected" || Request.QueryString["hro"].ToLower() == "rejected"))
            {
                mail.To.Add(new MailAddress("receiver@domain.org"));
                mail.From = new MailAddress("sysadmin@domain.org", "DONOTREPLY");
                mail.Subject = "The Subject ";
                mail.IsBodyHtml = true;
                mail.Body = "testing testing testing";
                smtpClient.Send(mail);

            }
        }
        catch (Exception ex)
        {
            return;
        } 

网址如下所示:http://example.com/SPD/FileUpload.aspx?APPid=APP-016784&DocumentId=DC080497-9AFA-E511-BD4F-00155D47EC98&Userid=John Doe& SubName = Submission-1459797754588& dot = GCL36& fdny = Rejected& hro = na

正如您在此URL中看到的那样,“dot”变量的值为GCL36,“fdny”已被拒绝,但“if”中的第二个条件永远不会被调用。

1 个答案:

答案 0 :(得分:0)

好的..我发现了代码的问题。使用当前代码和示例URL,即使第一个if块也不会被执行。

在第一个if块中,您还要检查Request.QueryString["dep"].ToString()。您发布的示例网址没有参数dep。这就是为什么if语句将抛出NullReferenceException并且它将直接转到catch阻止并从那里返回而不执行任何操作。

您需要做的是确保在使用QueryString参数之前确保它们不为null。此外,您还需要确保在通用条件之前首先检查特定条件。

try
{
    var dot = Request.QueryString["dot"]?.ToLower() ?? string.Empty;
    var dep = Request.QueryString["dep"]?.ToLower() ?? string.Empty;
    var fdny = Request.QueryString["fdny"]?.ToLower() ?? string.Empty;
    var hro = Request.QueryString["hro"]?.ToLower() ?? string.Empty;

    SmtpClient smtpClient = new SmtpClient();
    MailMessage mail = new MailMessage();

    //Putting if block of more specific condition check first.
    if (dot == "gcl36" && (fdny == "rejected" || hro == "rejected"))
    {
        mail.To.Add(new MailAddress("receiver@domain.org"));
        mail.From = new MailAddress("sysadmin@domain.org", "DONOTREPLY");
        mail.Subject = "The Subject ";
        mail.IsBodyHtml = true;
        mail.Body = "testing testing testing";
        smtpClient.Send(mail);
    }
    else if (dot == "rejected" || dep == "rejected" || fdny == "rejected")
    {
        mail.To.Add(new MailAddress("receiver@domain.org"));
        mail.From = new MailAddress("sysadmin@domain.org", "DONOTREPLY");
        mail.Subject = "The Subjectt";
        mail.IsBodyHtml = true;
        mail.Body = "testing testing testing";
        smtpClient.Send(mail);
    }
}
catch (Exception ex)
{
    return;
}

这可以解决您的问题。

P.S。如果您在catch块中正确处理了异常,则可能已经确定了问题。只需从catch区块返回就会经常让你陷入这种情况。