CLX C++ Libraries
Home >> smtp >> smtps

Declaration

typedef basic_smtp<ssl::socket> smtps;

Overview

smtps は,SMTPS (SMTP over SSL) 通信を行うためのクラスです.tcp::socket の代わりに ssl::socket を用いることで実現しています. インターフェースは smtp クラスと同様です.ただし, サーバ側の証明書の認証を行う場合は,サーバと接続する(start() メソッドを実行する) 前に verify_locations() メソッドで rootCA 認証書のファイル/ディレクトリ名を指定しておく必要があります (詳細は,ssl::socket を参照して下さい).

CLX における SSL 通信は OpenSSL を用いて実装しています. そのため,SSL 通信関連ライブラリを使用する際には環境に OpenSSL ライブラリがインストールされている必要があります.OpenSSL に関する詳細は, OpenSSL: The Open Source toolkit for SSL/TLS ( OpenSSL 日本語サイト ) を参照して下さい.

Example

example_smtps.cpp

#include <iostream>
#include <string>
#include <sstream>
#include "clx/smtps.h"
#include "clx/date_time.h"

int main(int argc, char* argv[]) {
    if (argc < 6) {
        std::cerr << "usage " << argv[0] << " host id pass from to" << std::endl;
        std::exit(-1);
    }
    
    try {
        clx::smtps session(argv[1], 465);
        session.login(argv[2], argv[3]);
        
        std::string from(argv[3]);
        std::string to(argv[4]);
        
        // create a sample message
        std::stringstream msg;
        clx::date_time now;
        msg << "Date: " << now.to_string<char>("%a, %d %b %Y %H:%M:%S +0900") << "\r\n";
        msg << "From: " << from << "\r\n";
        msg << "To: " << to << "\r\n";
        msg << "Subject: SMTP test mail\r\n";
        msg << "\r\n";
        msg << "This ia test mail for clx::smtp class.\r\n";
        msg << ".\r\n";
        
        session.mail(from, to, msg.str());
        session.finish();
        
        // print message log
        for (size_t i = 0; i < session.responses().size(); i++) {
            std::cout << session.response(i).first << ": " <<
                session.response(i).second << std::endl;
        }
    }
    catch (clx::smtp_error& e) {
        std::cerr << e.what() << std::endl;
        std::exit(-1);
    }
    catch (clx::socket_error& e) {
        std::cerr << e.what() << std::endl;
        std::exit(-1);
    }
    catch (std::runtime_error& e) {
        std::cerr << e.what() << std::endl;
        std::exit(-1);
    }
    
    return 0;
}

Related Pages

  1. CLX C++ Libraries - ssl::socket
  2. CLX C++ Libraries - smtp

References

  1. OpenSSL: The Open Source toolkit for SSL/TLS
  2. OpenSSL 日本語サイト: The Open Source toolkit for SSL/TLS