/// <summary> /// TaskRequestItemから、宛先(Recipient)のリスト取得する /// </summary> /// <param name="Item">TaskRequestItemオブジェクト</param> /// <returns>List<Outlook.Recipient></returns> private static List <Outlook.Recipient> GetRecipientList(Outlook.TaskRequestItem item) { Outlook.TaskItem task = item.GetAssociatedTask(false); Outlook.Recipients recipients = task.Recipients; List <Outlook.Recipient> recipientsList = new List <Outlook.Recipient>(); if (recipients.Count == 0) { //ReportItemのままだと送信先が取れないため、 //いったんIPM.Noteとして別名保存⇒ロードしてからRecipientsを取得する Outlook.TaskRequestItem copiedItem = item.Copy(); copiedItem.MessageClass = "IPM.Note"; copiedItem.Save(); //IPM.Noteとして保存してからロードするとMailItemとして扱えるようになる var newReportItem = Globals.ThisAddIn.Application.Session.GetItemFromID(copiedItem.EntryID); Outlook.MailItem newMailItem = newReportItem as Outlook.MailItem; recipientsList = GetRecipientList(newMailItem); copiedItem.Delete(); return(recipientsList); } if (IsSendTaskRequest(task)) { //これから送信するTaskRequestItem for (int i = 1; i <= recipients.Count; i++) { recipientsList.Add(recipients[i]); } } else { //受信したTaskRequestItem Outlook.Recipient ownerRecipient = Globals.ThisAddIn.Application.Session.CreateRecipient(task.Owner); recipientsList.Add(ownerRecipient); } return(recipientsList); }
/// <summary> /// TaskRequestItemの送信者情報(Dto)を取得する /// </summary> /// <param name="Item">TaskRequestItemオブジェクト</param> /// <returns>送信者の宛先情報DTO(送信者が取得できない場合null)</returns> private static RecipientInformationDto GetSenderInformation(Outlook.TaskRequestItem item) { Outlook.Recipient recipient; Outlook.ContactItem contactItem; if (IsSendTaskRequest(item.GetAssociatedTask(false))) { //これから送信するTaskRequestItem recipient = Globals.ThisAddIn.Application.Session.CurrentUser; contactItem = null; } else { //受信したTaskRequestItem Outlook.TaskItem task = item.GetAssociatedTask(false); recipient = task.Recipients[1]; try { contactItem = recipient.AddressEntry.GetContact(); } catch { contactItem = null; } } Outlook.AddressEntry addressEntry = recipient.AddressEntry; Outlook.ExchangeUser exchUser = getExchangeUser(addressEntry); RecipientInformationDto senderInformation = null; // 送信者のExchangeUserが取得できた場合 if (exchUser != null) { senderInformation = new RecipientInformationDto(exchUser.Name, exchUser.Department, exchUser.CompanyName, FormatJobTitle(exchUser.JobTitle), Outlook.OlMailRecipientType.olOriginator); } // Exchangeアドレス帳にないが、「連絡先」にいる場合 else if (contactItem != null) { senderInformation = new RecipientInformationDto(contactItem.FullName, contactItem.Department, contactItem.CompanyName, FormatJobTitle(contactItem.JobTitle), Outlook.OlMailRecipientType.olOriginator); } // Exchangeアドレス帳にも「連絡先」にもない場合 else { string displayName; if (recipient != null && !Utility.IsEmailAddress(recipient.Name)) { displayName = GetDisplayNameAndAddress(recipient); } else if (addressEntry != null) { displayName = FormatDisplayNameAndAddress(addressEntry.Name, addressEntry.Address); } else if (recipient != null) { displayName = recipient.Name; } else { displayName = "※取得できませんでした"; //TODO:メールヘッダーのFromから取得する } senderInformation = new RecipientInformationDto(displayName, Outlook.OlMailRecipientType.olOriginator); } return(senderInformation); }