Event handler code to add incoming emails with subject “Discussion [ID]” as replies

Here the users will send emails with subject “DiscussionTitle [Discussion ID]” format. If there is a discussion thread present with specified “[Discussion ID]” then it will add the incoming email as a reply in that thread. If ID is not supplied and if there is no discussion thread present with “DiscussionTitle” then it will create a new discussion but if there is any discussion already available then it will ignore that incoming mail.

 

    1:  public override void EmailReceived(SPList list, Microsoft.SharePoint.Utilities.SPEmailMessage emailMessage, string receiverData)
    2:              {
    3:              base.EmailReceived(list, emailMessage, receiverData);
    4:              bool flag = false;
    5:              int id = -1;
    6:              string subject = emailMessage.Headers["Subject"].ToString();
    7:              SPUser ous = list.ParentWeb.AllUsers.GetByEmail(emailMessage.Sender);
    8:              SPListItemCollection viewColl = list.GetItems(list.Views["Subject"]);
    9:              foreach (SPListItem item1 in viewColl)
   10:              {
   11:                  SPListItem item2 = list.GetItemById(item1.ID);
   12:                  if ((item2["Subject"].Equals(subject.Substring(subject.IndexOf(":") + 2))) || (item2["Subject"].Equals(subject)))
   13:                  {
   14:                      flag = true;
   15:                      break;
   16:                  }
   17:              }
   18:   
   19:              if (subject.IndexOf("-[") >= 0)
   20:              {
   21:                  //if ((item2["Subject"].Equals(subject.Substring(subject.IndexOf(":") + 2, subject.IndexOf("-["))))
   22:   //|| (item2["Subject"].Equals(subject.Substring(0, subject.IndexOf("-[")))))
   23:                  {
   24:                      id = Convert.ToInt32(subject.Substring(subject.IndexOf("[") + 1, (subject.IndexOf("]") - subject.IndexOf("[") - 1)));
   25:                      SPListItem item2 = list.GetItemById(id);
   26:   
   27:                      SPListItem disc = SPUtility.CreateNewDiscussionReply(item2);
   28:                      disc["Body"] = emailMessage.HtmlBody;
   29:                      disc["TrimmedBody"] = emailMessage.HtmlBody;
   30:                      disc["Editor"] = ous;
   31:                      disc["Author"] = ous;
   32:                      disc["E-Mail Subject"] = emailMessage.Headers["Subject"].ToString();
   33:                      disc.Update();
   34:                      flag = true;
   35:                  }
   36:              }
   37:   
   38:              if (!flag)
   39:              {
   40:                  SPListItem disc = SPUtility.CreateNewDiscussion(list.Items, emailMessage.Headers["Subject"].ToString());
   41:                  disc["Body"] = emailMessage.HtmlBody;
   42:                  disc["TrimmedBody"] = emailMessage.HtmlBody;
   43:                  disc["Editor"] = ous;
   44:                  disc["Author"] = ous;
   45:                  disc["E-Mail Subject"] = emailMessage.Headers["Subject"].ToString();
   46:                  disc.Update();
   47:              }
   48:          }
   49:   

:: Please note that I would have just uploaded my initial code and you might want to consider proper optimization of the code and disposal of objects properly. I might not have updated the latest code here.