# Rust로 Outlook COM 애드인 만들기: 초보자를 위한 단계별 가이드 (55자)

---

# # 📌 서론 – 왜 Rust와 Outlook COM을 연결해야 할까?

Outlook은 기업 업무의 핵심 도구이며, **COM (Component Object Model)** 을 통해 다양한 기능을 확장할 수 있습니다.

하지만 전통적으로 C#이나 C++ 같은 언어가 주로 사용되어 왔죠.

최근 **Rust** 가 메모리 안전성과 뛰어난 성능으로 주목받으면서, “Rust로 Outlook 애드인을 만들 수 있을까?” 하는 질문이 떠올랐습니다.

이번 글에서는 **Rust** 로 **COM** 인터페이스를 구현해 Outlook 애드인을 만드는 전 과정을 초보자도 이해할 수 있도록 차근차근 풀어보겠습니다.

> **핵심 키워드**: `Rust COM`, `Outlook 애드인`, `Rust Outlook Add-in`

---

# # 🛠️ 1. 사전 준비 – 개발 환경 설정하기

| 항목 | 내용 | 설치 방법 |

|------|------|-----------|

| **Rust** | 최신 안정 버전 | `rustup update` |

| **cargo‑winrt** | Windows API 바인딩 도구 | `cargo install cargo-winrt` |

| **Visual Studio Build Tools** | C++ 빌드 툴 (linker 필요) | 공식 사이트에서 “Desktop development with C++” 선택 |

| **Outlook** | 테스트용 Outlook 365/2019 | 이미 설치돼 있다면 OK |

> **Tip**: `rustup target add x86_64-pc-windows-msvc` 로 Windows 타깃을 추가해 주세요.

---

# # 📦 2. COM 인터페이스 정의 – IDL 파일 만들기

COM 객체는 **IDL (Interface Definition Language)** 로 인터페이스를 정의합니다.

아래 예시는 Outlook에서 메일을 읽고 제목을 로그에 남기는 간단한 인터페이스입니다.

```
idl

// OutlookAddin.idl

import 'oaidl.idl';

import 'ocidl.idl';

[

    object,

    uuid(6A2F9C4E-7B1A-4D3F-9E6C-1A2B3C4D5E6F),

    oleautomation,

    helpstring('Rust Outlook Add-in Interface')

]
interface IOutlookAddin : IDispatch {

    HRESULT LogMailSubject([in] BSTR subject);

};

```

`midl` 로 컴파일하면 `.h` 와 `.tlb` 파일이 생성됩니다.

```
bash

midl OutlookAddin.idl

```

---

# # 🧩 3. Rust 프로젝트에 COM 바인딩 연결하기

## # 3‑1. `winapi` 와 `com-rs` 의존성 추가

`Cargo.toml` 에 다음을 입력합니다.

```
toml

[dependencies]

winapi = { version = '0.3', features = ['com', 'oleaut32'] }

com-rs = '0.5'

```

## # 3‑2. 인터페이스 구현

```
rust

use com::interfaces::iunknown::IUnknown;

use com::sys::{HRESULT, S_OK};

use com::{com_interface, ComPtr};

com_interface! {

    #[uuid('6A2F9C4E-7B1A-4D3F-9E6C-1A2B3C4D5E6F')]

    pub unsafe interface IOutlookAddin: IUnknown {

        fn LogMailSubject(&self, subject: *const u16) -> HRESULT;

    }

}

pub struct OutlookAddin;

impl IOutlookAddin for OutlookAddin {

    fn LogMailSubject(&self, subject: *const u16) -> HRESULT {

        unsafe {

            let s = widestring::U16CStr::from_ptr_str(subject);

            println!('메일 제목: {}', s.to_string_lossy());

        }

        S_OK

    }

}

```

위 코드에서는 `com-rs` 매크로를 이용해 COM 인터페이스를 구현하고, `LogMailSubject` 메서드가 호출될 때 콘솔에 제목을 출력합니다.

## # 3‑3. DLL 빌드 및 레지스트리 등록

```
bash

cargo build --release

```

생성된 `outlook_addin.dll` 을 **regsvr32** 로 등록합니다.

```
bash

regsvr32 target\release\outlook_addin.dll

```

레지스트리 키는 `HKCR\CLSID\{6A2F9C4E-7B1A-4D3F-9E6C-1A2B3C4D5E6F}` 아래에 자동으로 만들어집니다.

---

# # 📧 4. Outlook에서 애드인 로드하기

1. Outlook → **파일** → **옵션** → **추가 기능**

2. **COM 애드인** 선택 후 **이동** 클릭

3. **추가** 버튼을 눌러 방금 등록한 `outlook_addin.dll` 선택

이제 새로운 메뉴나 버튼을 만들지는 않았지만, Outlook이 메일을 열 때마다 `LogMailSubject` 를 호출하도록 이벤트 핸들러를 연결하면 됩니다.

예를 들어 `ItemAdd` 이벤트에서 `IOutlookAddin::LogMailSubject` 를 호출하도록 VBA 혹은 C# 브리지를 만들 수 있습니다.

---

# # 🏁 결론 – Rust COM 애드인, 이제 시작해 보세요!

- **안전성**: Rust의 메모리 안전성 덕분에 COM 버그(특히 포인터 오류)를 크게 줄일 수 있습니다.

- **성능**: 네이티브 코드와 동일한 속도를 제공하므로 대용량 메일 처리에도 강합니다.

- **생태계**: `winapi`, `com-rs`, `cargo-winrt` 같은 도구가 점점 풍부해지고 있어, 앞으로 더 복잡한 Outlook 플러그인도 충분히 구현 가능합니다.

> **다음 단계**: 이번 글에서 만든 기본 인터페이스에 UI 버튼을 추가하고, 실제 메일 본문을 편집하는 기능을 구현해 보세요.

> **행동 유도**: 오늘 소개한 레포지토리를 **GitHub** 에 포크하고, 직접 빌드해 본 뒤 질문이 있으면 댓글로 알려 주세요! 🎉

---

*키워드: **Rust COM**, **Outlook 애드인**, **Rust Outlook Add-in***
