CLX C++ Libraries - smtps
Author: clown

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