/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCCbatSendMailUtil
*   ソースファイル名：JCCbatSendMailUtil.java
*   作成者          ：富士通
*   日付            ：2011年05月07日
*＜機能概要＞
*   メール送信情報を「メール送信テーブル」「メールアドレステーブル」
*   「本文非定型テーブル」「明細本文非定型テーブル」「添付ファイルテーブル」
*   にそれぞれ格納する部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者    修正内容
*   v1.00.00    2011/05/07   富士通    新規作成
*
**********************************************************************/
package eo.business.common;

import java.util.HashMap;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;
import java.io.File;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.log.JBSbatLogUtil;
import eo.common.util.JCCOracleSeqUtil;
import eo.business.util.table.JBSbatCC_T_MAIL_SEND;
import eo.business.util.table.JBSbatCC_T_MLAD;
import eo.business.util.table.JBSbatCC_T_TEXT_HTKB;
import eo.business.util.table.JBSbatCC_T_DTL_TEXT_HTKB;
import eo.business.util.table.JBSbatCC_T_TEMP_FILE;


import eo.framework.application.JBSbatBatchInvoker;
import eo.framework.application.JCCbatFrameworkException;
import eo.framework.db.JBSbatSQLAccess;

/**
 * メール送信バッチ共通理部品です。
 * <BR>
 * @author 富士通
 */
public class JCCbatSendMailUtil
{
	//--------------------------------------------------------------
	// 定数文字列
	//--------------------------------------------------------------
	/** テーブル名(メール送信) */
	public static final String TABLE_NAME_SEND = JBSbatCC_T_MAIL_SEND.TABLE_NAME;
	
	/** テーブル名(メールアドレス) */
	public static final String TABLE_NAME_MLAD = JBSbatCC_T_MLAD.TABLE_NAME;
	
	/** テーブル名(本文非定型) */
	public static final String TABLE_NAME_HTKB = JBSbatCC_T_TEXT_HTKB.TABLE_NAME;
	
	/** テーブル名(明細本文非定型) */
	public static final String TABLE_NAME_DTL_HTKB = JBSbatCC_T_DTL_TEXT_HTKB.TABLE_NAME;
	
	/** テーブル名(添付ファイル) */
	public static final String TABLE_NAME_TEMP = JBSbatCC_T_TEMP_FILE.TABLE_NAME;
	
	/** メール送信番号 */
	public static final String MAIL_SEND_NO = JBSbatCC_T_MAIL_SEND.MAIL_SEND_NO;

	/** メール送信番号用シーケンス名 */
	public static final String SEQ_MAIL_SEND_NO = "SEQ_" + MAIL_SEND_NO;	

	/** メール受信番号 */
	public static final String MAIL_RCV_NO = null;	
	
	/** メール送信ステータス */
	public static final String MAIL_SEND_STAT = "001";

	/** メールコード */
	public static final String MAIL_CD = JBSbatCC_T_MAIL_SEND.MAIL_CD;

	/** メール送信パターンコード */
	public static final String MAIL_SEND_PATTERN_CD = JBSbatCC_T_MAIL_SEND.MAIL_SEND_PATTERN_CD;

	/** メール送信予定年月日時分秒 */
	public static final String MAIL_SEND_RSV_DTM = JBSbatCC_T_MAIL_SEND.MAIL_SEND_RSV_DTM;

	/** 送信元アドレス */
	public static final String MLAD_FROM = "MLAD_FROM";

	/** 送信元アドレス表示名 */
	public static final String MLAD_FROM_NM = "MLAD_FROM_NM";
	
	/** 送信先アドレスTO */
	public static final String MLAD_TO = "MLAD_TO";	

	/** 送信先アドレスTO表示名 */
	public static final String MLAD_TO_NM = "MLAD_TO_NM";	
	
	/** 送信先アドレスCC */
	public static final String MLAD_CC = "MLAD_CC";	

	/** 送信先アドレスCC表示名 */
	public static final String MLAD_CC_NM = "MLAD_CC_NM";	
	
	/** 送信先アドレスBCC */
	public static final String MLAD_BCC = "MLAD_BCC";	

	/** 送信先アドレスBCC表示名 */
	public static final String MLAD_BCC_NM = "MLAD_BCC_NM";
	
	/** 本文非定型部置換文字 */
	public static final String TEXT_HTK_CKAN_MOJI = JBSbatCC_T_TEXT_HTKB.TEXT_HTK_CKAN_MOJI;
														
	/** 本文非定型部置換文字識別用連番 */
	public static final String TEXT_HTKB_SEQ = JBSbatCC_T_TEXT_HTKB.TEXT_HTKB_SEQ;
	
	/** 明細本文非定型部置換文字 */
	public static final String DTL_TEXT_HTK_CKAN_MOJI = JBSbatCC_T_DTL_TEXT_HTKB.DTL_TEXT_HTK_CKAN_MOJI;
	
	/** 明細本文非定型部置換文字識別用連番 */
	public static final String DTL_TEXT_HTKB_SEQ = JBSbatCC_T_DTL_TEXT_HTKB.DTL_TEXT_HTKB_SEQ;	
	
	/** メールアドレス番号 */
	public static final String MLAD_NO = JBSbatCC_T_MLAD.MLAD_NO;
	
	/** メールアドレス表示名 */
	public static final String MLAD_DSP_NM = JBSbatCC_T_MLAD.MLAD_DSP_NM;	
	
	/** メールアドレス番号用シーケンス名 */
	public static final String SEQ_MLAD_NO = "SEQ_" + MLAD_NO;	
	
	/** エラーカウンタ */
	public static final int ERR_COUNTER = 0;

	/** メール送信実施年月日時分秒 */
	public static final String MAIL_SEND_JSSI_DTM = null;

	/** 電子ファイル管理情報 */
	public static final String EFILE_IF = "EFILE_IF";
	
	/** 添付ファイル番号 */
	public static final String TEMP_FILE_NO = JBSbatCC_T_TEMP_FILE.TEMP_FILE_NO;	
	
	/** 添付ファイル番号用シーケンス名 */
	public static final String SEQ_TEMP_FILE_NO = "SEQ_" + TEMP_FILE_NO;	
	
	/** メール明細情報 */
	public static final String MAIL_DTL_IF = "MAIL_DTL_IF";	
	
	/** メールヘッダー情報 */
	public static final String MAIL_HEADER_IF = "MAIL_HEADER_IF";

	/** メール送信停止年月日時分秒 */
	public static final String MAIL_SEND_STP_DTM = null;	
	
	/** 登録年月日時分秒 */
	public static final String ADD_DTM = JBSbatCC_T_MAIL_SEND.ADD_DTM;

	/** 登録オペレータアカウント */
	public static final String ADD_OPEACNT = JBSbatCC_T_MAIL_SEND.ADD_OPEACNT;

	/** 更新年月日時分秒 */
	public static final String UPD_DTM = JBSbatCC_T_MAIL_SEND.UPD_DTM;

	/** 更新オペレータアカウント */
	public static final String UPD_OPEACNT = JBSbatCC_T_MAIL_SEND.UPD_OPEACNT;

	/** 削除年月日時分秒 */
	public static final String DEL_DTM = null;

	/** 削除オペレータアカウント */
	public static final String DEL_OPEACNT = null;

	/** 無効フラグ */
	public static final String MK_FLG = "0";
	
	//--------------------------------------------------------------
	// 存在チェック検索条件キャッシュ領域
	//--------------------------------------------------------------
	private static ArrayList<String> mailSearchArray = new ArrayList<String>();
	private static ArrayList<String> mailDtlSearchArray = new ArrayList<String>();
	private static ArrayList<String> efileSearchArray = new ArrayList<String>();
	private static HashMap<String, Long> efileSizeCacheMap = new HashMap<String, Long>();
	
	/**
	 * メール送信情報格納処理です。
	 * 電子メールの送信情報をDBに格納します。
	 * 
	 * @param commonItem 業務共通電文
	 * @param mapArgs 送信情報を格納したHashMap。内容は以下。<BR>
	 * <pre>
	 *  MAIL_CD(String)                  メールのフォーマットを識別するコードを設定する。【必須】
	 *  MAIL_SEND_RSV_DTM(String)        送信予定年月日時分秒を設定する。
	 *  MLAD_FROM(String)                メールの送信元アドレス（FROM）を設定する。設定されていない場合はメールマスタから取得する。
	 *  MLAD_FROM_NM(String)             メール送信元に表示する名前を設定する。
	 *  MAIL_SEND_PATTERN_CD(String)     メールの送信パターンを設定する。（02:ﾃﾞｨﾚｲﾄﾞ、03:同報）【必須】
	 *  MLAD_TO(String[])                メールの送信先アドレス（TO）を設定する。１件以上指定すること。【必須】複数設定可能。
	 *  MLAD_TO_NM(String[])             メールの送信先アドレス（TO）に表示する名前を設定する。指定する場合は要素数と順番をMLAD_TOに合わせること。
	 *  MLAD_CC(String[])                メールの送信先アドレス（CC）を設定する。複数設定可能。
	 *  MLAD_CC_NM(String[])             メールの送信先アドレス（CC）に表示する名前を設定する。指定する場合は要素数と順番をMLAD_CCに合わせること。
	 *  MLAD_BCC(String[])               メールの送信先アドレス（BCC）を設定する。複数設定可能
	 *  MLAD_BCC_NM(String[])            メールの送信先アドレス（BCC）に表示する名前を設定する。指定する場合は要素数と順番をMLAD_BCCに合わせること。
	 *  TEXT_HTK_CKAN_MOJI(String[])     本文に埋め込む非定型な置換文字列を設定する。複数設定可能
	 *  EFILE_IF(HashMap)                電子ファイル管理情報を格納したHashMap。
	 *                                      keyには、電子ファイル管理番号を設定する。
	 *                                      value値には、電子ファイルの名称を設定する。(String)
	 *  MAIL_DTL_IF(HashMap)             メール明細情報を格納したHashMap。
	 *                                      keyには、メール明細のフォーマットを識別するコードを設定する。
	 *                                      value値には、明細に埋め込む非定型名文字列を設定する。(String[])複数指定可能。
	 *  MAIL_HEADER_IF(HashMap)          メールヘッダー情報をを格納したHashMap。
	 *                                      keyには、メールヘッダーのKEYを設定する。
	 *                                      value値には、メールヘッダーのKEYに設定したい値を設定する。(String)
     * </pre>
     * @return HashMap map             採番部品で発行した採番値をセットしたHashMap。
     *                                  key = "MAIL_SEND_NO", value = 採番したメール送信番号文字列
     *                                  key = "MLAD_NO", value = 採番したメールアドレス番号文字列の配列
     *                                  key = "TEMP_FILE_NO", value = 採番した添付ファイル番号文字列の配列
	 * @exception JCCbatFrameworkException
	 * @exception Exception
	 */
	public static HashMap<String, Object> insertTMailSend(JBSbatCommonItem commonItem, HashMap<String, Object> mapArgs)
		throws JCCbatFrameworkException, Exception
	{
		// 結果格納要のHashaMap
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		
		// ローカルのHashMapに入力値をコピー
		HashMap<String, Object> localMap = new HashMap<String, Object>();
		localMap.putAll(mapArgs);
		
		// 入力パラメータ検査
		String chkStr = chkParam(commonItem, localMap);
		if("".equals(chkStr) == false)
		{
			throw new JCCbatFrameworkException(chkStr);
		}
		
		// メール送信情報のDB登録
		chkStr = setDbMailSend(commonItem, localMap, resultMap);
		if("".equals(chkStr) == false)
		{
			resultMap.clear();
			throw new JCCbatFrameworkException(chkStr);
		}

		// メールアドレス情報はそれぞれのアドレスの数分DB登録
		ArrayList<String> adrNoList = new ArrayList<String>();

		// メールアドレス情報のDB登録(FROM)
		String mladFrom = (String)localMap.get(MLAD_FROM);
		if(mladFrom != null)
		{
			String mladFromNm = (String)localMap.get(MLAD_FROM_NM);
			String mladNm = null;
			if(mladFromNm != null)
			{
				mladNm = mladFromNm;
			}
			chkStr = setDbMailAddress(commonItem, localMap, resultMap, adrNoList, mladFrom, mladNm, "02");
			if("".equals(chkStr) == false)
			{
				resultMap.clear();
				throw new JCCbatFrameworkException(chkStr);
			}
		}
		// メールアドレス情報のDB登録(TO)
		String[] mladTo = (String[])localMap.get(MLAD_TO);
		if(mladTo != null)
		{
			String[] mladToNm = (String[])localMap.get(MLAD_TO_NM);
			for(int i = 0; i < mladTo.length; i++)
			{
				String mladNm = null;
				if(mladToNm != null)
				{
					mladNm = mladToNm[i];
				}
				chkStr = setDbMailAddress(commonItem, localMap, resultMap, adrNoList, mladTo[i], mladNm, "01");
				if("".equals(chkStr) == false)
				{
					resultMap.clear();
					throw new JCCbatFrameworkException(chkStr);
				}
			}
		}
		
		// メールアドレス情報のDB登録(CC)
		String[] mladCc = (String[])localMap.get(MLAD_CC);
		if(mladCc != null)
		{
			String[] mladCcNm = (String[])localMap.get(MLAD_CC_NM);
			for(int i = 0; i < mladCc.length; i++)
			{
				String mladNm = null;
				if(mladCcNm != null)
				{
					mladNm = mladCcNm[i];
				}
				chkStr = setDbMailAddress(commonItem, localMap, resultMap, adrNoList, mladCc[i], mladNm, "03");
				if("".equals(chkStr) == false)
				{
					resultMap.clear();
					throw new JCCbatFrameworkException(chkStr);
				}
			}
		}
		
		// メールアドレス情報のDB登録(BCC)
		String[] mladBcc = (String[])localMap.get(MLAD_BCC);
		if(mladBcc != null)
		{
			String[] mladBccNm = (String[])localMap.get(MLAD_BCC_NM);
			for(int i = 0; i < mladBcc.length; i++)
			{
				String mladNm = null;
				if(mladBccNm != null)
				{
					mladNm = mladBccNm[i];
				}
				chkStr = setDbMailAddress(commonItem, localMap, resultMap, adrNoList, mladBcc[i], mladNm, "04");
				if("".equals(chkStr) == false)
				{
					resultMap.clear();
					throw new JCCbatFrameworkException(chkStr);
				}
			}
		}
		// 採番したメールアドレス番号を結果コードのHashMapにセット
		String[] adrNo = new String[adrNoList.size()];
		for(int i = 0; i < adrNoList.size(); i++)
		{
			adrNo[i] = adrNoList.get(i);
		}
		resultMap.put(MLAD_NO, adrNo);
		
		// 本文非定型部情報のDB登録
		String[] textHtkb = (String[])localMap.get(TEXT_HTK_CKAN_MOJI);
		if(textHtkb != null)
		{
			for(int i = 0; i < textHtkb.length; i++)
			{
				chkStr = setDbTextHtkb(commonItem, localMap, resultMap, textHtkb[i], i);
				if("".equals(chkStr) == false)
				{
					resultMap.clear();
					throw new JCCbatFrameworkException(chkStr);
				}
			}
		}
		
		// 明細本文非定型部情報のDB登録
		HashMap<String, Object> dtlMap = new HashMap<String, Object>();
		dtlMap = (HashMap)localMap.get(MAIL_DTL_IF);
		if(dtlMap != null)
		{
			// DB登録数用カウンタ
			int num = 0;
			// 存在する全てのキーを取得
			Set keySet = dtlMap.keySet();
			Iterator keyIte = keySet.iterator();
			while(keyIte.hasNext())
			{
				// メール明細コード
				String key = (String)keyIte.next();
				// 明細本文非定型置換文字
				String[] value = (String[])dtlMap.get(key);
				for(int i = 0; i < value.length; i++)
				{
					chkStr = setDbDtlHtkb(commonItem, localMap, resultMap, key, value[i], num);
					if("".equals(chkStr) == false)
					{
						resultMap.clear();
						throw new JCCbatFrameworkException(chkStr);
					}
					num++;
				}
			}
		}
		
		// 添付ファイル情報のDB登録
		HashMap<String, String> efileMap = new HashMap<String, String>();
		efileMap = (HashMap)localMap.get(EFILE_IF);
		ArrayList<String> fileNoList = new ArrayList<String>();
		if(efileMap != null)
		{
			// 電子ファイル管理番号とファイル名を取得
			Set keySet = efileMap.keySet();
			
			// 2011/11/18 電子ファイルの合計サイズをチェック start
			chkStr =  chkEfileSize(commonItem, (String[])keySet.toArray(new String[0]));
			if("".equals(chkStr) == false)
			{
				throw new JCCbatFrameworkException(chkStr);
			}
			
			Iterator keyIte = keySet.iterator();
			while(keyIte.hasNext())
			{
				// 電子ファイル管理番号
				String key = (String)keyIte.next();
				// 電子ファイル名
				String value = (String)efileMap.get(key);
				
				chkStr = setDbTempFile(commonItem, localMap, resultMap, fileNoList, key, value);
				if("".equals(chkStr) == false)
				{
					resultMap.clear();
					throw new JCCbatFrameworkException(chkStr);
				}
			}
			// 添付ファイル番号を結果コードのHashMapにセット
			String[] fileNo = new String[fileNoList.size()];
			resultMap.put(TEMP_FILE_NO, fileNo);
			for(int i = 0; i < fileNoList.size(); i++)
			{
				fileNo[i] = fileNoList.get(i);
			}
			resultMap.put(TEMP_FILE_NO, fileNo);
		}
		// 結果をデバッグログに出力(PT時のみ)
		// 2013/03/08 FST_mukuo)不要のため削除 start
		//printResultTableInsert(commonItem, (String)resultMap.get(MAIL_SEND_NO));
		// 2013/03/08 FST_mukuo)不要のため削除 end
		
		return resultMap;
	}
	
	/**
	 * 入力パラメータを検査します
	 * @param commonItem 業務共通電文
	 * @param localMap   送信情報を格納したHashMap。
	 * @return String    チェック結果メッセージ
	 *                     正常時:空文
	 *                     異常時:エラーメッセージ
	 * @exception Exception
	 */
	private static String chkParam(JBSbatCommonItem commonItem, HashMap<String, Object> localMap) throws Exception
	{
		// チェック結果格納領域
		String resultStr = "";
		
		// 業務共通電文クラスチェック
		if(commonItem == null)
		{
			resultStr = "JBSbatCommonItemがnullです。";
			return resultStr;
		}
		// DBコネクションチェック
		if(commonItem.getConnection() == null)
		{
			resultStr = "DBコネクションがnullです。";
			return resultStr;
		}
		// メールコード
		String mailCode = (String)localMap.get(MAIL_CD);
		if(mailCode == null)
		{
			resultStr = "メールコードがnullです。";
			return resultStr;
		}
		if(JCCBatCommon.isKetasuu1(mailCode, "10") == false)
		{
			resultStr = "メールコードの桁数1チェックエラー。10桁固定。値:" + mailCode;
			return resultStr;
		}
		if(JCCBatCommon.isHannkakuESuuji1(mailCode) == false)
		{
			resultStr = "メールコードの半角英数字1チェックエラー。値:" + mailCode;
			return resultStr;
		}
		// 送信予定年月日時分秒
		String mailSendRsvDtm = (String)localMap.get(MAIL_SEND_RSV_DTM);
		if(mailSendRsvDtm == null)
		{
			resultStr = "送信予定年月日時分秒がnullです。";
			return resultStr;			
		}
		if(JCCBatCommon.isDayHour1(mailSendRsvDtm) == false || "".equals(mailSendRsvDtm))
		{
			resultStr = "送信予定年月日時分秒の日時1チェックエラー。yyyyMMddHHmmssSSS形式固定。値:" + mailSendRsvDtm;
			return resultStr;
		}
		// 送信元アドレス(指定有り時)
		String mladFrom = (String)localMap.get(MLAD_FROM);
		if(mladFrom != null)
		{
			if(JCCBatCommon.isKetasuu2(mladFrom, "1", "256") == false)
			{
				resultStr = "送信元アドレスの桁数2チェックエラー。1〜256桁の範囲。値:" + mladFrom;
				return resultStr;
			}
			if(JCCBatCommon.isEMail1(mladFrom) == false)
			{
				resultStr = "送信元アドレスのe-mailチェックエラー。メールアドレスの形式誤り。値:" + mladFrom;
				return resultStr;
			}
		}
		// 送信元アドレス名
		String mladFromNm = (String)localMap.get(MLAD_FROM_NM);
		if(mladFromNm != null)
		{
			if(mladFrom == null)
			{
				resultStr = "送信元アドレスFROMを指定せずに表示名だけを指定する事はできません。";
				return resultStr;
			}
			if(JCCBatCommon.isKetasuu2(mladFromNm, "1", "121") == false)
			{
				resultStr = "送信元アドレスFROM表示名の桁数2チェックエラー。1〜121桁の範囲。値:" + mladFromNm;
				return resultStr;
			}
		}
		// メール送信パターンコード
		String mailSendPatCode = (String)localMap.get(MAIL_SEND_PATTERN_CD);
		if(mailSendPatCode == null)
		{
			resultStr = "メール送信パターンコードがnullです。";
			return resultStr;
		}
		if("02".equals(mailSendPatCode) == false && "03".equals(mailSendPatCode) == false)
		{
			resultStr = "メール送信パターンコードは02または03の指定でなければなりません。値:" + mailSendPatCode;
			return resultStr;
		}
		// メール送信先アドレスTO, TO表示名
		String[] mladTo = (String[])localMap.get(MLAD_TO);
		String[] mladToNm = (String[])localMap.get(MLAD_TO_NM);
		if(mladTo == null)
		{
			resultStr = "送信先アドレスTO指定が0件です。";
			return resultStr;
		}
		if(mladToNm != null)
		{
			if(mladToNm.length != mladTo.length)
			{
				resultStr = "送信先アドレスTOの表示要素数はMLAD_TOの要素数と同一である必要があります。";
				return resultStr;
			}
		}
		for(int i = 0; i < mladTo.length; i++)
		{
			if(JCCBatCommon.isKetasuu2(mladTo[i], "1", "256") == false)
			{
				resultStr = "送信先アドレスTOの桁数2チェックエラー。1〜256桁の範囲。値:" + mladTo[i];
				return resultStr;
			}
			if(JCCBatCommon.isEMail1(mladTo[i]) == false || mladTo[i] == null)
			{
				resultStr = "送信先アドレスTOのe-mailチェックエラー。メールアドレスの形式誤り。値:" + mladTo[i];
				return resultStr;
			}
			if(mladToNm != null)
			{
				if(mladToNm[i] != null)
				{
					if(JCCBatCommon.isKetasuu2(mladToNm[i], "1", "121") == false)
					{
						resultStr = "送信先アドレスTO表示名の桁数2チェックエラー。1〜121桁の範囲。値:" + mladToNm[i];
						return resultStr;
					}
				}
			}
		}
		// メール送信先アドレスCC,CC表示名(指定有り時)
		String[] mladCc = (String[])localMap.get(MLAD_CC);
		String[] mladCcNm = (String[])localMap.get(MLAD_CC_NM);
		if(mladCc != null)
		{
			if(mladCcNm != null)
			{
				if(mladCcNm.length != mladCc.length)
				{
					resultStr = "送信先アドレスCCの表示要素数はMLAD_CCの要素数と同一である必要があります。";
					return resultStr;
				}
			}
			for(int i = 0; i < mladCc.length; i++)
			{
				if(JCCBatCommon.isKetasuu2(mladCc[i], "1", "256") == false)
				{
					resultStr = "送信先アドレスCCの桁数2チェックエラー。1〜256桁の範囲。値:" + mladCc[i];
					return resultStr;
				}
				if(JCCBatCommon.isEMail1(mladCc[i]) == false || mladCc[i] == null)
				{
					resultStr = "送信先アドレスCCのe-mailチェックエラー。メールアドレスの形式誤り。値:" + mladCc[i];
					return resultStr;
				}
				if(mladCcNm != null)
				{
					if(mladCcNm[i] != null)
					{
						if(JCCBatCommon.isKetasuu2(mladCcNm[i], "1", "121") == false)
						{
							resultStr = "送信先アドレスCC表示名の桁数2チェックエラー。1〜121桁の範囲。値:" + mladCcNm[i];
							return resultStr;
						}
					}
				}
			}
		}
		// メール送信先アドレスBCC(指定有り時)
		String[] mladBcc = (String[])localMap.get(MLAD_BCC);
		String[] mladBccNm = (String[])localMap.get(MLAD_BCC_NM);
		if(mladBcc != null && mladBcc.length > 0)
		{
			if(mladBccNm != null)
			{
				if(mladBccNm.length != mladBcc.length)
				{
					resultStr = "送信先アドレスBCCの表示要素数はMLAD_BCCの要素数と同一である必要があります。";
					return resultStr;
				}
			}
			for(int i = 0; i < mladBcc.length; i++)
			{
				if(JCCBatCommon.isKetasuu2(mladBcc[i], "1", "256") == false)
				{
					resultStr = "送信先アドレスBCCの桁数2チェックエラー。1〜256桁の範囲。値:" + mladBcc[i];
					return resultStr;
				}
				if(JCCBatCommon.isEMail1(mladBcc[i]) == false || mladBcc[i] == null)
				{
					resultStr = "送信先アドレスBCCのe-mailチェックエラー。メールアドレスの形式誤り。値:" + mladBcc[i];
					return resultStr;
				}
				if(mladBccNm != null)
				{
					if(mladBccNm[i] != null)
					{
						if(JCCBatCommon.isKetasuu2(mladBccNm[i], "1", "121") == false)
						{
							resultStr = "送信先アドレスBCC表示名の桁数2チェックエラー。1〜121桁の範囲。値:" + mladBccNm[i];
							return resultStr;
						}
					}
				}
			}
		}
		// メールヘッダー情報(MAXサイズはプロパティファイルに依存)
		HashMap headMap = (HashMap)localMap.get(MAIL_HEADER_IF);
		String	headStr = null;
		if(headMap != null)
		{
			headStr = "";
			Set keySet = headMap.keySet();
			Iterator keyIte = keySet.iterator();
			while(keyIte.hasNext())
			{
				// ヘッダーキー
				String key = (String)keyIte.next();
				// ヘッダー値
				String value = (String)headMap.get(key);
				// キーと値を結合して改行コードを付与
				String crlf = System.getProperty("line.separator");
				headStr = headStr + key + ":" + value + crlf;
			}
			// プロパティファイルからヘッダーサイズのMAX値を取得
			String sizeStr = JCCBatCommon.getApplicationConst("SEND_MAIL_HEAD_MAX_SIZE");
			if(sizeStr == null || "".equals(sizeStr))
			{
				//指定されていない場合はデフォルトサイズ(30000桁)をMAXとする
				sizeStr = "30000";
			}
			if(JCCBatCommon.isKetasuu2(headStr, "1", sizeStr) == false)
			{
				resultStr = "ヘッダー桁数2チェックエラー。";
				resultStr = resultStr + "1〜" + sizeStr + "桁の範囲。";
				resultStr = resultStr + "値:" + String.valueOf(headStr.length()) + "桁";
				return resultStr;
			}
			localMap.put("MAIL_HEADER_STR_IF", headStr);
		}
		
		// システム日時
		String sysDate = JCCBatCommon.getSysDateTimeStamp();
		if(sysDate == null)
		{
			resultStr = "システム日時を取得できませんでした。";
			return resultStr;
		}
		// システム日時を登録年月日としてHashMapにセット
		localMap.put(ADD_DTM, sysDate);
		// 更新日付はシステム日時同様の値とする
		localMap.put(UPD_DTM, sysDate);
		
		// ユーザーID
		String userId = commonItem.getBatchUserId();
		if(userId == null)
		{
			resultStr = "ユーザーIDを取得できませんでした。";
			return resultStr;
		}
		if(JCCBatCommon.isKetasuu2(userId, "6", "10") == false)
		{
			resultStr = "ユーザーIDの桁数2チェックエラー。6〜10桁の範囲。値:" + userId;
			return resultStr;
		}
		// ユーザーIDをオペレータアカウントとしてHashMapにセット
		localMap.put(ADD_OPEACNT, userId);
		// 更新者IDは登録IDと同様の値とする
		localMap.put(UPD_OPEACNT, userId);	
		
		
		// 2013/03/08 FST_mukuo)既に一度検索している場合は存在チェックをスキップ start
		if(mailSearchArray.contains(mailCode) == false)
		// 2013/03/08 FST_mukuo)既に一度検索している場合は存在チェックをスキップ end
		{
			// メールマスタにメールコードと送信元アドレスを問い合わせ
			JBSbatSQLAccess dbAccessCd = null;
			try
			{
				// DBアクセス用のオブジェクト
				// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応
				//dbAccessCd = new JBSbatSQLAccess(commonItem, TABLE_NAME_SEND);
				dbAccessCd = JBSbatBatchInvoker.getFwDbAccessMap(TABLE_NAME_SEND);
				if(null == dbAccessCd)
				{
					dbAccessCd = new JBSbatSQLAccess(commonItem, TABLE_NAME_SEND);
					JBSbatBatchInvoker.putFwDbAccessMap(TABLE_NAME_SEND, dbAccessCd);
					commonItem.getLogPrint().printDebugLog("SQLAccessインスタンス化(" + TABLE_NAME_SEND + ")");
				}
				// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応
				// パラメタ組み立て
				JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
				// 問い合わせるメールコードを指定
				paramList.setValue(mailCode);
				// SQL実行
				dbAccessCd.selectBySqlDefine(paramList, "CC_SELECT_001");
				// 結果を取得
				JBSbatCommonDBInterface cdMap = dbAccessCd.selectNext();
				// 検索結果が０件の場合
				if(cdMap == null)
				{
					resultStr = "メールマスタに指定のメールコードが存在しません。値:" + mailCode;
					return resultStr;
				}
				// 送信元アドレスを指定していない場合はマスタから取得
				if(mladFrom == null)
				{
					mladFrom = cdMap.getString("SENDM_MLAD");
					if(mladFrom == null)
					{
						resultStr = "送信元アドレスをメールマスタから取得できませんでした。";
						return resultStr;
					}
					if(JCCBatCommon.isKetasuu2(mladFrom, "1", "256") == false)
					{
						resultStr = "送信元アドレスの桁数2チェックエラー。1〜256桁の範囲。値:" + mladFrom;
						return resultStr;
					}
					if(JCCBatCommon.isEMail1(mladFrom) == false)
					{
						resultStr = "送信元アドレスのe-mailチェックエラー。メールアドレスの形式誤り。値:" + mladFrom;
						return resultStr;
					}
					// 送信元アドレスを設定
					localMap.put(MLAD_FROM, mladFrom);
					// 送信元アドレス表示名をマスタから取得(取得できなくてもエラー無し)
					if(mladFromNm == null)
					{
						mladFromNm = cdMap.getString("SENDM_MLAD_DSP_NM");
						if(mladFromNm != null)
						{
							if(JCCBatCommon.isKetasuu2(mladFromNm, "1", "121") == false)
							{
								resultStr = "送信元アドレスFROM表示名の桁数2チェックエラー。1〜121桁の範囲。値:" + mladFromNm;
								return resultStr;
							}
							localMap.put(MLAD_FROM_NM, mladFromNm);
						}
					}
				}
				// 2013/03/08 FST_mukuo)既に一度検索している場合は存在チェックをスキップ start
				mailSearchArray.add(mailCode);
				// 2013/03/08 FST_mukuo)既に一度検索している場合は存在チェックをスキップ end
			}
			catch(SQLException sqle)
			{
				resultStr = "メールマスターテーブルアクセスに失敗しました。";
				resultStr = resultStr + sqle.getMessage();
				return resultStr;
			}
			finally
			{
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
//			if(dbAccessCd != null)
//			{
//				dbAccessCd.close();
//			}
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
			}
		}
			
		// 本文非定型部のチェック
		String[] textHtkb = (String[])localMap.get(TEXT_HTK_CKAN_MOJI);
		if(textHtkb != null)
		{
			String[] htkbRenban = new String[textHtkb.length];
			for(int i = 0; i < textHtkb.length; i++)
			{		
				// 非定型置換文字列の桁数チェック
				if(textHtkb[i] == null)
				{
					resultStr = "本文非定型置換文字の桁数2チェックエラー。";
					resultStr = resultStr + "1〜999999桁の範囲。値:0桁";
					return resultStr;
				}
				if(JCCBatCommon.isKetasuu2(textHtkb[i], "1", "999999") == false)
				{
					resultStr = "本文非定型置換文字の桁数2チェックエラー。";
					resultStr = resultStr + "1〜999999桁の範囲。値:";
					resultStr = resultStr + String.valueOf(textHtkb[i].length()) + "桁";
					return resultStr;
				}
				// 非定型置換文字列の連番生成
				htkbRenban[i] = htkbRenban[i].format("%012d", (i + 1));
				
				// 非定型置換文字列連番の桁数チェック
				if(JCCBatCommon.isKetasuu1(htkbRenban[i], "12") == false)
				{
					resultStr = "非定型置換文字列連番の桁数1チェックエラー。12桁固定。値:" + htkbRenban[i];
					return resultStr;
				}
			}
			// 生成した連番をHashMapに登録
			localMap.put(TEXT_HTKB_SEQ, htkbRenban);
		}
		
		// メール明細コードのチェックとメール明細マスタへの問い合わせ
		JBSbatSQLAccess dbAccessDtl = null;
		try
		{
			HashMap<String, Object> dtlMap = new HashMap<String, Object>();
			dtlMap = (HashMap)localMap.get(MAIL_DTL_IF);
			ArrayList<String> dtlRenban = new ArrayList<String>();
			String  tmpStr = "";
			if(dtlMap != null)
			{
				// 存在する全てのキー(明細コード)のチェック
				Set keySet = dtlMap.keySet();
				Iterator keyIte = keySet.iterator();
				while(keyIte.hasNext())
				{
					// メール明細コード
					String key = (String)keyIte.next();
					if(JCCBatCommon.isKetasuu1(key, "10") == false)
					{
						resultStr = "メール明細コードの桁数1チェックエラー。10桁固定。値:" + key;
						return resultStr;
					}
					if(JCCBatCommon.isHannkakuESuuji1(key) == false)
					{
						resultStr = "メール明細コードの半角英数字1チェックエラー。値:" + key;
						return resultStr;
					}
					// 2013/03/08 FST_mukuo)既に一度検索している場合は存在チェックをスキップ start
					if(mailDtlSearchArray.contains(key) == false)
					{
					// 2013/03/08 FST_mukuo)既に一度検索している場合は存在チェックをスキップ start

						// DBアクセス用のオブジェクト
						// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
						//dbAccessDtl = new JBSbatSQLAccess(commonItem, TABLE_NAME_DTL_HTKB);
						dbAccessDtl = JBSbatBatchInvoker.getFwDbAccessMap(TABLE_NAME_DTL_HTKB);
						if(null == dbAccessDtl)
						{
							dbAccessDtl = new JBSbatSQLAccess(commonItem, TABLE_NAME_DTL_HTKB);
							JBSbatBatchInvoker.putFwDbAccessMap(TABLE_NAME_DTL_HTKB, dbAccessDtl);
							commonItem.getLogPrint().printDebugLog("SQLAccessインスタンス化(" + TABLE_NAME_DTL_HTKB + ")");
							
						}
						// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
						// パラメタ組み立て
						JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
						// 問い合わせるメールコードを指定
						paramList.setValue(key);
						// SQL実行
						dbAccessDtl.selectBySqlDefine(paramList, "CC_SELECT_001");
						// 結果を取得
						JBSbatCommonDBInterface cdMap = dbAccessDtl.selectNext();
						if(cdMap == null)
						{
							resultStr = "メール明細マスタに指定メール明細コードが存在しません。" + key;
							return resultStr;
						}
						// 2013/03/08 FST_mukuo)既に一度検索している場合は存在チェックをスキップ start
						mailDtlSearchArray.add(key);
						// 2013/03/08 FST_mukuo)既に一度検索している場合は存在チェックをスキップ end
					}
					// 明細本文非定型置換文字
					String[] value = (String[])dtlMap.get(key);
					for(int i = 0; i < value.length; i++)
					{
						if(value[i] == null)
						{
							resultStr = "明細本文非定型置換文字の桁数2チェックエラー。";
							resultStr = resultStr + "1〜2000桁の範囲。値:0桁";
							return resultStr;
						}
						if(JCCBatCommon.isKetasuu2(value[i], "1", "2000") == false)
						{
							resultStr = "明細本文非定型置換文字の桁数2チェックエラー。";
							resultStr = resultStr + "1〜2000桁の範囲。値:";
							resultStr = resultStr + String.valueOf(value[i].length()) + "桁";
							return resultStr;
						}
						
						// 明細本文非定型置換文字連番の生成
						tmpStr = tmpStr.format("%012d", (i + 1));
						
						// 明細本文非定型置換文字列連番の桁数チェック
						if(JCCBatCommon.isKetasuu1(tmpStr, "12") == false)
						{
							resultStr = "明細本文非定型置換文字列連番の桁数1チェックエラー。12桁固定。値:" + tmpStr;
							return resultStr;
						}
						// ArrayListに登録
						dtlRenban.add(tmpStr);
					}
				}
				// 生成した連番をHashMapに登録
				localMap.put(DTL_TEXT_HTKB_SEQ, dtlRenban);
			}
		}
		catch(SQLException sqle)
		{
			resultStr = "メール明細テーブルアクセスに失敗しました。";
			resultStr = resultStr + sqle.getMessage();
			return resultStr;
		}
		finally
		{
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
//			if(dbAccessDtl != null)
//			{
//				dbAccessDtl.close();
//			}
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
		}
		
		// 電子ファイル管理番号のチェックと電子ファイル管理テーブルのチェック
		JBSbatSQLAccess dbAccessTemp = null;
		try
		{
			// 電子ファイル管理情報
			HashMap<String, String> efileMap = new HashMap<String, String>();
			efileMap = (HashMap)localMap.get(EFILE_IF);
			if(efileMap != null)
			{
				// 電子ファイル管理番号とファイル名をチェック
				Set keySet = efileMap.keySet();
				Iterator keyIte = keySet.iterator();
				while(keyIte.hasNext())
				{
					// 電子ファイル管理番号
					String key = (String)keyIte.next();
					// 2013/03/08 FST_mukuo)既に一度検索している場合は存在チェックをスキップ start
					if(efileSearchArray.contains(key) == false)
					{
					// 2013/03/08 FST_mukuo)既に一度検索している場合は存在チェックをスキップ start
	
						if(JCCBatCommon.isKetasuu1(key, "15") == false)
						{
							resultStr = "電子ファイル管理番号の桁数1チェックエラー。15桁固定。値:" + key;
							return resultStr;
						}
						if(JCCBatCommon.isHannkakuESuuji1(key) == false)
						{
							resultStr = "電子ファイル管理番号の半角英数字1チェックエラー。値:" + key;
							return resultStr;
						}
						// 電子ファイル名
						String value = (String)efileMap.get(key);
						if(JCCBatCommon.isKetasuu2(value, "1", "127") == false)
						{
							resultStr = "電子ファイル名の桁数2チェックエラー。";
							resultStr = resultStr + "1〜127桁の範囲。値:";
							resultStr = resultStr + String.valueOf(value.length()) + "桁";
							return resultStr;
						}
						// DBアクセス用のオブジェクト
						// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
						//dbAccessTemp = new JBSbatSQLAccess(commonItem, TABLE_NAME_TEMP);
						dbAccessTemp = JBSbatBatchInvoker.getFwDbAccessMap(TABLE_NAME_TEMP);
						if(null == dbAccessTemp)
						{
							dbAccessTemp = new JBSbatSQLAccess(commonItem, TABLE_NAME_TEMP);
							JBSbatBatchInvoker.putFwDbAccessMap(TABLE_NAME_TEMP, dbAccessTemp);
							commonItem.getLogPrint().printDebugLog("SQLAccessインスタンス化(" + TABLE_NAME_TEMP + ")");
						}
						// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
						// パラメタ組み立て
						JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
						// 問い合わせる電子ファイル管理番号を指定
						paramList.setValue(key);
						// SQL実行
						dbAccessTemp.selectBySqlDefine(paramList, "CC_SELECT_001");
						// 結果を取得
						JBSbatCommonDBInterface cdMap = dbAccessTemp.selectNext();
						if(cdMap == null)
						{
							resultStr = "電子ファイル管理テーブルに指定の電子ファイル管理番号が存在しません。" + key;
							return resultStr;
						}
						efileSearchArray.add(key);
					}
				}
			}
		}
		catch(SQLException sqle)
		{
			resultStr = "電子ファイル管理テーブルアクセスに失敗しました。";
			resultStr = resultStr + sqle.getMessage();
			return resultStr;
		}
		finally
		{
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
//			if(dbAccessTemp != null)
//			{
//				dbAccessTemp.close();
//			}
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
		}		
		
		return resultStr;
	}
	
	/**
	 * 指定された電子ファイルのサイズが最大サイズを超過していないか検査します
	 * @param commonItem 業務共通電文
	 * @return String    チェック結果メッセージ
	 *                     正常時:空文
	 *                     異常時:エラーメッセージ
	 * @exception Exception
	 */
	private static String chkEfileSize(JBSbatCommonItem commonItem, String[] eFileNoList) throws Exception
	{
		// チェック結果格納領域
		String resultStr = "";
		
		// サイズ計算用変数
		int fileSizeSum = 0;
		int fileSizeLimit = 0;
		String limitStr = null;

		// 1メールに添付できる添付ファイルの最大サイズを取得
		limitStr = JCCBatCommon.getApplicationConst("SEND_MAIL_TEMP_MAX_SIZE");
		if(limitStr == null || JCCBatCommon.isHannkakuSuuji1(limitStr) == false)
		{
			// 指定が無い場合(または指定誤り時)は制限値を5Mとする
			limitStr = "5";
		}
		fileSizeLimit = Integer.parseInt(limitStr);
		fileSizeLimit <<= 20;
		
		// 指定された電子ファイルの合計サイズを計算
		for(int i = 0; i < eFileNoList.length; i++)
		{
			// 2013/03/11 ファイルサイズをキャッシュ済みの場合は加算のみ行う start
			if(efileSizeCacheMap.get(eFileNoList[i]) != null)
			{
				fileSizeSum += efileSizeCacheMap.get(eFileNoList[i]).longValue();
				continue;
			}
			// 2013/03/11 ファイルサイズをキャッシュ済みの場合は加算のみ行う end
			
			// 電子ファイル管理一意照会処理
			String filePath = JCCBatCommon.searchDenshiFile(commonItem, eFileNoList[i]);
			File f = new File(filePath);
			String parentPath = f.getParent();
			
			// サイズの合計値を加算
			fileSizeSum += f.length();
			
			// 2013/03/11 取得済みファイルサイズのキャッシュ start
			efileSizeCacheMap.put(eFileNoList[i], new Long(f.length()));
			// 2013/03/11 取得済みファイルサイズのキャッシュ end
			
			// 一時ファイルの削除
			f.delete();
			new File(parentPath).delete();
		}
		if(fileSizeSum > fileSizeLimit)
		{
			resultStr = "1メールに添付できるファイルサイズの合計を超過しました。"
				+ "添付ファイルサイズの制限値:[" + String.valueOf(fileSizeLimit) + "byte] "
				+ "添付したファイルサイズの合計値:[" + String.valueOf(fileSizeSum) + "byte]";
		}
		return resultStr;
	}
	
	/**
	 * メール送信情報をDB登録します
	 * @param commonItem 業務共通電文
	 * @param localMap   送信情報を格納したHashMap。
	 * @param resultMap  発行した採番値を格納しておく領域
	 * @return String    異常発生時のメッセージ領域
	 *                     正常時:空文
	 *                     異常時:エラーメッセージ
	 * @exception Exception
	 */
	private static String setDbMailSend(JBSbatCommonItem commonItem, 
			HashMap<String, Object> localMap, HashMap<String, Object> resultMap)
		throws Exception
	{
		String resultStr = "";
		
		// メール送信番号を発行
		String mailSendNo = JCCOracleSeqUtil.getFormatedNextSeq(commonItem.getConnection(), SEQ_MAIL_SEND_NO, "S", 11);
		if(mailSendNo == null)
		{
			resultStr = "メール送信番号が発行できませんでした。";
			return resultStr;
		}
		// メール送信番号を結果格納用HashMapとLocalのHashMapにセット
		resultMap.put(MAIL_SEND_NO, mailSendNo);
		localMap.put(MAIL_SEND_NO, mailSendNo);
		
		// SQL制御用クラス(null初期化)
		JBSbatSQLAccess dbAccess = null;
		
		// メール送信情報をDBにセット
		try
		{
			// アクセスクラスの生成
			// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
			//dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_SEND);
			dbAccess = JBSbatBatchInvoker.getFwDbAccessMap(TABLE_NAME_SEND);
			if(null == dbAccess)
			{
				dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_SEND);
				JBSbatBatchInvoker.putFwDbAccessMap(TABLE_NAME_SEND, dbAccess);
				commonItem.getLogPrint().printDebugLog("SQLAccessインスタンス化(" + TABLE_NAME_SEND + ")");
			}
			// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
			// パラメタ組み立て
			JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
			// メール送信番号
			paramList.setValue(mailSendNo);
			// メール送信ステータス
			paramList.setValue(MAIL_SEND_STAT);
			// メールコード
			paramList.setValue((String)localMap.get(MAIL_CD));
			// メール送信パターンコード
			paramList.setValue((String)localMap.get(MAIL_SEND_PATTERN_CD));
			// 送信予定年月日時分秒
			paramList.setValue((String)localMap.get(MAIL_SEND_RSV_DTM));
			// エラーカウンタ
			paramList.setValue(ERR_COUNTER);
			// メール送信実行日
			paramList.setValue(MAIL_SEND_JSSI_DTM);
			// メールヘッダー情報
			paramList.setValue(localMap.get("MAIL_HEADER_STR_IF"));
			// メール送信停止年月日
			paramList.setValue(MAIL_SEND_STP_DTM);
			// 登録年月日
			paramList.setValue((String)localMap.get(ADD_DTM));
			// 登録ユーザーID
			paramList.setValue((String)localMap.get(ADD_OPEACNT));
			// 更新年月日
			paramList.setValue((String)localMap.get(UPD_DTM));
			// 更新ユーザーID
			paramList.setValue((String)localMap.get(UPD_OPEACNT));
			// 削除年月日
			paramList.setValue((String)localMap.get(DEL_DTM));
			// 削除ユーザーID
			paramList.setValue((String)localMap.get(DEL_OPEACNT));
			// 無効フラグ
			paramList.setValue(MK_FLG);
			
			//SQL実行
			dbAccess.executeBySqlDefine(paramList, "CC_INSERT_001");
		}
		catch(SQLException sqle)
		{
			resultStr = "メール送信テーブルアクセスに失敗しました。";
			resultStr = resultStr + sqle.getMessage();
			return resultStr;
		}
		finally
		{
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
//			if(dbAccess != null)
//			{
//				dbAccess.close();
//			}
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
		}
		return resultStr;
	}
	
	/**
	 * メールアドレス情報をDB登録します
	 * @param commonItem 業務共通電文
	 * @param localMap   送信情報を格納したHashMap。
	 * @param resultMap  発行した採番値を格納しておく領域
	 * @param adrNoList  メール送信番号を格納しておく領域
	 * @param mailAdr    登録するメールアドレス
	 * @param mladNm     メールアドレス表示名
	 * @param toKind     "01"(TO),"02"(FROM),"03"(CC),"04"(BCC)のいずれか
	 * @return String    異常発生時のメッセージ領域
	 *                     正常時:空文
	 *                     異常時:エラーメッセージ
	 * @exception Exception
	 */
	private static String setDbMailAddress(JBSbatCommonItem commonItem,
			HashMap<String, Object> localMap, HashMap<String, Object> resultMap,
			ArrayList<String> adrNoList, String mailAdr, String mladNm, String toKind)
		throws Exception
	{
		String resultStr = "";
		
		// メールアドレス番号を発行
		String mailAddressNo = JCCOracleSeqUtil.getFormatedNextSeq(commonItem.getConnection(), SEQ_MLAD_NO, "A", 14);
		if(mailAddressNo == null)
		{
			resultStr = "メールアドレス番号が発行できませんでした。";
			return resultStr;
		}
		// メールアドレス番号を結果格納用ArrayListにセット
		adrNoList.add(mailAddressNo);
		
		// SQL制御用クラス(null初期化)
		JBSbatSQLAccess dbAccess = null;
		
		// メール送信情報をDBにセット
		try
		{
			// アクセスクラスの生成
			// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
			//dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_MLAD);
			dbAccess = JBSbatBatchInvoker.getFwDbAccessMap(TABLE_NAME_MLAD);
			if(null == dbAccess)
			{
				dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_MLAD);
				JBSbatBatchInvoker.putFwDbAccessMap(TABLE_NAME_MLAD, dbAccess);
				commonItem.getLogPrint().printDebugLog("SQLAccessインスタンス化(" + TABLE_NAME_MLAD + ")");
			}
			// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
			// パラメタ組み立て
			JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
			// メールアドレス番号
			paramList.setValue(mailAddressNo);
			// メール送信番号
			paramList.setValue((String)localMap.get(MAIL_SEND_NO));
			// メール受信番号
			paramList.setValue(MAIL_RCV_NO);
			// 送信先アドレス
			paramList.setValue(mailAdr);
			// メールアドレス表示名
			paramList.setValue(mladNm);
			// メールアドレス種別(TO,FROM,CC,BCCのいずれか)
			paramList.setValue(toKind);
			// 登録年月日
			paramList.setValue((String)localMap.get(ADD_DTM));
			// 登録ユーザーID
			paramList.setValue((String)localMap.get(ADD_OPEACNT));
			// 更新年月日
			paramList.setValue((String)localMap.get(UPD_DTM));
			// 更新ユーザーID
			paramList.setValue((String)localMap.get(UPD_OPEACNT));
			// 削除年月日
			paramList.setValue((String)localMap.get(DEL_DTM));
			// 削除ユーザーID
			paramList.setValue((String)localMap.get(DEL_OPEACNT));
			// 無効フラグ
			paramList.setValue(MK_FLG);
			
			//SQL実行
			dbAccess.executeBySqlDefine(paramList, "CC_INSERT_001");
		}
		catch(SQLException sqle)
		{
			resultStr = "メールアドレステーブルアクセスに失敗しました。";
			resultStr = resultStr + sqle.getMessage();
			return resultStr;
		}
		finally
		{
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
//			if(dbAccess != null)
//			{
//				dbAccess.close();
//			}
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
		}
		return resultStr;
	}

	/**
	 * 本文非定型部をDB登録します
	 * @param commonItem 業務共通電文
	 * @param localMap   送信情報を格納したHashMap。
	 * @param resultMap  発行した採番値を格納しておく領域
	 * @param textHtkb   本文非定型部置換文字
	 * @param num   	  連番値
	 * @return String    異常発生時のメッセージ領域
	 *                     正常時:空文
	 *                     異常時:エラーメッセージ
	 * @exception Exception
	 */	
	private static String setDbTextHtkb(JBSbatCommonItem commonItem, 
			HashMap<String, Object> localMap, HashMap<String, Object> resultMap, 
			String textHtkb, int num)
		throws Exception
	{
		String resultStr = "";
		
		// 非定型文字列用連番の取得
		String[] strRenban = (String[])localMap.get(TEXT_HTKB_SEQ);
		String seqNum = strRenban[num];
		
		// SQL制御用クラス(null初期化)
		JBSbatSQLAccess dbAccess = null;
		
		// メール送信情報をDBにセット
		try
		{
			// アクセスクラスの生成
			// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
			//dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_HTKB);
			dbAccess = JBSbatBatchInvoker.getFwDbAccessMap(TABLE_NAME_HTKB);
			if(null == dbAccess)
			{
				dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_HTKB);
				JBSbatBatchInvoker.putFwDbAccessMap(TABLE_NAME_HTKB, dbAccess);
				commonItem.getLogPrint().printDebugLog("SQLAccessインスタンス化(" + TABLE_NAME_HTKB + ")");
			}
			// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
			// パラメタ組み立て
			JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
			// メール送信番号
			paramList.setValue((String)localMap.get(MAIL_SEND_NO));
			// 非定型置換文字の連番値
			paramList.setValue(seqNum);
			// 非定型置換文字列
			paramList.setValue(textHtkb);
			// 登録年月日
			paramList.setValue((String)localMap.get(ADD_DTM));
			// 登録ユーザーID
			paramList.setValue((String)localMap.get(ADD_OPEACNT));
			// 更新年月日
			paramList.setValue((String)localMap.get(UPD_DTM));
			// 更新ユーザーID
			paramList.setValue((String)localMap.get(UPD_OPEACNT));
			// 削除年月日
			paramList.setValue((String)localMap.get(DEL_DTM));
			// 削除ユーザーID
			paramList.setValue((String)localMap.get(DEL_OPEACNT));
			// 無効フラグ
			paramList.setValue(MK_FLG);
			
			//SQL実行
			dbAccess.executeBySqlDefine(paramList, "CC_INSERT_001");
		}
		catch(SQLException sqle)
		{
			resultStr = "本文非定型テーブルアクセスに失敗しました。";
			resultStr = resultStr + sqle.getMessage();
			return resultStr;
		}
		finally
		{
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start			
//			if(dbAccess != null)
//			{
//				dbAccess.close();
//			}
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
		}
		return resultStr;
	}
	
	/**
	 * 明細本文非定型部をDB登録します
	 * @param commonItem 業務共通電文
	 * @param localMap   送信情報を格納したHashMap。
	 * @param resultMap  発行した採番値を格納しておく領域
	 * @param dtlCode    メール明細コード
	 * @param dtlHtkb    明細本文非定型部置換文字
	 * @param num   	  連番値
	 * @return String    異常発生時のメッセージ領域
	 *                     正常時:空文
	 *                     異常時:エラーメッセージ
	 * @exception Exception
	 */	
	private static String setDbDtlHtkb(JBSbatCommonItem commonItem, 
			HashMap<String, Object> localMap, HashMap<String, Object> resultMap,
			String dtlCode, String dtlHtkb, int num)
		throws Exception
	{
		String resultStr = "";
		
		// 明細本文非定型文字列用連番の取得
		ArrayList<String> listRenban = (ArrayList<String>)localMap.get(DTL_TEXT_HTKB_SEQ);
		String seqNum = listRenban.get(num);
		
		// SQL制御用クラス(null初期化)
		JBSbatSQLAccess dbAccess = null;
		
		// メール送信情報をDBにセット
		try
		{
			// アクセスクラスの生成
			// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
			//dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_DTL_HTKB);
			dbAccess = JBSbatBatchInvoker.getFwDbAccessMap(TABLE_NAME_DTL_HTKB);
			if(null == dbAccess)
			{
				dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_DTL_HTKB);
				JBSbatBatchInvoker.putFwDbAccessMap(TABLE_NAME_DTL_HTKB, dbAccess);
				commonItem.getLogPrint().printDebugLog("SQLAccessインスタンス化(" + TABLE_NAME_DTL_HTKB + ")");
			}
			// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
			// パラメタ組み立て
			JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
			// メール送信番号
			paramList.setValue((String)localMap.get(MAIL_SEND_NO));
			// メール明細コード
			paramList.setValue(dtlCode);
			// 非定型置換文字の連番値
			paramList.setValue(seqNum);
			// 明細非定型置換文字列
			paramList.setValue(dtlHtkb);
			// 登録年月日
			paramList.setValue((String)localMap.get(ADD_DTM));
			// 登録ユーザーID
			paramList.setValue((String)localMap.get(ADD_OPEACNT));
			// 更新年月日
			paramList.setValue((String)localMap.get(UPD_DTM));
			// 更新ユーザーID
			paramList.setValue((String)localMap.get(UPD_OPEACNT));
			// 削除年月日
			paramList.setValue((String)localMap.get(DEL_DTM));
			// 削除ユーザーID
			paramList.setValue((String)localMap.get(DEL_OPEACNT));
			// 無効フラグ
			paramList.setValue(MK_FLG);
			
			//SQL実行
			dbAccess.executeBySqlDefine(paramList, "CC_INSERT_001");
		}
		catch(SQLException sqle)
		{
			resultStr = "明細本文非定型テーブルアクセスに失敗しました。";
			resultStr = resultStr + sqle.getMessage();
			return resultStr;
		}
		finally
		{
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
//			if(dbAccess != null)
//			{
//				dbAccess.close();
//			}
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
		}
		return resultStr;
	}
	
	/**
	 * 添付ファイル情報をDB登録します
	 * @param commonItem 業務共通電文
	 * @param localMap   送信情報を格納したHashMap。
	 * @param resultMap  発行した採番値を格納しておく領域
	 * @param fileNoList 添付ファイル番号を格納しておく領域
	 * @param eFileNo    電子ファイル管理番号
	 * @param eFileName  ファイル名
	 * @return String    異常発生時のメッセージ領域
	 *                     正常時:空文
	 *                     異常時:エラーメッセージ
	 * @exception Exception
	 */	
	private static String setDbTempFile(JBSbatCommonItem commonItem,
			HashMap<String, Object> localMap, HashMap<String, Object> resultMap,
			ArrayList<String> fileNoList, String eFileNo, String eFileName)
		throws Exception
	{
		String resultStr = "";
		
		// 添付ファイル番号を発行
		String tempFileNo = JCCOracleSeqUtil.getFormatedNextSeq(commonItem.getConnection(), SEQ_TEMP_FILE_NO, "T", 14);
		if(tempFileNo == null)
		{
			resultStr = "添付ファイル番号が発行できませんでした。";
			return resultStr;
		}
		// 添付ファイル番号を結果格納用HashMapにセット
		fileNoList.add(tempFileNo);
		
		// SQL制御用クラス(null初期化)
		JBSbatSQLAccess dbAccess = null;
		
		// メール送信情報をDBにセット
		try
		{
			// アクセスクラスの生成
			// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
			//dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_TEMP);
			dbAccess = JBSbatBatchInvoker.getFwDbAccessMap(TABLE_NAME_TEMP);
			if(null == dbAccess)
			{
				dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_TEMP);
				JBSbatBatchInvoker.putFwDbAccessMap(TABLE_NAME_TEMP, dbAccess);
				commonItem.getLogPrint().printDebugLog("SQLAccessインスタンス化(" + TABLE_NAME_TEMP + ")");
			}
			// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
			// パラメタ組み立て
			JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
			// 添付ファイル番号
			paramList.setValue(tempFileNo);
			// メール送信番号
			paramList.setValue((String)localMap.get(MAIL_SEND_NO));
			// メール受信番号
			paramList.setValue(MAIL_RCV_NO);
			// 電子ファイル管理番号
			paramList.setValue(eFileNo);
			// ファイル名
			paramList.setValue(eFileName);
			// 登録年月日
			paramList.setValue((String)localMap.get(ADD_DTM));
			// 登録ユーザーID
			paramList.setValue((String)localMap.get(ADD_OPEACNT));
			// 更新年月日
			paramList.setValue((String)localMap.get(UPD_DTM));
			// 更新ユーザーID
			paramList.setValue((String)localMap.get(UPD_OPEACNT));
			// 削除年月日
			paramList.setValue((String)localMap.get(DEL_DTM));
			// 削除ユーザーID
			paramList.setValue((String)localMap.get(DEL_OPEACNT));
			// 無効フラグ
			paramList.setValue(MK_FLG);
			
			//SQL実行
			dbAccess.executeBySqlDefine(paramList, "CC_INSERT_001");
		}
		catch(SQLException sqle)
		{
			resultStr = "添付ファイルテーブルアクセスに失敗しました。";
			resultStr = resultStr + sqle.getMessage();
			return resultStr;
		}
		finally
		{
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 start
//			if(dbAccess != null)
//			{
//				dbAccess.close();
//			}
// 2013/03/08 FST_mukuo)FW部品で生成したSQLAceessクラスをキャッシュする対応 end
		}
		return resultStr;
	}
	
	/**
	 * DB登録した結果をログに出力します。
	 * @param commonItem 業務共通電文
	 * @param sendMailNo メール送信番号
	 * @exception Exception
	 */
	private static void printResultTableInsert(JBSbatCommonItem commonItem, String sendMailNo) throws Exception
	{
		// BatAPLConstからシステムフェーズを取得
		String phase = JCCBatCommon.getApplicationConst("SYSTEM_PHASE");
		if(phase == null)
		{
			return;
		}
		// PTの場合
		if("1".equals(phase))
		{
			// ログ出力クラスのインスタンス化
			JBSbatLogUtil log = new JBSbatLogUtil("", commonItem.getJobid());
			// SQL制御用クラス(null初期化)
			JBSbatSQLAccess dbAccess = null;
			// 汎用文字列格納領域
			String tmpStr = "";
			String bufStr = "";
			// 改行コード
			String crlf = System.getProperty("line.separator");
			//--------------------------------------------------------------
			// メール送信テーブル
			//--------------------------------------------------------------
			// CLOB領域の部分だけ先に取得
			PreparedStatement prepstmt = null;
			ResultSet rs = null;
			// SQL文の組立て
			prepstmt = commonItem.getConnection().prepareStatement("SELECT CC0021.MAIL_HEADER_IF FROM CC_T_MAIL_SEND CC0021 WHERE CC0021.MAIL_SEND_NO = ?");
			prepstmt.setString(1, sendMailNo);
			// SQL実行
			rs = prepstmt.executeQuery();
			// オブジェクトの書き込み
			rs.next();
			// 文字列の取得
			String clobStr = rs.getString("MAIL_HEADER_IF");
			if(clobStr == null)
			{
				clobStr = "null";
			}
			clobStr = clobStr.replace(crlf, "↓");
			prepstmt.close();
			rs.close();
			
			// DBアクセス用のオブジェクト
			dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_SEND);
			// パラメタ組み立て
			JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
			// 問い合わせるメールコードを指定
			paramList.setValue(sendMailNo);
			// SQL実行
			dbAccess.selectBySqlDefine(paramList, "CC_SELECT_002");
			// 結果を取得
			JBSbatCommonDBInterface cdMap = dbAccess.selectNext();
			
			boolean set = false;
			
			while(cdMap != null)
			{
				// 項目名の表示
				if(set == false)
				{
					tmpStr = tmpStr + crlf + crlf;
					tmpStr = tmpStr + "＜＜＜DB登録結果＞＞＞";
					tmpStr = tmpStr + crlf + crlf;
					tmpStr = tmpStr + "【メール送信】" + crlf;
					tmpStr = tmpStr + "[メール送信番号]";
					tmpStr = tmpStr + "[送信ステータス]";
					tmpStr = tmpStr + "[メールコード]";
					tmpStr = tmpStr + "[送信パターン]";
					tmpStr = tmpStr + "[送信予定年月日   ]";
					tmpStr = tmpStr + "[エラー数]";
					tmpStr = tmpStr + "[送信実施年月日]";
					int len1 = 0;
					int len2 = 0;
					len1 = clobStr.getBytes().length;
					len2 = "ヘッダー情報".getBytes().length;
					bufStr = "ヘッダー情報";
					if(len1 > len2)
					{
						for(int i = 0; i < (len1 - len2); i++)
						{
							bufStr = bufStr + " ";
						}
					}
					else if(len1 < len2)
					{
						for(int i = 0; i < (len2 - len1); i++)
						{
							clobStr = clobStr + " ";
						}
					}
					tmpStr = tmpStr + "[" + bufStr + "]";
					tmpStr = tmpStr + "[送信停止年月日]";
					tmpStr = tmpStr + "[登録年月日       ]";
					tmpStr = tmpStr + "[登録アカウント]";
					tmpStr = tmpStr + "[更新年月日       ]";
					tmpStr = tmpStr + "[更新アカウント]";
					tmpStr = tmpStr + "[削除年月日]";
					tmpStr = tmpStr + "[削除アカウント]";
					tmpStr = tmpStr + "[無効フラグ]" + crlf;
					set = true;
				}
				
				// 値の表示
				bufStr = bufStr.format("[%-14s]", cdMap.getString("MAIL_SEND_NO"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("MAIL_SEND_STAT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-12s]", cdMap.getString("MAIL_CD"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-12s]", cdMap.getString("MAIL_SEND_PATTERN_CD"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-17s]", cdMap.getString("MAIL_SEND_RSV_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-8s]", cdMap.getString("ERR_COUNTER"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("MAIL_SEND_JSSI_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%s]", clobStr);
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("MAIL_SEND_STP_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-13s]", cdMap.getString("ADD_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("ADD_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-13s]", cdMap.getString("UPD_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("UPD_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-10s]", cdMap.getString("DEL_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("DEL_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-10s]", cdMap.getString("MK_FLG"));
				tmpStr = tmpStr + bufStr + crlf;
				
				// 次のレコード
				cdMap = dbAccess.selectNext();
			}
			// DBアクセスクラスクローズ
			dbAccess.close();
			
			//--------------------------------------------------------------
			// メールアドレステーブル
			//--------------------------------------------------------------
			// DBアクセス用のオブジェクト
			dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_MLAD);
			// パラメタ組み立て
			paramList = new JBSbatCommonDBInterface();
			// 問い合わせるメールコードを指定
			paramList.setValue(sendMailNo);
			// SQL実行
			dbAccess.selectBySqlDefine(paramList, "CC_SELECT_001");
			// 結果を取得
			cdMap = dbAccess.selectNext();
			set = false;
			while(cdMap != null)
			{
				// 項目名の表示
				if(set == false)
				{
					tmpStr = tmpStr + crlf;
					tmpStr = tmpStr + "【メールアドレス】" + crlf;
					tmpStr = tmpStr + "[メールアドレス番号]";
					tmpStr = tmpStr + "[メール送信番号]";
					tmpStr = tmpStr + "[メール受信番号]";
					tmpStr = tmpStr + "[メールアドレス                ]";
					tmpStr = tmpStr + "[メールアドレス表示名]";
					tmpStr = tmpStr + "[アドレス種別]";
					tmpStr = tmpStr + "[登録年月日       ]";
					tmpStr = tmpStr + "[登録アカウント]";
					tmpStr = tmpStr + "[更新年月日       ]";
					tmpStr = tmpStr + "[更新アカウント]";
					tmpStr = tmpStr + "[削除年月日]";
					tmpStr = tmpStr + "[削除アカウント]";
					tmpStr = tmpStr + "[無効フラグ]" + crlf;
					set = true;
				}
				// 値の表示
				bufStr = bufStr.format("[%-18s]", cdMap.getString("MLAD_NO"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("MAIL_SEND_NO"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("MAIL_RSV_NO"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-30s]", cdMap.getString("MLAD"));
				tmpStr = tmpStr + bufStr;
				bufStr = cdMap.getString("MLAD_DSP_NM");
				if(bufStr == null)
				{
					bufStr = "null";
				}
				int len1 = 0;
				int len2 = 0;
				len1 = "メールアドレス表示名".getBytes().length;
				len2 = bufStr.getBytes().length;
				if(len1 > len2)
				{
					for(int i = 0; i < (len1 - len2); i++)
					{
						bufStr = bufStr + " ";
					}
				}
				tmpStr = tmpStr + "[" + bufStr + "]";
				bufStr = bufStr.format("[%-12s]", cdMap.getString("MLAD_SET_FIELD_CD"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-13s]", cdMap.getString("ADD_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("ADD_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-13s]", cdMap.getString("UPD_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("UPD_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-10s]", cdMap.getString("DEL_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("DEL_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-10s]", cdMap.getString("MK_FLG"));
				tmpStr = tmpStr + bufStr + crlf;
				
				// 次のレコード
				cdMap = dbAccess.selectNext();
			}
			// DBアクセスクラスクローズ
			dbAccess.close();
			//--------------------------------------------------------------
			// 本文非定型部
			//--------------------------------------------------------------
			// DBアクセス用のオブジェクト
			dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_HTKB);
			// パラメタ組み立て
			paramList = new JBSbatCommonDBInterface();
			// 問い合わせるメールコードを指定
			paramList.setValue(sendMailNo);
			// SQL実行
			dbAccess.selectBySqlDefine(paramList, "CC_SELECT_001");
			// 結果を取得
			cdMap = dbAccess.selectNext();
			set = false;
			while(cdMap != null)
			{
				// 項目名の表示
				if(set == false)
				{
					tmpStr = tmpStr + crlf;
					tmpStr = tmpStr + "【本文非定型部】" + crlf;
					tmpStr = tmpStr + "[メール送信番号]";
					tmpStr = tmpStr + "[本文非定型部連番]";
					tmpStr = tmpStr + "[本文非定型置換文字列                              ]";
					tmpStr = tmpStr + "[登録年月日       ]";
					tmpStr = tmpStr + "[登録アカウント]";
					tmpStr = tmpStr + "[更新年月日       ]";
					tmpStr = tmpStr + "[更新アカウント]";
					tmpStr = tmpStr + "[削除年月日]";
					tmpStr = tmpStr + "[削除アカウント]";
					tmpStr = tmpStr + "[無効フラグ]" + crlf;
					set = true;
				}
				// 値の表示
				bufStr = bufStr.format("[%-14s]", cdMap.getString("MAIL_SEND_NO"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-16s]", cdMap.getString("TEXT_HTKB_SEQ"));
				tmpStr = tmpStr + bufStr;
				bufStr = cdMap.getString("TEXT_HTK_CKAN_MOJI");
				if(bufStr == null)
				{
					bufStr = "null";
				}
				bufStr = bufStr.replace(crlf, "↓");
				int len1 = 0;
				int len2 = 0;
				len1 = "本文非定型置換文字列                              ".getBytes().length;
				len2 = bufStr.getBytes().length;
				if(len1 > len2)
				{
					for(int i = 0; i < (len1 - len2); i++)
					{
						bufStr = bufStr + " ";
					}
				}
				tmpStr = tmpStr + "[" + bufStr + "]";
				bufStr = bufStr.format("[%-13s]", cdMap.getString("ADD_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("ADD_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-13s]", cdMap.getString("UPD_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("UPD_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-10s]", cdMap.getString("DEL_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("DEL_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-10s]", cdMap.getString("MK_FLG"));
				tmpStr = tmpStr + bufStr + crlf;
				// 次のレコード
				cdMap = dbAccess.selectNext();
			}			
			// DBアクセスクラスクローズ
			dbAccess.close();
			//--------------------------------------------------------------
			// 明細本文非定型部
			//--------------------------------------------------------------
			// DBアクセス用のオブジェクト
			dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_DTL_HTKB);
			// パラメタ組み立て
			paramList = new JBSbatCommonDBInterface();
			// 問い合わせるメールコードを指定
			paramList.setValue(sendMailNo);
			// SQL実行
			dbAccess.selectBySqlDefine(paramList, "CC_SELECT_002");
			// 結果を取得
			cdMap = dbAccess.selectNext();
			set = false;
			while(cdMap != null)
			{
				// 項目名の表示
				if(set == false)
				{
					tmpStr = tmpStr + crlf ;
					tmpStr = tmpStr + "【明細本文非定型部】" + crlf;
					tmpStr = tmpStr + "[メール送信番号]";
					tmpStr = tmpStr + "[メール明細コード]";
					tmpStr = tmpStr + "[明細本文非定型部連番]";
					tmpStr = tmpStr + "[明細本文非定型置換文字列                            ]";
					tmpStr = tmpStr + "[登録年月日       ]";
					tmpStr = tmpStr + "[登録アカウント]";
					tmpStr = tmpStr + "[更新年月日       ]";
					tmpStr = tmpStr + "[更新アカウント]";
					tmpStr = tmpStr + "[削除年月日]";
					tmpStr = tmpStr + "[削除アカウント]";
					tmpStr = tmpStr + "[無効フラグ]" + crlf;
					set = true;
				}
				// 値の表示
				bufStr = bufStr.format("[%-14s]", cdMap.getString("MAIL_SEND_NO"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-16s]", cdMap.getString("MAIL_DTL_CD"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-20s]", cdMap.getString("DTL_TEXT_HTKB_SEQ"));
				tmpStr = tmpStr + bufStr;
				bufStr = cdMap.getString("DTL_TEXT_HTK_CKAN_MOJI");
				if(bufStr == null)
				{
					bufStr = "null";
				}
				bufStr = bufStr.replace(crlf, "↓");
				int len1 = 0;
				int len2 = 0;
				len1 = "明細本文非定型置換文字列                            ".getBytes().length;
				len2 = bufStr.getBytes().length;
				if(len1 > len2)
				{
					for(int i = 0; i < (len1 - len2); i++)
					{
						bufStr = bufStr + " ";
					}
				}
				tmpStr = tmpStr + "[" + bufStr + "]";
				bufStr = bufStr.format("[%-13s]", cdMap.getString("ADD_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("ADD_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-13s]", cdMap.getString("UPD_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("UPD_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-10s]", cdMap.getString("DEL_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("DEL_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-10s]", cdMap.getString("MK_FLG"));
				tmpStr = tmpStr + bufStr + crlf;
				// 次のレコード
				cdMap = dbAccess.selectNext();
			}			
			// DBアクセスクラスクローズ
			dbAccess.close();
			
			//--------------------------------------------------------------
			// 添付ファイル
			//--------------------------------------------------------------
			// DBアクセス用のオブジェクト
			dbAccess = new JBSbatSQLAccess(commonItem, TABLE_NAME_TEMP);
			// パラメタ組み立て
			paramList = new JBSbatCommonDBInterface();
			// 問い合わせるメールコードを指定
			paramList.setValue(sendMailNo);
			// SQL実行
			dbAccess.selectBySqlDefine(paramList, "CC_SELECT_002");
			// 結果を取得
			cdMap = dbAccess.selectNext();
			set = false;
			while(cdMap != null)
			{
				// 項目名の表示
				if(set == false)
				{
					tmpStr = tmpStr + crlf;
					tmpStr = tmpStr + "【添付ファイル】" + crlf;
					tmpStr = tmpStr + "[添付ファイル番号]";
					tmpStr = tmpStr + "[メール送信番号]";
					tmpStr = tmpStr + "[メール受信番号]";
					tmpStr = tmpStr + "[電子ファイル管理番号]";
					tmpStr = tmpStr + "[添付ファイル名                              ]";
					tmpStr = tmpStr + "[登録年月日       ]";
					tmpStr = tmpStr + "[登録アカウント]";
					tmpStr = tmpStr + "[更新年月日       ]";
					tmpStr = tmpStr + "[更新アカウント]";
					tmpStr = tmpStr + "[削除年月日]";
					tmpStr = tmpStr + "[削除アカウント]";
					tmpStr = tmpStr + "[無効フラグ]" + crlf;
					set = true;
				}
				// 値の表示
				bufStr = bufStr.format("[%-16s]", cdMap.getString("TEMP_FILE_NO"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("MAIL_SEND_NO"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("MAIL_RCV_NO"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-20s]", cdMap.getString("EFILE_KANRI_NO"));
				tmpStr = tmpStr + bufStr;
				bufStr = cdMap.getString("FILE_NM");
				if(bufStr == null)
				{
					bufStr = "null";
				}
				int len1 = 0;
				int len2 = 0;
				len1 = "添付ファイル名                              ".getBytes().length;
				len2 = bufStr.getBytes().length;
				if(len1 > len2)
				{
					for(int i = 0; i < (len1 - len2); i++)
					{
						bufStr = bufStr + " ";
					}
				}
				tmpStr = tmpStr + "[" + bufStr + "]";
				bufStr = bufStr.format("[%-13s]", cdMap.getString("ADD_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("ADD_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-13s]", cdMap.getString("UPD_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("UPD_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-10s]", cdMap.getString("DEL_DTM"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-14s]", cdMap.getString("DEL_OPEACNT"));
				tmpStr = tmpStr + bufStr;
				bufStr = bufStr.format("[%-10s]", cdMap.getString("MK_FLG"));
				tmpStr = tmpStr + bufStr + crlf;
				// 次のレコード
				cdMap = dbAccess.selectNext();
			}			
			// DBアクセスクラスクローズ
			dbAccess.close();
			
			// ログ出力
			log.debug(tmpStr);
		}
		// それ以外の工程
		else
		{
			// 現状は何もログしない
			;
		}
		return;
	}
}