// Token: 0x06000C1C RID: 3100 RVA: 0x000533C0 File Offset: 0x000515C0 public static bool TryParseMailTo(string mailToUrlValue, UserContext userContext, out StoreObjectId mailToItemId) { if (mailToUrlValue == null) { throw new ArgumentNullException("mailToUrlValue"); } if (userContext == null) { throw new ArgumentNullException("userContext"); } mailToItemId = null; if (null == Utilities.TryParseUri(mailToUrlValue)) { return(false); } using (MessageItem messageItem = MessageItem.Create(userContext.MailboxSession, userContext.DraftsFolderId)) { messageItem[ItemSchema.ConversationIndexTracking] = true; if (Globals.ArePerfCountersEnabled) { OwaSingleCounters.ItemsCreated.Increment(); } if (!MailToParser.TryMailToParse(messageItem, mailToUrlValue)) { return(false); } messageItem.Save(SaveMode.ResolveConflicts); messageItem.Load(); mailToItemId = messageItem.Id.ObjectId; } return(true); }
// Token: 0x06000C1E RID: 3102 RVA: 0x00053744 File Offset: 0x00051944 private static int ProcessTokensFromCommaSeparatedString(MessageItem mailToMessage, string mailTo, MailToParser.ProcessingFlags processType, int currentIndex, char[] separators, char terminator) { bool flag = false; int num; while ((num = mailTo.IndexOfAny(separators, currentIndex)) != -1) { string token = mailTo.Substring(currentIndex, num - currentIndex); MailToParser.ProcessToken(mailToMessage, token, processType); if (mailTo[num] == terminator) { currentIndex = num + 1; flag = true; break; } currentIndex = num + 1; } if (!flag) { MailToParser.ProcessToken(mailToMessage, mailTo.Substring(currentIndex), processType); } if (num < 0) { return(num); } return(currentIndex); }
// Token: 0x06000C1F RID: 3103 RVA: 0x000537AC File Offset: 0x000519AC private static void ProcessToken(MessageItem mailToMessage, string token, MailToParser.ProcessingFlags processType) { switch (processType) { case MailToParser.ProcessingFlags.None: break; case MailToParser.ProcessingFlags.ProcessBcc: MailToParser.ProcessRecipients(mailToMessage, token, RecipientItemType.Bcc); return; case MailToParser.ProcessingFlags.ProcessCc: MailToParser.ProcessRecipients(mailToMessage, token, RecipientItemType.Cc); return; case MailToParser.ProcessingFlags.ProcessTo: MailToParser.ProcessRecipients(mailToMessage, token, RecipientItemType.To); return; case MailToParser.ProcessingFlags.ProcessSubject: if (!string.IsNullOrEmpty(token)) { token = HttpUtility.UrlDecode(token); mailToMessage.Subject = token; return; } break; case MailToParser.ProcessingFlags.ProcessBody: if (!string.IsNullOrEmpty(token)) { token = HttpUtility.UrlDecode(token); ItemUtility.SetItemBody(mailToMessage, BodyFormat.TextPlain, token); } break; default: return; } }
// Token: 0x06000C1D RID: 3101 RVA: 0x0005347C File Offset: 0x0005167C private static bool TryMailToParse(MessageItem mailToMessage, string mailTo) { char[] separators = new char[] { ',', '?' }; char[] separators2 = new char[] { ',', '&' }; int num = 0; if (!mailTo.StartsWith("mailto:", StringComparison.OrdinalIgnoreCase)) { return(false); } num += "mailto:".Length; MailToParser.ProcessingFlags processType = MailToParser.ProcessingFlags.ProcessTo; num = MailToParser.ProcessTokensFromCommaSeparatedString(mailToMessage, mailTo, processType, num, separators, '?'); if (num < 0 && num >= mailTo.Length) { return(true); } while (num >= 0 && num < mailTo.Length) { processType = MailToParser.ProcessingFlags.None; if (object.Equals(mailTo[num], 'b') || object.Equals(mailTo[num], 'B')) { if (mailTo.Length > num + "bcc=".Length && string.Compare(mailTo, num, "bcc=", 0, "bcc=".Length, StringComparison.OrdinalIgnoreCase) == 0) { num += "bcc=".Length; processType = MailToParser.ProcessingFlags.ProcessBcc; } else if (mailTo.Length > num + "body=".Length && string.Compare(mailTo, num, "body=", 0, "body=".Length, StringComparison.OrdinalIgnoreCase) == 0) { num += "body=".Length; processType = MailToParser.ProcessingFlags.ProcessBody; } } else if (object.Equals(mailTo[num], 'c') || object.Equals(mailTo[num], 'C')) { if (mailTo.Length > num + "cc=".Length && string.Compare(mailTo, num, "cc=", 0, "cc=".Length, StringComparison.OrdinalIgnoreCase) == 0) { num += "cc=".Length; processType = MailToParser.ProcessingFlags.ProcessCc; } } else if (object.Equals(mailTo[num], 's') || object.Equals(mailTo[num], 'S')) { if (mailTo.Length > num + "subject=".Length && string.Compare(mailTo, num, "subject=", 0, "subject=".Length, StringComparison.OrdinalIgnoreCase) == 0) { num += "subject=".Length; processType = MailToParser.ProcessingFlags.ProcessSubject; } } else if ((object.Equals(mailTo[num], 't') || object.Equals(mailTo[num], 'T')) && mailTo.Length > num + "to=".Length && string.Compare(mailTo, num, "to=", 0, "to=".Length, StringComparison.OrdinalIgnoreCase) == 0) { num += "to=".Length; processType = MailToParser.ProcessingFlags.ProcessTo; } num = MailToParser.ProcessTokensFromCommaSeparatedString(mailToMessage, mailTo, processType, num, separators2, '&'); } return(true); }