/*
 * blanco Framework
 * Copyright (C) 2004-2007 IGA Tosiki
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 */
package blanco.mail.core;

import java.io.IOException;
import java.net.ConnectException;

import blanco.mail.core.valueobject.BlancoMailMessage;
import blanco.mail.core.valueobject.BlancoMailSetting;
import blanco.mail.core.valueobject.BlancoMailStatistics;

/**
 * メール送信インタフェース。
 * 
 * blancoMailCoreのメール送信のインタフェース仕様を示します。
 * クラス実装を取得するためには、BlancoMailSenderFactory#getInstance を利用します。
 * 
 * @author IGA Tosiki
 */
public interface BlancoMailSender {
    /**
     * メールサーバに、メールを送信します。
     * 
     * @param argSetting
     *            blancoMailの各種設定情報をあらわすバリューオブジェクト。サーバ接続設定や送受信時のデフォルト値などが格納されます。(注意)このクラスのインスタンスは
     *            BlancoMailSettingFactory クラスから取得してください。
     * @param argMessage
     *            送信したいメール本体をあらわすバリューオブジェクト。このオブジェクトにメールの本文や宛先などの情報を入れておきます。
     * @throws ConnectException
     *             メールサーバへの接続失敗に関する例外。
     * @throws IOException
     *             メールデータ送信失敗に関する例外。
     */
    void send(final BlancoMailSetting argSetting,
            final BlancoMailMessage argMessage) throws ConnectException,
            IOException;

    /**
     * 統計情報取得のためのバリューオブジェクトをセットします。
     * 
     * @param argStatistics
     *            統計情報。
     */
    void setStatistics(final BlancoMailStatistics argStatistics);

    /**
     * 統計情報取得のためのバリューオブジェクトをゲットします。
     * 
     * @return 統計情報。
     */
    BlancoMailStatistics getStatistics();
}