Skip to main content

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

Published 3 min readMarkdown

# 📌 서론 – 왜 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

No comments yet. Be the first to comment.

More from this blog