2012-08-10 12 views
2

我使用PasswordRecovery控件並不能發送,當有多個賬戶使用相同的電子郵件超過一個電子郵件多個帳戶。我通過Membership.FindUsersByEmail獲得了一個MembershipUserCollection。然後,我用foreach循環遍歷它。我的問題是,如果有多個用戶,它只發送最後一封電子郵件。我怎樣才能讓它爲每個帳戶發送一封電子郵件?該delagate被稱爲正確的次數。另外,我知道他們都去到相同的電子郵件,但想那裏是一個爲每個帳戶發送。發送帶有PasswordRecovery電子郵件時有

代碼剪斷:

protected void PasswordRecovery1_SendingMail(object sender, MailMessageEventArgs e) 
{ 

} 

bool IsValidEmail(string strIn) 
{ 
    // Return true if strIn is in valid e-mail format. 
    return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); 
} 


protected void PasswordRecovery1_VerifyingUser(object sender, LoginCancelEventArgs e) 
{ 
    if (IsValidEmail(PasswordRecovery1.UserName)) 
    { 
     // string uName = Membership.GetUserNameByEmail(PasswordRecovery1.UserName) ?? PasswordRecovery1.UserName; 
     MembershipUserCollection users = Membership.FindUsersByEmail(PasswordRecovery1.UserName); 
     if (users.Count < 1) 
     { 
      PasswordRecovery1.UserName = " "; 
      PasswordRecovery1.UserNameFailureText = "That user is not available"; } 
     else 
     { 
      foreach (MembershipUser user in users) 
      { 

       PasswordRecovery1.UserName = user.UserName; 
       PasswordRecovery1.SendingMail += PasswordRecovery1_SendingMail; 
       PasswordRecovery1.SuccessTemplateContainer.Visible = true; 

      } 

     } 
    } 
    else 
    { 
     PasswordRecovery1.UserName = " "; 
     PasswordRecovery1.UserNameFailureText ="Please enter a valid e-mail";   
    } 
} 

回答

1

想通了......我本來是做是行不通的樣子,讓我去半定製。我在提交按鈕上添加了一個事件處理程序,並按如下所示編輯了代碼。正如你所看到的,我只是完整的收集。不是我確定的最好的,但它的工作原理,很容易理解。

電子郵件的正文中的HTML格式的TXT文件創建。使用mailDefinition類讓我有替換字符串,從而簡化了郵件體創作。

它發送一個單獨的電子郵件的每一個帳戶到相同的電子郵件。我可以把他們都放到一封電子郵件,但是這是他們想要的東西......

protected void PasswordRecovery1_SendingMail(object sender, MailMessageEventArgs e) 
{ 
    e.Cancel = true; 
} 

bool IsValidEmail(string strIn) 
{ 
    // Return true if strIn is a valid e-mail 
    return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"); 
} 

protected void SubmitLinkButton_Click(object sender, EventArgs e) 
{ 
    if (IsValidEmail(PasswordRecovery1.UserName)) 
    { 
     // Get user collection by shared email 
     MembershipUserCollection users = Membership.FindUsersByEmail(PasswordRecovery1.UserName); 
     if (users.Count < 1) 
     { 
      PasswordRecovery1.UserName = " "; 
      PasswordRecovery1.UserNameFailureText = "That user is not available"; 
     } 
     else 
     { 
      // Loop and email each user in collection 
      foreach (MembershipUser user in users) 
      { 
       MembershipUser ur = Membership.GetUser(user.UserName); 

       DateTime now = DateTime.Now; 

       // Using MailDefinition instead of MailMessage so we can substitue strings 
       MailDefinition md = new MailDefinition(); 

       // list of strings in password.txt file to be replace 
       ListDictionary replacements = new ListDictionary(); 
       replacements.Add("<%UserName%>", ur.UserName); 
       replacements.Add("<%Password%>", ur.GetPassword()); 

       // Text file that is in html format 
       md.BodyFileName = "absolute path to password.txt"; 
       md.IsBodyHtml = true; 
       md.Priority = MailPriority.High; 
       md.Subject = "Email Subject Line - " + now.ToString("MM/dd - h:mm tt"); 
       md.From = ConfigurationManager.AppSettings["FromEmailAddress"]; 

       // Add MailDefinition to the MailMessage 
       MailMessage mailMessage = md.CreateMailMessage(ur.Email, replacements, this); 
       mailMessage.From = new MailAddress(ConfigurationManager.AppSettings["FromEmailAddress"], "Friendly Name"); 
       SmtpClient m = new SmtpClient(); 
       m.Host = "127.0.0.1"; 
       m.Send(mailMessage); 

       PasswordRecovery1.UserName = user.UserName; 

       PasswordRecovery1.SendingMail += PasswordRecovery1_SendingMail; 
      } 

     } 
    } 
    else 
    { 
     PasswordRecovery1.UserName = " "; 
     PasswordRecovery1.UserNameFailureText = "Please enter a valid e-mail"; 
    } 
} 
相關問題