VMime
VMimeは、電子メールを送受信するためのC ++クラスライブラリです。
主な機能
- IMAP、POP、SMTPに対応している
- フリーソフトウェア GNU GPLライセンス
- RFCに準拠した実装
- オブジェクト指向のモジュラー設計
- 十分に文書化されている
使い方はこちらに
VMime Book: A Developer’s Guide To VMime
https://www.vmime.org/public/documentation/book/vmime-book.pdf
日本語訳はこちら
https://ken-ohwada.hatenadiary.org/entry/2020/12/31/121901
VMime のインストール
ソースコードをダウンロードしてビルドする。
VMime Bookに、構築とインストールについて掲載されている。
必要なもの
ソースファイルの取得
% git clone git://github.com/kisli/vmime
コンパイルとインストール
% cd vmime
% mkdir build
% cd build
% cmake .. -G "Unix Makefiles"
% cmake --build .
% sudo make install
brew doctor を実行すると、下記のワーニングが出る。
% brew doctor
Unexpected dylibs:
/usr/local/lib/libvmime.1.0.0.dylib
気になるのであれば、 ファイルの配置を変更する。
% bash setup.sh
vmime のプログラム例
vmime::messageBuilder を使って、メッセージを組み立てる。
下記は、VMime Book に掲載されている例
vmime::messageBuilder mb; // 題名 mb.setSubject(vmime::text(”Message subject”)); // 送信アドレス mb.setExpeditor(vmime::mailbox(”me@vmime.org”)); // 受信アドレス mb.getRecipients().appendAddress (vmime::make shared <vmime::mailbox>(”you@vmime.org”)); // 本文 mb.getTextPart()−>setCharset(vmime::charsets::ISO8859 15); mb.getTextPart()−>setText(vmime::make shared <vmime::stringContentHandler> (”This is the text of your message...”) ); // メッセージ構築 vmime::shared ptr<vmime::message>msg = mb.construct(); // メッセージデータを標準出力に出力します vmime::utility::outputStreamAdapter out(std::cout); msg−>genarate(out);
同封されているサンプルコード https://github.com/kisli/vmime/blob/master/examples/example1.cpp
メッサージを送信する
トランスポートサービス (mime::net::transport)を使って、メッサージを送信する。
下記は、VMime Book に掲載されている例
// メッセージ const vmime: : string msgData; // SMTPサーバーのURL vmime:: utility :: url url( smtp://example.com" ); // セッションを作成する vmime::shared ptr <vmime::net::session> sess = vmime::net::session::create(); // トランスポートサービスを作成する vmime::shared ptr <vmime::net::transport> tr = sess−>getTransport(url); // 接続する tr−>connect(); // メッセージ vmime:: utility ::inputStreamStringAdapter is(msgData); // 送信アドレス vmime::mailbox from("me@example.org"); vmime::mailboxList to; // 受信アドレス to.appendMailbox(vmime::make shared <vmime::mailbox>("you@example.org")); // メッセージを送信する tr->send( /∗ expeditor ∗/ from, /∗ recipient(s) ∗/ to, /∗ data ∗/ is, /∗ total length ∗/ msgData.length()); // 切断する tr->disconnect();
同封されているサンプルコード https://github.com/kisli/vmime/blob/master/examples/example6.cpp
全体のコードは、githubに公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/vmime/smtp