Error.String引用未设置为String的实例。参数名称:s(在MVC4 C#中发送电子邮件进行账户验证时)

问题描述:

我正在做一个MVC应用程序,并试图发送一封电子邮件给注册用户以进行账户激活和电子邮件账户验证。 它在LocalHost上运行良好,但是当我将它部署到活动服务器上时,它给了我这个错误:Error.String引用未设置为String的实例。参数名称:s(在MVC4 C#中发送电子邮件进行账户验证时)

Error.String引用未设置为字符串的实例。参数名称:S 以下是我已经发送电子邮件编写的代码:

var verifyUrl = string.Empty; 
       verifyUrl = Request.Url.GetLeftPart(UriPartial.Authority) + "/Account/AccountVerify?I=" + NewUserID; 

      string body = "<html><head><meta content=\"text/html; charset=utf-8\" /></head><body><p>Dear " + objuserdet.Email + "" + 
         ", </p><p>To verify your account, please click the following link:</p>" 
         + "<p><a href=\"" + verifyUrl + "\" target=\"_blank\">" + verifyUrl + "" 
         + "</a></p><div>Best regards,</div><div>" + NewUserID + " Team.</div><p>Note: Do not forward " 
         + "this email. The verify link is private.</p></body></html>"; 
      string To = objuserdet.Email; 
      string Subject = "Account Activation"; 

      SendEmail(To,Subject,body); 

,这里是电子邮件方法:

public void SendEmail(string To, string Subject, string Body) 
     { 
      try 
      { 
       MailMessage mail = new MailMessage(); 
       // mail.From = new MailAddress(System.Configuration.ConfigurationManager.AppSettings["EmailID"].ToString()); 
       mail.From = new MailAddress("[email protected]"); 
       mail.To.Add(To.Trim()); 
       mail.Subject = Subject.Trim(); 
       mail.Body = Body; 
       mail.IsBodyHtml = true; 

      SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); 
      System.Net.NetworkCredential BasicAuthenticationInfo = new System.Net.NetworkCredential("[email protected]","*******"); 
      smtp.Timeout = 600000; 
      smtp.UseDefaultCredentials = false; 
      smtp.Credentials = BasicAuthenticationInfo; 
      smtp.EnableSsl = true; 
      smtp.Send(mail); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

..

任何帮助将不胜感激。 谢谢

+0

因为它只会在部署机器中抛出异常,您能否提供错误的堆栈跟踪?似乎某种方法需要一个字符串值参数's',例如在部署期间将DateTime.Parse分配给空值。 –

+0

感谢回复@TetsuyaYamamoto山本..我得到了它解决..问题是不是在代码基本上在本地主机我发送邮件从我的当前位置注册的电子邮件帐户,但部署服务器位置转移到美国,所以Gmail阻止邮件到期到位置更改和力量允许发件人通过应用程序登录..我美国帐户发送电子邮件,然后其工作很好... –

发生此错误是由于我的当前位置和部署服务器位置(即美国)中的更改导致Gmail阻止了来自我的应用程序的发件人电子邮件帐户的登录请求。 因此,我添加了一个美国的帐户发送电子邮件,它的统计工作对我来说很好.. 希望这可以帮助其他人以及..

发布堆栈跟踪会有帮助。如何过的唯一的地方,我觉得这种错误的会是

mail.To.Add(To.Trim()); 

更换string To = objuserdet.Email;

if(!string.IsNullOrEmpty(objuserdet.Email)){ 
    string To = objuserdet.Email; 
} 
else{ 
    throw new Exception("Email is null!"); 
} 

检查,如果这个工程!

+0

以及谢谢回复@ Shahbaaz ..我解决了..问题不在代码基本上在本地主机上我发送邮件从我的当前位置注册的电子邮件帐户,但在部署服务器位置转移到美国,所以gmail阻止邮件由于位置变化和力量允许发件人通过应用程序登录..我美国帐户发送电子邮件,然后它的工作很好... –