■ MailItem 인터페이스를 사용해 메일 아이콘을 설정하는 방법을 보여준다.
▶ CustomAddIn.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
using Microsoft.Office.Interop.Outlook; using System; using System.Runtime.InteropServices; namespace TestProject { /// <summary> /// 커스텀 애드인 /// </summary> public partial class CustomAddIn { //////////////////////////////////////////////////////////////////////////////////////////////////// Field ////////////////////////////////////////////////////////////////////////////////////////// Private #region Field /// <summary> /// 애플리케이션 /// </summary> private Application application = null; /// <summary> /// PR_ICON_INDEX /// </summary> private const string PR_ICON_INDEX = "http://schemas.microsoft.com/mapi/proptag/0x10800003"; #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private //////////////////////////////////////////////////////////////////////////////// Event #region 커스텀 애드인 시작시 처리하기 - CustomAddIn_Startup(sender, e) /// <summary> /// 커스텀 애드인 시작시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void CustomAddIn_Startup(object sender, EventArgs e) { this.application = Application; this.application.NewMailEx += application_NewMailEx; } #endregion #region 커스텀 애드인 셧다운시 처리하기 - CustomAddIn_Shutdown(sender, e) /// <summary> /// 커스텀 애드인 셧다운시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void CustomAddIn_Shutdown(object sender, EventArgs e) { } #endregion #region 애플리케이션 신규 메일 수신시 처리하기 (확장) - application_NewMailEx(entryIDCollection) /// <summary> /// 애플리케이션 신규 메일 수신시 처리하기 (확장) /// </summary> /// <param name="entryIDCollection">엔트리 ID 컬렉션</param> private void application_NewMailEx(string entryIDCollection) { string[] entryIDArray = entryIDCollection.Split(','); foreach(string entryID in entryIDArray) { MailItem mailItem = this.application.ActiveExplorer().Session.GetItemFromID(entryID); if(mailItem != null) { SetExtendedPropertyValue(mailItem, PR_ICON_INDEX, 311); mailItem.Save(); } } } #endregion //////////////////////////////////////////////////////////////////////////////// Function #region VSTO에서 생성한 코드 /// <summary> /// 디자이너 지원에 필요한 메서드입니다. /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요. /// </summary> private void InternalStartup() { this.Startup += new System.EventHandler(CustomAddIn_Startup ); this.Shutdown += new System.EventHandler(CustomAddIn_Shutdown); } #endregion #region 확장된 속성 값 구하기 - GetExtendedPropertyValue(mailitem, propertyName, value) /// <summary> /// 확장된 속성 값 구하기 /// </summary> /// <param name="mailitem">메일 항목</param> /// <param name="propertyName">속성명</param> /// <param name="value">값</param> /// <returns>처리 결과</returns> private bool GetExtendedPropertyValue(MailItem mailitem, string propertyName, ref object value) { PropertyAccessor propertyAccessor = null; try { propertyAccessor = mailitem.PropertyAccessor as PropertyAccessor; value = propertyAccessor.GetProperty(propertyName); return true; } catch(System.Exception) { } finally { if(propertyAccessor != null) { Marshal.ReleaseComObject(propertyAccessor); propertyAccessor = null; } } return false; } #endregion #region 확장된 속성 값 설정하기 - SetExtendedPropertyValue(mailItem, propertyName, value) /// <summary> /// 확장된 속성 값 설정하기 /// </summary> /// <param name="mailItem">메일 항목</param> /// <param name="propertyName">속성명</param> /// <param name="value">값</param> /// <returns>처리 결과</returns> private bool SetExtendedPropertyValue(MailItem mailItem, string propertyName, object value) { PropertyAccessor propertyAccessor = null; try { propertyAccessor = mailItem.PropertyAccessor as PropertyAccessor; propertyAccessor.SetProperty(propertyName, value); return true; } catch { } finally { if(propertyAccessor != null) { Marshal.ReleaseComObject(propertyAccessor); propertyAccessor = null; } } return false; } #endregion } } |