前のページ次のページ上に戻るホーム BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework 4.1
SFXMailField
メール ヘッダーのエンコードとデコードのためのクラスです。
#include <SFXMailField.h.hpp>
class SFXMailField;
SFMTYPEDEFCLASS(SFXMailField)

解説

RFC2045 ( MIME Part One : Format of Internet Message Bodies ) の Base64 エンコード ( B エンコード ) と Quoted-Printable エンコード ( Q エンコード ) がサポートされます。

参照

SFXMailMessage

メンバ

コンストラクタ/デストラクタ
SFXMailField( Void )
SFXMailField クラスのコンストラクタです。
~SFXMailField( Void )
SFXMailField クラスのデストラクタです。
パブリック関数
SFCError Add( SFXAnsiStringConstRef charset , SFXAnsiStringConstRef text )
エンコーディングを指定して、文字列をメール ヘッダーに追加します。
Void Clear( Void )
メール ヘッダーの文字列をクリアします。
SFCError Decode( SFXAnsiStringConstRef string )
指定したメール ヘッダー文字列を解析します。
SFCError Encode( SFXAnsiStringPtr string )
内部表現をメール ヘッダー文字列としてエンコードします。
CharsetTextPtr GetCharsetText( SInt32 index )
内部表現のデータを取得します。
SInt32 GetSize( Void )
ヘッダー文字列の内部表現の断片の数を取得します。
プロテクト関数
SFCError AddNonEncodedText( ACharConstPtr start , ACharConstPtr end )
AddNonEncodedText( SFXAnsiStringConstRef text )
エンコードされていない文字列をメール ヘッダー文字列に追加します。
SFCError DecodeTextB( SFXAnsiStringPtr decoded , ACharConstPtr start , ACharConstPtr end )
Base64 エンコードされた文字列をデコードします。
SFCError DecodeTextQ( SFXAnsiStringPtr decoded , ACharConstPtr start , ACharConstPtr end )
Quoted-Printable エンコードされた文字列をデコードします。
static
Bool
IsLWSP( AChar c )
文字が LWSP ( 空白文字、水平タブ、改行文字、または 復帰文字 ) であるかどうかを判定します。
static
Void
SkipLWSP( ACharConstHandle start , ACharConstPtr end )
ポインターを LWSP ( 空白文字、水平タブ、改行文字、または復帰文字 ) 以外の文字まで進めます。
CharsetText
SFXMailField の内部表現です。

SFXMailField::SFXMailField
SFXMailField クラスのコンストラクタです。
[ public, explicit ]
SFXMailField(Void);

SFXMailField::~SFXMailField
SFXMailField クラスのデストラクタです。
[ public ]
~SFXMailField(Void);

SFXMailField::Add
エンコーディングを指定して、文字列をメール ヘッダーに追加します。
[ public ]
SFCError Add(
    SFXAnsiStringConstRef charset   // エンコーディング
    SFXAnsiStringConstRef text      // 追加する文字列
);

引数

charset

エンコーディングを指定します。

text

メール ヘッダーに追加する文字列を指定します。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 失敗したとき : SFERR_FAILED
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

charset 引数で指定するエンコーディングは "US-ASCII" や "ISO-2022-JP" など IANA に登録された文字列を指定します。 また、text 引数で指定する文字列はこのエンコーディングでエンコードされている必要があります。

例えば、"ISO-2022-JP" の文字列をメール ヘッダーに追加する場合、その文字列を SFXMailUtility::ShiftJISToJIS 関数などを使って JIS コードに変換してから text 引数に渡します。

使用例

SFXMailField::Encode の使用例

参照

SFXMailField::AddNonEncodedText


SFXMailField::AddNonEncodedText
エンコードされていない文字列をメール ヘッダー文字列に追加します。
[ protected ]
SFCError AddNonEncodedText(
    ACharConstPtr start   // 追加する文字列の先頭へのポインター
    ACharConstPtr end     // 追加する文字列の終端へのポインター
);
[ protected ]
SFCError AddNonEncodedText(
    SFXAnsiStringConstRef text   // 追加する文字列
);

引数

text

追加する文字列を指定します。

textStart

追加する文字列の先頭へのポインターを指定します。

textEnd

追加する文字列の終端へのポインターを指定します。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 失敗したとき : SFERR_FAILED
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

"US-ASCII" の文字列を指定します。

参照

SFXMailField::Add


SFXMailField::Clear
メール ヘッダーの文字列をクリアします。
[ public ]
Void Clear(Void);

SFXMailField::Decode
指定したメール ヘッダー文字列を解析します。
[ public ]
SFCError Decode(
    SFXAnsiStringConstRef string   // 解析する文字列
);

引数

string

解析する文字列を指定します。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 不正な文字があるとき : SFERR_INVALID_FORMAT
  • 引数が正しくないとき : SFERR_INVALID_PARAM
  • メモリ不足のとき : SFERR_NO_MEMORY
  • 失敗したとき : SFERR_FAILED

解説

RFC2047 ( MIME : Message Header Extensions for Non-ASCII Text ) でエンコードされた文字列を解析し、内部表現に変換します。

文字列を各エンコードの断片毎に「エンコード名と文字列」の組で保持します。

断片の数は SFXMailField::GetSize 関数、断片の文字列は SFXMailField::GetCharsetText 関数を使って取得します。

使用例

メール ヘッダー文字列の "US-ASCII" と "ISO-2022-JP" を認識し、Shift JIS の文字列にして返します。厳密には SFXMailField::Decode 関数の戻り値をチェックする必要があります。

SFXAnsiString DecodeHeader(SFXAnsiStringConstRef str) {
    SFXAnsiString result;
    SFXMailField decoder;

    // デコードする
    decoder.Decode(str);

    for (SInt32 i = 0; i < decoder.GetSize(); ++i) {
        // 内部表現のデータを取得する
        SFXMailField::CharsetTextConstPtr f = decoder.GetCharsetText(i);
        文字コードが JISコード( iso-2022-jp )の場合
        if (f->charset.Equals("iso-2022-jp", false)) { 
            
            SFXAnsiString temp;

            // JIS コード ( iso-2022-jp ) の文字列を Shift JIS コードに変換する
            SFXMailUtility::JISToShiftJIS(f->text, &temp, '\0');

            // result への追加
            result += temp;
        }
        else if (f->charset.Equals("us-ascii", false)) { // ascii
            result += f->text;
        }
        else { // other .. skip it 
            /* IMPLEMENT HERE ERROR CHECK */
        }
    }
    return result;
}

参照

SFXMailField::Encode | SFXMailField::CharsetText | SFXMailField::GetSize | SFXMailField::GetCharsetText


SFXMailField::DecodeTextB
Base64 エンコードされた文字列をデコードします。
[ protected, const ]
SFCError DecodeTextB(
    SFXAnsiStringPtr decoded   // デコード後の文字列
    ACharConstPtr start        // デコードする文字列の先頭へのポインター
    ACharConstPtr end          // デコードする文字列の終端へのポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 不正な文字があるとき : SFERR_INVALID_FORMAT
  • 引数が正しくないとき : SFERR_INVALID_PARAM
  • メモリ不足のとき : SFERR_NO_MEMORY
  • 失敗したとき : SFERR_FAILED

解説

[Note] Base64 エンコードについて

詳細情報 : RFC2045 ( MIME Part One : Format of Internet Message Bodies )

参照

SFXMailField::DecodeTextQ


SFXMailField::DecodeTextQ
Quoted-Printable エンコードされた文字列をデコードします。
[ protected, const ]
SFCError DecodeTextQ(
    SFXAnsiStringPtr decoded   // デコード後の文字列
    ACharConstPtr start        // デコードする文字列の先頭へのポインター
    ACharConstPtr end          // デコードする文字列の終端へのポインター
);

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 不正な文字があるとき : SFERR_INVALID_FORMAT
  • 引数が正しくないとき : SFERR_INVALID_PARAM
  • メモリ不足のとき : SFERR_NO_MEMORY

解説

[Note] Quoted-Printable エンコードについて

詳細情報 : RFC2045 ( MIME Part One : Format of Internet Message Bodies )

参照

SFXMailField::DecodeTextB


SFXMailField::Encode
内部表現をメール ヘッダー文字列としてエンコードします。
[ public, const ]
SFCError Encode(
    SFXAnsiStringPtr string   // 出力先
);

引数

string

出力先の文字列を指定します。

戻り値

  • 成功したとき : SFERR_NO_ERROR
  • 引数が正しくないとき : SFERR_INVALID_PARAM
  • メモリ不足のとき : SFERR_NO_MEMORY
  • 失敗したとき : SFERR_FAILED

使用例

Shift_JIS の文字列をメール ヘッダー文字列に変換します。 厳密には SFXMailField::Encode 関数の戻り値をチェックする必要があります。

// Shift_JIS から JIS へ変換してから B エンコードする
// EncodeHeader 関数は ASCII 文字を含む文字は未対応
SFXAnsiString EncodeHeader(SFXAnsiStringConstRef str) {
    SFXAnsiString jis;
    SFXAnsiString result;
    SFXMailField encoder;

    // SJIS -> JIS に変換する
    SFXMailUtility::ShiftJISToJIS(str, &jis, '\0');

    encoder.Add("ISO-2022-JP", jis);
    encoder.Encode(&result);
    return result;
}

参照

SFXMailField::Add


SFXMailField::GetCharsetText
内部表現のデータを取得します。
[ public, const ]
CharsetTextPtr GetCharsetText(
    SInt32 index   // インデックス番号
);

引数

index

内部表現のインデックス番号を指定します。

戻り値

SFXMailField::CharsetText で表された内部表現を返します。

解説

SFXMailField::CharsetText で表された内部表現を取得します。 インデックス番号は、0 から SFXMailField::GetSize 関数の戻り値まで指定できます。

参照

SFXMailField::Decode | SFXMailField::CharsetText | SFXMailField::GetSize


SFXMailField::GetSize
ヘッダー文字列の内部表現の断片の数を取得します。
[ public, const ]
SInt32 GetSize(Void);

戻り値

内部表現の断片数を取得します。

解説

内部表現の断片数を取得します。

参照

SFXMailField::GetCharsetText | SFXMailField::Decode


SFXMailField::IsLWSP
文字が LWSP ( 空白文字、水平タブ、改行文字、または 復帰文字 ) であるかどうかを判定します。
[ protected, static ]
Bool IsLWSP(
    AChar c   // 判定する文字
);

戻り値

  • 文字が LWSP ( 空白文字、水平タブ、改行文字、または 復帰文字 ) であるとき : true
  • そうでないとき : false

SFXMailField::SkipLWSP
ポインターを LWSP ( 空白文字、水平タブ、改行文字、または復帰文字 ) 以外の文字まで進めます。
[ protected, static ]
Void SkipLWSP(
    ACharConstHandle start   // 進めるポインターへのポインター
    ACharConstPtr end        // 終了位置
);

解説

引数で指定したポインターを次の LWSP ( 空白文字、水平タブ、改行文字、または復帰文字 ) 以外の文字、または終了位置 ( end ) まで進めます。

ポインターが終了位置 ( end ) よりも右にある場合は何もしません。


SFXMailField::CharsetText
SFXMailField の内部表現です。
SFMTYPEDEFCLASS(CharsetText)
struct CharsetText {
  SFXAnsiString charset;
  SFXAnsiString text;
};

解説

SFXMailField クラスの内部表現です。 キャラクタ セットを保持する charset と、データを保持する text から構成されます。

参照

SFXMailField | SFXMailField::GetCharsetText