//
//	nMail.dll ヘッダ
//	  Copyright (c) 1999-2010 Nanshiki corporation
//
//	  1999/ 9/ 1 Version 1.00
//	  2000/11/ 1 Version 1.10
//	  2008/ 7/ 1 Version 1.30
//	  2009/ 9/ 1 Version 2.00
//	  2010/ 5/12 Version 3.00
//

#ifndef _NMAIL_H_
#define _NMAIL_H_

#ifndef _WINSOCKAPI_
#include <winsock.h>
#endif

#ifdef __cplusplus
extern "C" {
#endif

#define NMAIL_ATTACHMENT_TEMP_SIZE	(400)

#define	NMAIL_SMTP_PORT				(25)	// SMTP ポート番号
#define	NMAIL_SMTP_SUBMISSION_PORT	(587)	// SMTP サブミッションポート番号
#define	NMAIL_SMTP_SSL_PORT			(465)	// SMTP over SSL ポート番号
#define	NMAIL_POP3_PORT				(110)	// POP3 ポート番号
#define	NMAIL_POP3_SSL_PORT			(995)	// POP3 over SSL ポート番号
#define	NMAIL_IMAP4_PORT			(143)	// IMAP4 ポート番号
#define	NMAIL_IMAP4_SSL_PORT		(993)	// IMAP4 over SSL ポート番号

#define	NMAIL_ERROR_SOCKET			(-1)	// 接続エラー等
#define	NMAIL_ERROR_AUTHENTICATE	(-2)	// 認証失敗
#define NMAIL_ERROR_INVALID_NO		(-3)	// メール番号が正しくない
#define NMAIL_ERROR_TIMEOUT			(-4)	// タイムアウト
#define NMAIL_ERROR_FILE_OPEN		(-5)	// 添付ファイルのオープン失敗
#define NMAIL_ERROR_PARTIAL			(-6)	// 分割ファイルが全部揃っていない
#define NMAIL_ERROR_FILE_ALREADY	(-7)	// 添付ファイルがすでに存在する
#define NMAIL_ERROR_AUTHENTICATE_NO_SUPPORT	(-8)	// 認証非対応
#define NMAIL_ERROR_MEMORY			(-9)	// 内部でのメモリ確保エラー
#define NMAIL_ERROR					(-10)	// その他のエラー
// 2009/7/7
#define NMAIL_ERROR_INVALID_PARAMETER		(-11)	// パラメータ不正
#define NMAIL_ERROR_IMAP4_NO				(-12)	// IMAP4 応答 NO
#define NMAIL_ERROR_IMAP4_BAD				(-13)	// IMAP4 応答 BAD
#define NMAIL_ERROR_IMAP4_NO_NAMESPACE		(-14)	// 名前空間が存在しない
// 2004/12/28
#define NMAIL_ERROR_SUSPEND_ATTACHMENT_FILE		(-20)
#define NMAIL_ERROR_IMAP4_NO_RESULT				(-21)
// 2009/11/6
#define NMAIL_ERROR_SSL_NO_SUPPORT				(-30)	// OS が SSL に非対応
#define NMAIL_ERROR_STARTTLS_NO_SUPPORT			(-31)	// サーバが STARTTLS に非対応

#define NMAIL_ERROR_SERVICE_NOT_AVAILABLE		(-421)	// サービス利用できず
#define NMAIL_ERROR_MAILBOX_UNAVAILABLE			(-450)	// メールボックス使用不可(使用中等)
#define NMAIL_ERROR_LOCAL_ERROR					(-451)	// サーバー処理エラー
#define NMAIL_ERROR_INSUFFICIENT_SYSTEM_STORAGE	(-452)	// システム容量不足エラー
#define NMAIL_ERROR_SYNTAX_ERROR				(-500)	// コマンドの文法エラー
#define NMAIL_ERROR_PARAMETER					(-501)	// パラメータか引数の文法エラー
#define NMAIL_ERROR_COMMAND_NOT_IMPLEMENTED		(-502)	// 未実装コマンド
#define NMAIL_ERROR_BAD_SEQUENCE				(-503)	// コマンドのシーケンス異常
#define NMAIL_ERROR_SMTP_AUTHENTICATE			(-535)	// SMTP 認証失敗
#define NMAIL_ERROR_USER_UNKOWN					(-550)	// 送信先なし
#define NMAIL_ERROR_USER_NOT_LOCAL				(-551)	// ユーザーが存在しないか、転送先無し
#define NMAIL_ERROR_EXCEEDED_STORAGE_ALLOCATION	(-552)	// 容量オーバーエラー
#define NMAIL_ERROR_MAILBOX_NAME_NOT_ALLOWED	(-553)	// メールボックス名が正しくない
#define NMAIL_ERROR_RELAY_OPERATION_REJECTED	(-553)	// リレー防止エラー
#define NMAIL_ERROR_TRANSACTION_FAILED			(-554)	// トランザクション失敗

#define NMAIL_NO_ATTACHMENT_FILE	(-1)	// 添付ファイルなし
#define NMAIL_ATTACHMENT_FILE		(0)		// 添付ファイルつき(分割されていない)

#define NMAIL_SUCCESS				(1)		// 正常終了

// 2004/12/28
#define NMAIL_PARTIAL_ATTACHMENT_FILE	(1)		// 分割添付ファイルを取得
#define NMAIL_GET_TEXT_ONLY				(2)		// 本文のみ取得

#define NMAIL_ADD_DATE_FIELD				(0x0001)	// ヘッダにDateフィールドを付加
#define NMAIL_ADD_MESSAGEID_FIELD			(0x0002)	// ヘッダにMessage-IDフィールドを付加
// 2004/12/28
#define NMAIL_SUSPEND_ATTACHMENT_FILE		(0x0004)	// 添付ファイル送信で一時休止あり
#define NMAIL_SUSPEND_NEXT					(0x0008)	// 一時休止の二回目以降
// 2007/8/2
#define NMAIL_FILE_NAME_RFC2231				(0x0010)	// 添付ファイル名を RFC2231 でエンコード
#define NMAIL_ENCODE_UTF8					(0x0020)	// メール本文を UTF-8(BASE64) で送信
// 2011/11/25
#define NMAIL_SMTP_HTML						(0x0040)	// HTML メール送信
#define NMAIL_SMTP_HTML_USE_FILE			(0x0080)	// HTML パートは body ではなく、添付の html ファイルを使用する
#define NMAIL_SMTP_HTML_AUTO_PART			(0x0100)	// メールの宛先のドメインでパートの有無を判定
#define NMAIL_SMTP_HTML_NO_MIXED_PART		(0x0200)	// HTML で multipart/mixed パート無し
#define NMAIL_SMTP_HTML_SOFTBANK			(0x0200)	// HTML で multipart/mixed パート無し (softbankデコメール)
#define NMAIL_SMTP_HTML_EMOBILE				(0x0200)	// HTML で multipart/mixed パート無し (emobileデコメール)
#define NMAIL_SMTP_HTML_WILLCOM				(0x0200)	// HTML で multipart/mixed パート無し (willcomデコメール)
#define NMAIL_SMTP_HTML_NO_RELATED_PART		(0x0400)	// HTML で multipart/related パート無し
#define NMAIL_SMTP_HTML_AU					(0x0400)	// HTML で multipart/related パート無し (auデコメール)
#define NMAIL_SMTP_HTML_NO_PLAIN_PART		(0x0800)	// text/plain パート無し (デコメール系とは併用不可)
#define NMAIL_SMTP_HTML_SET_PLAIN_BODY		(0x1000)	// text/plain パートの文字列を body で指定
// 2009/7/7
#define NMAIL_IMAP4_MIME_PART_SAVE_AS_FILE	(0x0800)	// IMAP4 ボディパート保存で引数のパスでファイル名も指定
#define NMAIL_IMAP4_MIME_PART_PEEK			(0x1000)	// IMAP4 ボディパート取得で既読フラグを立てない
#define NMAIL_IMAP4_MIME_PART_NO_DECODE		(0x2000)	// IMAP4 ボディパート取得でデコードしない
#define NMAIL_IMAP4_MIME_PART_HEADER		(0x4000)	// IMAP4 ボディパートのヘッダ取得
#define NMAIL_IMAP4_USE_UID					(0x8000)	// IMAP4 でメール番号でなく UID を使用する

#define NMAIL_OPTION_TIMEOUT			(0)		// タイムアウト時間
#define NMAIL_OPTION_HEADER_MAX			(1)		// ヘッダ最大値
#define NMAIL_OPTION_BODY_MAX			(2)		// 本文最大値
#define NMAIL_OPTION_ALREADY_FILE		(3)		// ファイルが存在した場合の処理
#define NMAIL_OPTION_DEBUG_MODE			(4)		// デバックモード
// 2003/11/4
#define NMAIL_OPTION_CONNECT_TIMEOUT	(5)		// 接続時タイムアウト設定
#define NMAIL_OPTION_SPLIT_CHAR			(6)		// 文字列区切り文字
// 2004/12/28
#define NMAIL_OPTION_SUSPEND_SIZE		(7)		// 一時休止ファイルサイズ
#define NMAIL_OPTION_SLEEP_TIME			(8)		// Sleep 時間
#define NMAIL_OPTION_FIELD_MAX			(9)		// ヘッダフィールド最大値
// 2009/1/5
#define NMAIL_OPTION_SAVE_HTML			(10)	// HTML メールの HTML 部分をファイルに保存するか
// 2009/2/12
#define NMAIL_OPTION_DECODE_BODY		(11)	// 本文のテキストをデコードするか
#define NMAIL_OPTION_DECODE_HEADER		(12)	// ヘッダをデコードするか
// 2010/7/16
#define NMAIL_OPTION_FILENAME_MAX		(13)	// 添付ファイル名格納バッファのサイズ
// 2012/4/4
#define	NMAIL_OPTION_CHANGE_CHAR		(14)	// 添付ファイル名の使用不可文字を置き換える文字
#define	NMAIL_OPTION_CHANGE_CHAR_MODE	(15)	// 添付ファイル名の文字を置き換える条件
// 2012/5/28
#define	NMAIL_OPTION_SAVE_RFC822		(16)	// RFC822 をどう処理するか

#define NMAIL_FILE_OVERWRITE		(0)		// ファイルが存在した場合上書き
#define NMAIL_FILE_RENAME			(1)		// ファイルが存在した場合名前を変更して保存
#define NMAIL_FILE_ALREADY_ERROR	(2)		// ファイルが存在した場合エラー

#define NMAIL_GET_ERROR_MESSAGE		(0)		// エラーメッセージ
#define NMAIL_GET_DEBUG_MESSAGE		(1)		// デバックメッセージ

#define NMAIL_DEBUG_START		(1)		// デバック開始
#define NMAIL_DEBUG_END			(0)		// デバック終了

#define NMAIL_GET_UIDL_ALL		(0)		// 全ての UIDL を得る

// 2003/11/4
#define NMAIL_CONNECT_TIMEOUT_ON		(1)		// 接続時タイムアウト設定ON
#define NMAIL_CONNECT_TIMEOUT_OFF		(0)		// 接続時タイムアウト設定OFF

// 2004/12/28
#define NMAIL_SMTP_AUTH_NOT_USE			(0)		// 認証なし
#define NMAIL_SMTP_AUTH_PLAIN			(1)		// PLAIN
#define NMAIL_SMTP_AUTH_LOGIN			(2)		// LOGIN
#define NMAIL_SMTP_AUTH_CRAM_MD5		(4)		// CRAM-MD5
#define NMAIL_SMTP_AUTH_DIGEST_MD5		(8)		// DIGEST-MD5

// 2009/1/5
#define NMAIL_SAVE_HTML_OFF				(0)		// HTML メールの HTML 部分はファイルに保存しない
#define NMAIL_SAVE_HTML_ON				(1)		// HTML メールの HTML 部分をファイルに保存する (要 Path 指定)

// 2009/2/12
#define NMAIL_DECODE_BODY_ON			(0)		// 本文は全てデコードする
#define NMAIL_DECODE_BODY_ALL_OFF		(1)		// 本文は全てデコードしない
#define NMAIL_DECODE_BODY_TEXT_OFF		(2)		// テキストパートの Content-Transfer-Encoding 指定のエンコードのみデコードしない

#define NMAIL_DECODE_HEADER_ON			(0)		// ヘッダは全てデコードする
#define NMAIL_DECODE_HEADER_OFF			(1)		// ヘッダは全てデコードしない

// 2012/4/4
#define NMAIL_CHANGE_SPLIT_CHAR			(0)		// 添付ファイル名中の区切り文字を変換する
#define NMAIL_CHANGE_HALF_SPACE			(1)		// 添付ファイル名中の半角スペース変換
#define NMAIL_CHANGE_FULL_SPACE			(2)		// 添付ファイル名中の全角スペース変換
#define NMAIL_CHANGE_ALL_SPACE			(3)		// 添付ファイル名中のスペース変換
#define NMAIL_CHANGE_NO_SPLIT_CHAR		(4)		// 添付ファイル名中の区切り文字を変換しない

// 2012/5/28
#define NMAIL_SAVE_RFC822_OFF				(0x00)		// RFC822 パートのテキスト部分は Body に含め、Path 指定があれば添付ファイル部分は保存
#define NMAIL_SAVE_RFC822_BODY				(0x01)		// Path 指定が有れば RFC822 パートのテキスト部分をファイルに保存する
#define NMAIL_SAVE_RFC822_PART_ALL			(0x02)		// Path 指定が有れば RFC822 パートをまとめてファイルに保存する

// 2009/7/8
// IMAP4 認証形式
#define NMAIL_IMAP4_AUTH_PLAIN			(1)		// PLAIN
#define NMAIL_IMAP4_AUTH_LOGIN			(2)		// LOGIN
#define NMAIL_IMAP4_AUTH_CRAM_MD5		(4)		// CRAM-MD5
#define NMAIL_IMAP4_AUTH_DIGEST_MD5		(8)		// DIGEST-MD5

// IMAP4 メールボックス
#define NMAIL_IMAP4_MAILBOX_NO_SELECT	(1)		// SELECT or EXAMINE で開けない
#define NMAIL_IMAP4_MAILBOX_NO_INFERIOUS (2)	// 子メールボックスを作成できない
#define NMAIL_IMAP4_MAILBOX_MARKED		 (4)	// メッセージが追加されている可能性がある
#define NMAIL_IMAP4_MAILBOX_UNMARKED	 (8)	// メッセージが追加されていない
#define NMAIL_IMAP4_MAILBOX_CHILDREN	 (16)	// 子メールボックスが存在
#define NMAIL_IMAP4_MAILBOX_NO_CHILDREN	 (32)	// 子メールボックスが存在しない

// IMAP4 メールメッセージフラグ
#define NMAIL_IMAP4_MESSAGE_ANSWERED	(1)		// 返信済み
#define NMAIL_IMAP4_MESSAGE_DELETED		(2)		// 消去マーク付き
#define NMAIL_IMAP4_MESSAGE_DRAFT		(4)		// 草稿
#define NMAIL_IMAP4_MESSAGE_FLAGGED		(8)		// 重要性
#define NMAIL_IMAP4_MESSAGE_RECENT		(16)	// 到着
#define NMAIL_IMAP4_MESSAGE_SEEN		(32)	// 既読

#define NMAIL_IMAP4_ADD_MESSAGE_FLAG		(1)		// フラグ追加
#define NMAIL_IMAP4_DELETE_MESSAGE_FLAG		(2)		// フラグ削除
#define NMAIL_IMAP4_REPLACE_MESSAGE_FLAG	(3)		// フラグ置き換え

#define NMAIL_IMAP4_MAILBOX_MESSAGE			(1)		// 総メッセージ数
#define NMAIL_IMAP4_MAILBOX_RECENT			(2)		// 新着メッセージ数
#define NMAIL_IMAP4_MAILBOX_UIDNEXT			(3)		// 新しいメッセージの UID
#define NMAIL_IMAP4_MAILBOX_UIDVALIDITY		(4)		// メールボックスの UID Validity
#define NMAIL_IMAP4_MAILBOX_UNSEEN			(5)		// 未読メッセージ数

// IMAP4 検索用
#define NMAIL_IMAP4_SEARCH_ANSWERED			(1)		// 返信済み
#define NMAIL_IMAP4_SEARCH_UNANSWERED		(2)		// 返信済みでない
#define NMAIL_IMAP4_SEARCH_DELETED			(3)		// 消去マークあり
#define NMAIL_IMAP4_SEARCH_UNDELETED		(4)		// 消去マークなし
#define NMAIL_IMAP4_SEARCH_DRAFT			(5)		// 草稿フラグあり
#define NMAIL_IMAP4_SEARCH_UNDRAFT			(6)		// 草稿フラグなし
#define NMAIL_IMAP4_SEARCH_FLAGGED			(7)		// 重要性フラグあり
#define NMAIL_IMAP4_SEARCH_UNFLAGGED		(8)		// 重要性フラグなし
#define NMAIL_IMAP4_SEARCH_RECENT			(9)		// 到着フラグあり
#define NMAIL_IMAP4_SEARCH_OLD				(10)	// 到着フラグなし
#define NMAIL_IMAP4_SEARCH_SEEN				(11)	// 既読フラグあり
#define NMAIL_IMAP4_SEARCH_UNSEEN			(12)	// 既読フラグなし
#define NMAIL_IMAP4_SEARCH_NEW				(13)	// 到着フラグありかつ既読フラグなし
#define NMAIL_IMAP4_SEARCH_ALL				(14)	// 全てのメール
#define NMAIL_IMAP4_SEARCH_KEYWORD			(15)	// 指定されたキーワードあり
#define NMAIL_IMAP4_SEARCH_UNKEYWORD		(16)	// 指定されたキーワードなし
#define NMAIL_IMAP4_SEARCH_FROM				(17)	// FROM ヘッダフィールドに文字列を含む
#define NMAIL_IMAP4_SEARCH_TO				(18)	// TO ヘッダフィールドに文字列を含む
#define NMAIL_IMAP4_SEARCH_CC				(19)	// CC ヘッダフィールドに文字列を含む
#define NMAIL_IMAP4_SEARCH_BCC				(20)	// BCC ヘッダフィールドに文字列を含む
#define NMAIL_IMAP4_SEARCH_SUBJECT			(21)	// SUBJECT ヘッダフィールドに文字列を含む
#define NMAIL_IMAP4_SEARCH_SENTBEFORE		(22)	// DATEヘッダフィールドが指定された年月日以前
#define NMAIL_IMAP4_SEARCH_SENTON			(23)	// DATEヘッダフィールドが指定された年月日
#define NMAIL_IMAP4_SEARCH_SENTSINCE		(24)	// DATEヘッダフィールドが指定された年月日以降
#define NMAIL_IMAP4_SEARCH_BEFORE			(25)	// 指定された年月日以前に到着
#define NMAIL_IMAP4_SEARCH_ON				(26)	// 指定された年月日に到着
#define NMAIL_IMAP4_SEARCH_SINCE			(27)	// 指定された年月日以降に到着
#define NMAIL_IMAP4_SEARCH_HEADER			(28)	// 指定したヘッダフィールドに文字列を含む("フィールド名 文字列")
#define NMAIL_IMAP4_SEARCH_BODY				(29)	// 本文に文字列を含む
#define NMAIL_IMAP4_SEARCH_TEXT				(30)	// ヘッダおよび本文に文字列を含む
#define NMAIL_IMAP4_SEARCH_LARGER			(31)	// 指定サイズより大きなメール
#define NMAIL_IMAP4_SEARCH_SMALLER			(32)	// 指定サイズより小さなメール
#define NMAIL_IMAP4_SEARCH_UID				(33)	// 指定 UID を持つ

#define NMAIL_IMAP4_SEARCH_COMMAND		(0x0100)	// 検索文字列を直接指定する

#define NMAIL_IMAP4_SEARCH_NOT			(0x0200)	// 検索条件 NOT
#define NMAIL_IMAP4_SEARCH_OR			(0x0400)	// 検索条件 OR
#define NMAIL_IMAP4_SEARCH_AND			(0x0800)	// 検索条件 AND
#define NMAIL_IMAP4_SEARCH_FIRST		(0x1000)	// 検索条件ワークを初期化
#define NMAIL_IMAP4_SEARCH_NO_WAIT		(0x2000)	// 検索コマンド発行後すぐに戻る
#define NMAIL_IMAP4_SEARCH_CHECK		(0x4000)	// 検索結果チェック

#define NMAIL_IMAP4_NAMESPACE_PERSONAL_ALL	(0)			// 個人名前空間取得(タブ区切り)
#define NMAIL_IMAP4_NAMESPACE_OTHER_ALL		(1)			// 他人名前空間取得(タブ区切り)
#define NMAIL_IMAP4_NAMESPACE_SHARED_ALL	(2)			// 共有名前空間取得(タブ区切り)

#define NMAIL_IMAP4_NAMESPACE_PERSONAL_NO	(0x0100)		// 個人名前空間取得(指定番目)
#define NMAIL_IMAP4_NAMESPACE_OTHER_NO		(0x0200)		// 他人名前空間取得(指定番目)
#define NMAIL_IMAP4_NAMESPACE_SHARED_NO		(0x0300)		// 共有名前空間取得(指定番目)

#define NMAIL_IMAP4_NAMESPACE_PERSONAL_COUNT	(0x1000)	// 個人名前空間数
#define NMAIL_IMAP4_NAMESPACE_OTHER_COUNT		(0x2000)	// 他人名前空間数
#define NMAIL_IMAP4_NAMESPACE_SHARED_COUNT		(0x3000)	// 共有名前空間数

#define NMAIL_IMAP4_MIME_CONTENT_PART				(0)			// ボディパート番号文字列
#define NMAIL_IMAP4_MIME_CONTENT_TYPE				(1)			// Content-Type タイプ
#define NMAIL_IMAP4_MIME_CONTENT_SUBTYPE			(2)			// Content-Type サブタイプ
#define NMAIL_IMAP4_MIME_CONTENT_ID					(3)			// Content-ID
#define NMAIL_IMAP4_MIME_CONTENT_DESCRIPTION		(4)			// Content-Description
#define NMAIL_IMAP4_MIME_CONTENT_TRANSFER_ENCODING	(5)			// Content-Transfer-Encoding
#define NMAIL_IMAP4_MIME_CONTENT_FILE_NAME			(6)			// ファイル名
#define NMAIL_IMAP4_MIME_CONTENT_TYPE_AND_SUBTYPE	(7)			// Content-Type タイプ＆サブタイプ
#define NMAIL_IMAP4_MIME_CONTENT_SIZE				(8)			// ボディサイズ
#define NMAIL_IMAP4_MIME_CONTENT_LINE				(9)			// ボディ行数
#define NMAIL_IMAP4_MIME_CONTENT_PARAMETER_COUNT	(10)		// Content-Type パラメータ数
#define NMAIL_IMAP4_MIME_CONTENT_PARAMETER			(11)		// Content-Type パラメータ

#define NMAIL_MAKE_DATE_TIME_SMTP			(0x00000)	// SMTP日時文字列(RFC2822)
#define NMAIL_MAKE_DATE_IMAP4				(0x08000)	// IMAP4日付文字列(RFC2060) 検索用
#define NMAIL_MAKE_DATE_TIME_IMAP4			(0x10000)	// IMAP4日時文字列(RFC2060) 内部日付用文字列
#define NMAIL_MAKE_DATE_NOW					(0x20000)	// 現在日時
#define NMAIL_MAKE_DATE_TIMEZONE_PLUS		(0x40000)	// タイムゾーン指定 +
#define NMAIL_MAKE_DATE_TIMEZONE_MINUS		(0x80000)	// タイムゾーン指定 -
#define NMAIL_MAKE_DATE_SIZE				(32)		// 日時文字列用バッファサイズ

#define NMAIL_SSL_IGNORE_NOT_TIME_VALID		(0x0800)	// 証明書が期限切れでもエラーにしない
#define NMAIL_SSL_ALLOW_UNKNOWN_CA			(0x0400)	// 信頼されない証明書があってもエラーにしない
#define NMAIL_SSL_IGNORE_INVALID_NAME		(0x0040)	// 証明書の Common Name が渡された値(サーバ名)と一致しなくてもエラーにしない

#define NMAIL_SSL_SSL3						(0x1000)	// SSL Version 3
#define NMAIL_SSL_TLS1						(0x2000)	// TLS Version 1
#define NMAIL_SSL_STARTTLS					(0x4000)	// STARTTLS

#define	NMAIL_SSL_ERROR_UNTRUSTED_ROOT		(-2146762487)	// 0x800b0109 証明チェーンは正しく処理されたが、証明機関の証明書のうちの1つが信頼されていない
#define	NMAIL_SSL_ERROR_INTERNAL			(-2146893052)	// 0x80090304 内部エラー
#define	NMAIL_SSL_ERROR_ILLEGAL_MESSAGE		(-2146893018)	// 0x80090326 予期しないか、または間違った形式のデータを受信
#define	NMAIL_SSL_ERROR_EXPIRED				(-2146893016)	// 0x80090328 受信した証明書の期限切れ
#define	NMAIL_SSL_ERROR_CN_NO_MATCH			(-2146762481)	// 0x800b010f 証明書の Common Name が渡された値(サーバ名)と一致しない


//	バージョンを得る
//	in:  なし
//	out: バージョン (例: 1.10 .. 110)
//
int WINAPI NMailGetVersion(VOID);

//
//	パラメータ設定
//	in:  TimeOutSec .. タイムアウト時間(秒単位)
//	     HeaderMax  .. ヘッダの最大値(バイト数)
//	     BodyMax    .. メール本文の最大値(バイト数)
//	out: なし
//
VOID WINAPI NMailSetParameter(int TimeOutSec, int HeaderMax, int BodyMax);

//
//	WinSock 初期化
//	in:  なし
//	out: TRUE .. 初期化成功
//
BOOL WINAPI NMailInitializeWinSock(VOID);

//
//	WinSock 終了
//	in:  なし
//	out: TRUE .. 正常終了
//
BOOL WINAPI NMailEndWinSock(VOID);

//
//	POP3 サーバに接続
//	in:  HostName .. POP3 ホスト名
//	out: ソケット
//	     INVALID_SOCKET でエラー
//
SOCKET WINAPI NMailPop3Connect(LPCTSTR HostName);
SOCKET WINAPI NMailPop3ConnectA(LPCSTR HostName);
SOCKET WINAPI NMailPop3ConnectW(LPCWSTR HostName);
#if _MBCS
#define NMailPop3Connect	NMailPop3ConnectA
#endif
#ifdef _UNICODE
#define NMailPop3Connect	NMailPop3ConnectW
#endif

//
//	POP3 サーバに接続(ポート番号指定)
//	in:  HostName .. POP3 ホスト名
//       PortNo   .. ポート番号
//	out: ソケット
//
SOCKET WINAPI NMailPop3ConnectPortNo(LPCTSTR HostName, int PortNo);
SOCKET WINAPI NMailPop3ConnectPortNoA(LPCSTR HostName, int PortNo);
SOCKET WINAPI NMailPop3ConnectPortNoW(LPCWSTR HostName, int PortNo);
#ifdef _MBCS
#define NMailPop3ConnectPortNo	NMailPop3ConnectPortNoA
#endif
#ifdef _UNICODE
#define NMailPop3ConnectPortNo	NMailPop3ConnectPortNoW
#endif

//
//	POP3 認証
//	in:  Socket   .. ソケット
//	     Id       .. ユーザー名
//	     Password .. パスワード
//	     APopFlag .. APOP を使用するか(True で使用する)
//	out: メール数
//	     負の数でエラー
//
int WINAPI NMailPop3Authenticate(SOCKET Socket, LPCTSTR Id, LPCTSTR Password, BOOL APopFlag);
int WINAPI NMailPop3AuthenticateA(SOCKET Socket, LPCSTR Id, LPCSTR Password, BOOL APopFlag);
int WINAPI NMailPop3AuthenticateW(SOCKET Socket, LPCWSTR Id, LPCWSTR Password, BOOL APopFlag);
#ifdef _MBCS
#define NMailPop3Authenticate	NMailPop3AuthenticateA
#endif
#ifdef _UNICODE
#define NMailPop3Authenticate	NMailPop3AuthenticateW
#endif

//
//	POP3 接続終了
//	in:  Socket   .. ソケット
//	out: 負の数でエラー
//
int WINAPI NMailPop3Close(SOCKET Socket);

//
//	POP3 メールの情報を得る
//	in:  Socket   .. ソケット
//	     No       .. メール番号
//	     Subject  .. メールの題名
//	     Date     .. メールの送信日時
//	     From     .. メールの差出人
//	     SizeFlag .. TRUE ならサイズを返す
//	out: SizeFlag が TRUE ならサイズ
//	     負の数でエラー
//
int WINAPI NMailPop3GetMailStatus(SOCKET Socket, int No, LPTSTR Subject, LPTSTR Date, LPTSTR From, LPTSTR Header, BOOL SizeFlag);
int WINAPI NMailPop3GetMailStatusA(SOCKET Socket, int No, LPSTR Subject, LPSTR Date, LPSTR From, LPSTR Header, BOOL SizeFlag);
int WINAPI NMailPop3GetMailStatusW(SOCKET Socket, int No, LPWSTR Subject, LPWSTR Date, LPWSTR From, LPWSTR Header, BOOL SizeFlag);
#ifdef _MBCS
#define NMailPop3GetMailStatus	NMailPop3GetMailStatusA
#endif
#ifdef _UNICODE
#define NMailPop3GetMailStatus	NMailPop3GetMailStatusW
#endif

//
//	POP3 メールのサイズを得る
//	in:  Socket   .. ソケット
//	     No       .. メール番号
//	out: メールのサイズ
//	     負の数でエラー
//
int WINAPI NMailPop3GetMailSize(SOCKET Socket, int No);

//
//	POP3 メールを得る
//	in:  Socket   .. ソケット
//	     No       .. メール番号
//	     Subject  .. メールの題名
//	     Date     .. メールの送信日時
//	     From     .. メールの差出人
//	     Header   .. メールのヘッダ
//	     Body     .. メールの本文
//	     Path     .. 添付ファイルを保存するフォルダ
//	                 NULL で保存せず
//	     FileName .. 添付ファイル名を格納するバッファ
//	                 NULL で格納せず
//	out: メールのサイズ
//	     負の数でエラー
//
int WINAPI NMailPop3GetMail(SOCKET Socket, int No, LPTSTR Subject, LPTSTR Date, LPTSTR From, LPTSTR Header, LPTSTR Body, LPCTSTR Path, LPTSTR FileName);
int WINAPI NMailPop3GetMailA(SOCKET Socket, int No, LPSTR Subject, LPSTR Date, LPSTR From, LPSTR Header, LPSTR Body, LPCSTR Path, LPSTR FileName);
int WINAPI NMailPop3GetMailW(SOCKET Socket, int No, LPWSTR Subject, LPWSTR Date, LPWSTR From, LPWSTR Header, LPWSTR Body, LPCWSTR Path, LPWSTR FileName);
#ifdef _MBCS
#define NMailPop3GetMail	NMailPop3GetMailA
#endif
#ifdef _UNICODE
#define NMailPop3GetMail	NMailPop3GetMailW
#endif

//
//	POP3 メールを得る(分割添付ファイル対応版)
//	in:  Socket   .. ソケット
//	     No       .. メール番号
//	     Subject  .. メールの題名
//	     Date     .. メールの送信日時
//	     From     .. メールの差出人
//	     Header   .. メールのヘッダ
//	     Body     .. メールの本文
//	     Path     .. 添付ファイルを保存するフォルダ
//	     FileName .. 添付ファイル名を格納するバッファ
//	out: 負の数でエラー
//
int WINAPI NMailPop3GetMailPartial(SOCKET Socket, int No, LPTSTR Subject, LPTSTR Date, LPTSTR From, LPTSTR Header, LPTSTR Body, LPCTSTR Path, LPTSTR FileName);
int WINAPI NMailPop3GetMailPartialA(SOCKET Socket, int No, LPSTR Subject, LPSTR Date, LPSTR From, LPSTR Header, LPSTR Body, LPCSTR Path, LPSTR FileName);
int WINAPI NMailPop3GetMailPartialW(SOCKET Socket, int No, LPWSTR Subject, LPWSTR Date, LPWSTR From, LPWSTR Header, LPWSTR Body, LPCWSTR Path, LPWSTR FileName);
#ifdef _MBCS
#define NMailPop3GetMailPartial	NMailPop3GetMailPartialA
#endif
#ifdef _UNICODE
#define NMailPop3GetMailPartial	NMailPop3GetMailPartialW
#endif

//
//	POP3 メールを得る オプション付き 一時休止あり
//	in:  Socket   .. ソケット
//	     No       .. メール番号
//	     Subject  .. メールの題名
//	     Date     .. メールの送信日時
//	     From     .. メールの差出人
//	     Header   .. メールのヘッダ
//	     Body     .. メールの本文
//	     Path     .. 添付ファイルを保存するフォルダ
//	                 NULL で保存せず
//	     FileName .. 添付ファイル名を格納するバッファ
//	                 NULL で格納せず
//	     Temp     .. 一時作業エリア
//	                 NMAIL_ATTACHMENT_TEMP_SIZE 分確保しておく必要がある
//	                 NULL で nMail.DLL 内部のバッファを使用
//	     Flag     .. フラグ
//	out: メールのサイズ
//	     負の数でエラー
//
int WINAPI NMailPop3GetMailEx(SOCKET Socket, int No, LPTSTR Subject, LPTSTR Date, LPTSTR From, LPTSTR Header, LPTSTR Body, LPCTSTR Path, LPTSTR FileName, LPTSTR Temp, int Flag);
int WINAPI NMailPop3GetMailExA(SOCKET Socket, int No, LPSTR Subject, LPSTR Date, LPSTR From, LPSTR Header, LPSTR Body, LPCSTR Path, LPSTR FileName, LPSTR Temp, int Flag);
int WINAPI NMailPop3GetMailExW(SOCKET Socket, int No, LPWSTR Subject, LPWSTR Date, LPWSTR From, LPWSTR Header, LPWSTR Body, LPCWSTR Path, LPWSTR FileName, LPSTR Temp, int Flag);
#ifdef _MBCS
#define NMailPop3GetMailEx	NMailPop3GetMailExA
#endif
#ifdef _UNICODE
#define NMailPop3GetMailEx	NMailPop3GetMailExW
#endif

//
//	POP3 メールを削除
//	in:  Socket   .. ソケット
//	     No       .. メール番号
//	out: 負の数でエラー
//
int WINAPI NMailPop3DeleteMail(SOCKET Socket, int No);

//
//	POP3 メールが添付ファイル付きかチェック
//	in:  Socket   .. ソケット
//	     No       .. メール番号
//	     Id       .. 分割ファイルの ID を格納するバッファ
//	     Max      .. バッファサイズ
//	out: NMAIL_NO_ATTACHMENT_FILE    .. 添付ファイルなし
//	     NMAIL_ATTACHMENT_FILE 以上  .. 添付ファイルあり
//	                                    NMAIL_ATTACHMENT_FILE(0) で分割
//	                                    されていない添付ファイル
//	                                    1 以上の場合分割されている添付
//	                                    ファイルで数値はパート番号
//
int WINAPI NMailPop3GetAttachmentFileStatus(SOCKET Socket, int No, LPTSTR Id, int Max);
int WINAPI NMailPop3GetAttachmentFileStatusA(SOCKET Socket, int No, LPSTR Id, int Max);
int WINAPI NMailPop3GetAttachmentFileStatusW(SOCKET Socket, int No, LPWSTR Id, int Max);
#ifdef _MBCS
#define NMailPop3GetAttachmentFileStatus	NMailPop3GetAttachmentFileStatusA
#endif
#ifdef _UNICODE
#define NMailPop3GetAttachmentFileStatus	NMailPop3GetAttachmentFileStatusW
#endif

//
//	POP3 UIDL を得る
//	in:  Socket   .. ソケット
//	     No       .. メール番号
//	     Uidl     .. UIDL を格納するバッファ
//	     Max      .. バッファサイズ
//	out: 負の数でエラー
//
int WINAPI NMailPop3GetUidl(SOCKET Socket, int No, LPTSTR Uidl, int Max);
int WINAPI NMailPop3GetUidlA(SOCKET Socket, int No, LPSTR Uidl, int Max);
int WINAPI NMailPop3GetUidlW(SOCKET Socket, int No, LPWSTR Uidl, int Max);
#ifdef _MBCS
#define NMailPop3GetUidl	NMailPop3GetUidlA
#endif
#ifdef _UNICODE
#define NMailPop3GetUidl	NMailPop3GetUidlW
#endif

//
//	メールを送信
//	in:  HostName .. SMTP サーバ名
//	     To       .. 送り先
//	     Cc       .. CC
//	     Bcc      .. BCC
//	     From     .. 差出人
//	     Subject  .. 題名
//	     Body     .. メール本文
//	     Header   .. 他のヘッダ
//	     Path     .. 添付ファイル名(なければNULL)
//	     Flag     .. ヘッダにDate/Message-IDを付加するか
//	out: 負の数でエラー
//
int WINAPI NMailSmtpSendMail(LPCTSTR HostName, LPCTSTR To, LPCTSTR Cc, LPCTSTR Bcc, LPCTSTR From, LPCTSTR Subject, LPCTSTR Body, LPCTSTR Header, LPCTSTR Path, int Flag);
int WINAPI NMailSmtpSendMailA(LPCSTR HostName, LPCSTR To, LPCSTR Cc, LPCSTR Bcc, LPCSTR From, LPCSTR Subject, LPCSTR Body, LPCSTR Header, LPCSTR Path, int Flag);
int WINAPI NMailSmtpSendMailW(LPCWSTR HostName, LPCWSTR To, LPCWSTR Cc, LPCWSTR Bcc, LPCWSTR From, LPCWSTR Subject, LPCWSTR Body, LPCWSTR Header, LPCWSTR Path, int Flag);
#ifdef _MBCS
#define NMailSmtpSendMail	NMailSmtpSendMailA
#endif
#ifdef _UNICODE
#define NMailSmtpSendMail	NMailSmtpSendMailW
#endif

//
//	メールを送信
//	in:  HostName .. SMTP サーバ名
//	     To       .. 送り先
//	     Cc       .. CC
//	     Bcc      .. BCC
//	     From     .. 差出人
//	     Subject  .. 題名
//	     Body     .. メール本文
//	     Header   .. 他のヘッダ
//	     Path     .. 添付ファイル名(なければNULL)
//	     Flag     .. ヘッダにDate/Message-IDを付加するか
//	     PortNo   .. SMTP ポート番号
//	out: 負の数でエラー
//
int WINAPI NMailSmtpSendMailPortNo(LPCTSTR HostName, LPCTSTR To, LPCTSTR Cc, LPCTSTR Bcc, LPCTSTR From, LPCTSTR Subject, LPCTSTR Body, LPCTSTR Header, LPCTSTR Path, int Flag, int PortNo);
int WINAPI NMailSmtpSendMailPortNoA(LPCSTR HostName, LPCSTR To, LPCSTR Cc, LPCSTR Bcc, LPCSTR From, LPCSTR Subject, LPCSTR Body, LPCSTR Header, LPCSTR Path, int Flag, int PortNo);
int WINAPI NMailSmtpSendMailPortNoW(LPCWSTR HostName, LPCWSTR To, LPCWSTR Cc, LPCWSTR Bcc, LPCWSTR From, LPCWSTR Subject, LPCWSTR Body, LPCWSTR Header, LPCWSTR Path, int Flag, int PortNo);
#ifdef _MBCS
#define NMailSmtpSendMailPortNo	NMailSmtpSendMailPortNoA
#endif
#ifdef _UNICODE
#define NMailSmtpSendMailPortNo	NMailSmtpSendMailPortNoW
#endif

// Version 1.25
//
//	SMTP サーバに接続
//	in:  HostName .. SMTP ホスト名
//	out: ソケット
//	     INVALID_SOCKET でエラー
//
SOCKET WINAPI NMailSmtpConnect(LPCTSTR HostName);
SOCKET WINAPI NMailSmtpConnectA(LPCSTR HostName);
SOCKET WINAPI NMailSmtpConnectW(LPCWSTR HostName);
#ifdef _MBCS
#define NMailSmtpConnect	NMailSmtpConnectA
#endif
#ifdef _UNICODE
#define NMailSmtpConnect	NMailSmtpConnectW
#endif

//
//	SMTP サーバに接続(ポート番号指定)
//	in:  HostName .. SMTP ホスト名
//       PortNo   .. ポート番号
//	out: ソケット
//
SOCKET WINAPI NMailSmtpConnectPortNo(LPCTSTR HostName, int PortNo);
SOCKET WINAPI NMailSmtpConnectPortNoA(LPCSTR HostName, int PortNo);
SOCKET WINAPI NMailSmtpConnectPortNoW(LPCWSTR HostName, int PortNo);
#ifdef _MBCS
#define NMailSmtpConnectPortNo	NMailSmtpConnectPortNoA
#endif
#ifdef _UNICODE
#define NMailSmtpConnectPortNo	NMailSmtpConnectPortNoW
#endif

//
//	SMTP 認証
//	in:  Socket   .. ソケット
//	     HostName .. SMTP ホスト名
//	     Id       .. ユーザー名
//	     Password .. パスワード
//	     Mode     .. AUTH 種別
//	out: 負の数でエラー
//
int WINAPI NMailSmtpAuthenticate(SOCKET Socket, LPCTSTR HostName, LPCTSTR Id, LPCTSTR Password, int Mode);
int WINAPI NMailSmtpAuthenticateA(SOCKET Socket, LPCSTR HostName, LPCSTR Id, LPCSTR Password, int Mode);
int WINAPI NMailSmtpAuthenticateW(SOCKET Socket, LPCWSTR HostName, LPCWSTR Id, LPCWSTR Password, int Mode);
#ifdef _MBCS
#define NMailSmtpAuthenticate	NMailSmtpAuthenticateA
#endif
#ifdef _UNICODE
#define NMailSmtpAuthenticate	NMailSmtpAuthenticateW
#endif

//
//	メールを送信 ソケット指定版
//	in:  Socket   .. ソケット
//	     To       .. 送り先
//	     Cc       .. CC
//	     Bcc      .. BCC
//	     From     .. 差出人
//	     Subject  .. 題名
//	     Body     .. メール本文
//	     Header   .. 他のヘッダ
//	     Path     .. 添付ファイル名(なければNULL)
//	     Temp     .. 一時作業エリア
//	                 NMAIL_ATTACHMENT_TEMP_SIZE 分確保しておく必要がある
//	                 NULL で nMail.DLL 内部のバッファを使用
//	     Flag     .. 各種フラグ
//	out: 負の数でエラー
//	     ただし Flag で NMAIL_SUSPEND_ATTACHMENT_FILE を指定した場合に
//	     NMAIL_ERROR_SUSPEND_ATTACHMENT_FILE が帰ってきた場合は送信中に
//	     一時休止で戻ってきたことになる
//
int WINAPI NMailSmtpSendMailEx(SOCKET Socket, LPCTSTR To, LPCTSTR Cc, LPCTSTR Bcc, LPCTSTR From, LPCTSTR Subject, LPCTSTR Body, LPCTSTR Header, LPCTSTR Path, LPTSTR Temp, int Flag);
int WINAPI NMailSmtpSendMailExA(SOCKET Socket, LPCSTR To, LPCSTR Cc, LPCSTR Bcc, LPCSTR From, LPCSTR Subject, LPCSTR Body, LPCSTR Header, LPCSTR Path, LPSTR Temp, int Flag);
int WINAPI NMailSmtpSendMailExW(SOCKET Socket, LPCWSTR To, LPCWSTR Cc, LPCWSTR Bcc, LPCWSTR From, LPCWSTR Subject, LPCWSTR Body, LPCWSTR Header, LPCWSTR Path, LPSTR Temp, int Flag);
#ifdef _MBCS
#define NMailSmtpSendMailEx	NMailSmtpSendMailExA
#endif
#ifdef _UNICODE
#define NMailSmtpSendMailEx	NMailSmtpSendMailExW
#endif

//
//	SMTP 接続終了
//	in:  Socket   .. ソケット
//	out: 負の数でエラー
//
int WINAPI NMailSmtpClose(SOCKET Socket);

//
//	ヘッダが格納されているバッファから所定のフィールドを取り出す
//	in:  Field    .. フィールド値を格納するバッファ
//	     Header   .. ヘッダが格納されているバッファ
//	     Name     .. フィールド名
//	     Size     .. 格納するバッファのサイズ
//	out: TRUE     .. フィールドが存在
//
BOOL WINAPI NMailGetHeaderField(LPTSTR Field, LPCTSTR Header, LPCTSTR Name, int Size);
BOOL WINAPI NMailGetHeaderFieldA(LPSTR Field, LPCSTR Header, LPCSTR Name, int Size);
BOOL WINAPI NMailGetHeaderFieldW(LPWSTR Field, LPCWSTR Header, LPCWSTR Name, int Size);
#ifdef _MBCS
#define NMailGetHeaderField	NMailGetHeaderFieldA
#endif
#ifdef _UNICODE
#define NMailGetHeaderField	NMailGetHeaderFieldW
#endif

//
//	ヘッダの MIME エンコードをデコードする
//	in:  Destination   .. フィールド値を格納するバッファ
//	     Source        .. ヘッダが格納されているバッファ
//	     Size          .. 格納するバッファのサイズ
//
BOOL WINAPI NMailDecodeHeaderField(LPSTR Destination, LPCSTR Source, int Size);
BOOL WINAPI NMailDecodeHeaderFieldA(LPSTR Destination, LPCSTR Source, int Size);
BOOL WINAPI NMailDecodeHeaderFieldW(LPWSTR Destination, LPCWSTR Source, int Size);
#ifdef _MBCS
#define NMailDecodeHeaderField	NMailDecodeHeaderFieldA
#endif
#ifdef _UNICODE
#define NMailDecodeHeaderField	NMailDecodeHeaderFieldW
#endif


//
//	分割ファイル結合開始
//	in:  Temp        .. 一時作業エリア
//	                    NMAIL_ATTACHMENT_TEMP_SIZE 分確保しておく必要がある
//	                    NULL で nMail.DLL 内部のバッファを使用
//	     Subject     .. メールの題名
//	     Date        .. メールの送信日時
//	     From        .. メールの差出人
//	     Header      .. 展開後のヘッダを格納するバッファ
//	     Body        .. 展開後の本文を格納するバッファ
//	     Path        .. 添付ファイルを保存するフォルダ
//	     FileName    .. 添付ファイル名を格納するバッファ
//	     FirstHeader .. 最初のメールヘッダ
//	     FirstBody   .. 最初のメール本体
//	out: 負の数でエラー
//
int WINAPI NMailAttachmentFileFirst(LPSTR Temp, LPTSTR Subject, LPTSTR Date, LPTSTR From, LPTSTR Header, LPTSTR Body, LPCTSTR Path, LPTSTR FileName, LPCTSTR FirstHeader, LPCTSTR FirstBody);
int WINAPI NMailAttachmentFileFirstA(LPSTR Temp, LPSTR Subject, LPSTR Date, LPSTR From, LPSTR Header, LPSTR Body, LPCSTR Path, LPSTR FileName, LPCSTR FirstHeader, LPCSTR FirstBody);
int WINAPI NMailAttachmentFileFirstW(LPSTR Temp, LPWSTR Subject, LPWSTR Date, LPWSTR From, LPWSTR Header, LPWSTR Body, LPCWSTR Path, LPWSTR FileName, LPCWSTR FirstHeader, LPCWSTR FirstBody);
#ifdef _MBCS
#define NMailAttachmentFileFirst	NMailAttachmentFileFirstA
#endif
#ifdef _UNICODE
#define NMailAttachmentFileFirst	NMailAttachmentFileFirstW
#endif

//
//	分割ファイル結合
//	in:  Temp       .. 一時作業エリア
//	                   NMAIL_ATTACHMENT_TEMP_SIZE 分確保しておく必要がある
//	                   NULL で nMail.DLL 内部のバッファを使用
//	     NextHeader .. ２つ目以降のメールヘッダ
//	     NextBody   .. ２つ目以降のメール本体
//	out: 負の数でエラー
//
int WINAPI NMailAttachmentFileNext(LPSTR Temp, LPCTSTR NextHeader, LPCTSTR NextBody);
int WINAPI NMailAttachmentFileNextA(LPSTR Temp, LPCSTR NextHeader, LPCSTR NextBody);
int WINAPI NMailAttachmentFileNextW(LPSTR Temp, LPCWSTR NextHeader, LPCWSTR NextBody);
#ifdef _MBCS
#define NMailAttachmentFileNext	NMailAttachmentFileNextA
#endif
#ifdef _UNICODE
#define NMailAttachmentFileNext	NMailAttachmentFileNextW
#endif

//
//	分割ファイル結合(VisualBasic 用)
//
int WINAPI NMailAttachmentFileNextVB(LPSTR Temp, LPTSTR Subject, LPTSTR Date, LPTSTR From, LPTSTR Header, LPTSTR Body, LPCTSTR Path, LPTSTR FileName, LPCTSTR NextHeader, LPCTSTR NextBody);
int WINAPI NMailAttachmentFileNextVBA(LPSTR Temp, LPSTR Subject, LPSTR Date, LPSTR From, LPSTR Header, LPSTR Body, LPCSTR Path, LPSTR FileName, LPCSTR NextHeader, LPCSTR NextBody);
int WINAPI NMailAttachmentFileNextVBW(LPSTR Temp, LPWSTR Subject, LPWSTR Date, LPWSTR From, LPWSTR Header, LPWSTR Body, LPCWSTR Path, LPWSTR FileName, LPCWSTR NextHeader, LPCWSTR NextBody);
#ifdef _MBCS
#define NMailAttachmentFileNextVB	NMailAttachmentFileNextVBA
#endif
#ifdef _UNICODE
#define NMailAttachmentFileNextVB	NMailAttachmentFileNextVBW
#endif

//
//	分割ファイル結合終了
//	in:  Temp     .. 一時作業エリア
//	                 NMAIL_ATTACHMENT_TEMP_SIZE 分確保しておく必要がある
//	out: 負の数でエラー
//
int WINAPI NMailAttachmentFileClose(LPSTR Temp);

//
//	分割ファイルの情報を得る
//	in:  Header   .. ヘッダが格納されているバッファ
//	     Id       .. 分割ファイルの ID を格納するバッファ
//	     Max      .. バッファサイズ
//	out: NMAIL_NO_ATTACHMENT_FILE    .. 添付ファイルなし
//	     NMAIL_ATTACHMENT_FILE 以上  .. 添付ファイルあり
//	                                    NMAIL_ATTACHMENT_FILE(0) で分割
//	                                    されていない添付ファイル
//	                                    1 以上の場合分割されている添付
//	                                    ファイルで数値はパート番号
//
int WINAPI NMailAttachmentFileStatus(LPCTSTR Header, LPTSTR Id, int Max);
int WINAPI NMailAttachmentFileStatusA(LPCSTR Header, LPSTR Id, int Max);
int WINAPI NMailAttachmentFileStatusW(LPCWSTR Header, LPWSTR Id, int Max);
#ifdef _MBCS
#define NMailAttachmentFileStatus	NMailAttachmentFileStatusA
#endif
#ifdef _UNICODE
#define NMailAttachmentFileStatus	NMailAttachmentFileStatusW
#endif

//
//	オプション設定
//	in:  Option  .. オプション種別
//	     Value   .. オプションの値
//
BOOL WINAPI NMailSetOption(int Option, int Value);

//
//	オプション値の取得
//	in:  Option  .. オプション種別
//  out: オプションの値
//
int WINAPI NMailGetOption(int Option);

//
//	エラーメッセージを得る
//	in:  Mtype    .. メッセージ種別
//		 Message  .. メッセージを格納するバッファ
//	     Size     .. バッファサイズ
//
VOID WINAPI NMailGetMessage(int Mtype, LPTSTR Message, int Size);
VOID WINAPI NMailGetMessageA(int Mtype, LPSTR Message, int Size);
VOID WINAPI NMailGetMessageW(int Mtype, LPWSTR Message, int Size);
#ifdef _MBCS
#define NMailGetMessage	NMailGetMessageA
#endif
#ifdef _UNICODE
#define NMailGetMessage	NMailGetMessageW
#endif

//
//	現在の単位での休止回数を算出
//	in:  Path .. 添付ファイル名
//	out: 休止回数
//	     NMAIL_ERROR_FILE_OPEN .. ファイルが存在しない
//
int WINAPI NMailGetSuspendNumber(LPCTSTR Path);
int WINAPI NMailGetSuspendNumberA(LPCSTR Path);
int WINAPI NMailGetSuspendNumberW(LPCWSTR Path);
#ifdef _MBCS
#define NMailGetSuspendNumber	NMailGetSuspendNumberA
#endif
#ifdef _UNICODE
#define NMailGetSuspendNumber	NMailGetSuspendNumberW
#endif

//
//	IMAP4 サーバに接続
//	in:  HostName .. IMAP4 ホスト名
//	out: ソケット
//	     INVALID_SOCKET or NMAIL_ERROR_TIMEOUT でエラー
//
SOCKET WINAPI NMailImap4Connect(LPCTSTR HostName);
SOCKET WINAPI NMailImap4ConnectA(LPCSTR HostName);
SOCKET WINAPI NMailImap4ConnectW(LPCWSTR HostName);
#if _MBCS
#define NMailImap4Connect	NMailImap4ConnectA
#endif
#ifdef _UNICODE
#define NMailImap4Connect	NMailImap4ConnectW
#endif

//
//	IMAP4 サーバに接続(ポート番号指定)
//	in:  HostName .. IMAP4 ホスト名
//       PortNo   .. ポート番号
//	out: ソケット
//
SOCKET WINAPI NMailImap4ConnectPortNo(LPCTSTR HostName, int PortNo);
SOCKET WINAPI NMailImap4ConnectPortNoA(LPCSTR HostName, int PortNo);
SOCKET WINAPI NMailImap4ConnectPortNoW(LPCWSTR HostName, int PortNo);
#ifdef _MBCS
#define NMailImap4ConnectPortNo	NMailImap4ConnectPortNoA
#endif
#ifdef _UNICODE
#define NMailImap4ConnectPortNo	NMailImap4ConnectPortNoW
#endif

//
//	IMAP4 認証
//	in:  Socket   .. ソケット
//	     Id       .. ユーザー名
//	     Password .. パスワード
//	     Mode     .. 認証方式
//	out: エラーコード
//
int WINAPI NMailImap4Authenticate(SOCKET Socket, LPCTSTR Id, LPCTSTR Password, int Mode);
int WINAPI NMailImap4AuthenticateA(SOCKET Socket, LPCSTR Id, LPCSTR Password, int Mode);
int WINAPI NMailImap4AuthenticateW(SOCKET Socket, LPCWSTR Id, LPCWSTR Password, int Mode);
#ifdef _MBCS
#define NMailImap4Authenticate	NMailImap4AuthenticateA
#endif
#ifdef _UNICODE
#define NMailImap4Authenticate	NMailImap4AuthenticateW
#endif

//
//	IMAP4 メールボックス選択
//	in:  Socket   .. ソケット
//	     MailBox  .. メールボックス名
//	     ReadOnlyFlag .. 読み出し専用で開くか
//	out: エラーコード
//
int WINAPI NMailImap4SelectMailBox(SOCKET Socket, LPCTSTR MailBox, BOOL ReadOnlyFlag);
int WINAPI NMailImap4SelectMailBoxA(SOCKET Socket, LPCSTR MailBox, BOOL ReadOnlyFlag);
int WINAPI NMailImap4SelectMailBoxW(SOCKET Socket, LPCWSTR MailBox, BOOL ReadOnlyFlag);
#ifdef _MBCS
#define NMailImap4SelectMailBox	NMailImap4SelectMailBoxA
#endif
#ifdef _UNICODE
#define NMailImap4SelectMailBox	NMailImap4SelectMailBoxW
#endif

//
//	IMAP4 メールボックス選択終了
//	in:  Socket   .. ソケット
//	out: エラーコード
//
int WINAPI NMailImap4CloseMailBox(SOCKET Socket);

//
//	IMAP4 メールを得る
//	in:  Socket   .. ソケット
//	     No       .. メール番号
//	     Subject  .. メールの題名
//	     Date     .. メールの送信日時
//	     From     .. メールの差出人
//	     Header   .. メールのヘッダ
//	     Body     .. メールの本文
//	     Path     .. 添付ファイルを保存するフォルダ
//	     FileName .. 添付ファイル名を格納するバッファ
//	     Flag     .. フラグ
//	out: エラーコード
//
int WINAPI NMailImap4GetMail(SOCKET Socket, DWORD MailNo, LPTSTR Subject, LPTSTR Date, LPTSTR From, LPTSTR Header, LPTSTR Body, LPCTSTR Path, LPTSTR FileName, int Flag);
int WINAPI NMailImap4GetMailA(SOCKET Socket, DWORD MailNo, LPSTR Subject, LPSTR Date, LPSTR From, LPSTR Header, LPSTR Body, LPCSTR Path, LPSTR FileName, int Flag);
int WINAPI NMailImap4GetMailW(SOCKET Socket, DWORD MailNo, LPWSTR Subject, LPWSTR Date, LPWSTR From, LPWSTR Header, LPWSTR Body, LPCWSTR Path, LPWSTR FileName, int Flag);
#ifdef _MBCS
#define NMailImap4GetMail	NMailImap4GetMailA
#endif
#ifdef _UNICODE
#define NMailImap4GetMail	NMailImap4GetMailW
#endif

//
//	IMAP4 メールボックスリストアップ
//	in:  Socket        .. ソケット
//	     Refer         .. 検索する場所
//	     MailBox       .. ワイルドカード(メールボックス名)
//	     SubscribeFlag .. 購読済みメールボックスのみ検索するか
//	out: メールボックス数
//	     負の数でエラーコード
//
int WINAPI NMailImap4GetMailBoxList(SOCKET Socket, LPCTSTR Refer, LPCTSTR MailBox, BOOL SubscribeFlag);
int WINAPI NMailImap4GetMailBoxListA(SOCKET Socket, LPCSTR Refer, LPCSTR MailBox, BOOL SubscribeFlag);
int WINAPI NMailImap4GetMailBoxListW(SOCKET Socket, LPCWSTR Refer, LPCWSTR MailBox, BOOL SubscribeFlag);
#ifdef _MBCS
#define NMailImap4GetMailBox	NMailImap4GetMailBoxListA
#endif
#ifdef _UNICODE
#define NMailImap4GetMailBox	NMailImap4GetMailBoxListW
#endif

//
//	IMAP4 メールボックスリストアップ情報取得
//	in:  Socket      .. ソケット
//	     ListNo      .. メールボックスリスト番号
//		 MailBoxFlag .. メールボックスフラグを格納する変数へのポインタ
//	     Separate    .. メールボックス区切り文字を格納するバッファ
//	     MailBox     .. メールボックス名を格納するバッファ
//	     Size        .. メールボックス名を格納するバッファのサイズ
//	out: エラーコード
//
int WINAPI NMailImap4GetMailBoxListStatus(SOCKET Socket, int ListNo, int *MailBoxFlag, LPTSTR Separate, LPTSTR MailBox, int Size);
int WINAPI NMailImap4GetMailBoxListStatusA(SOCKET Socket, int ListNo, int *MailBoxFlag, LPSTR Separate, LPSTR MailBox, int Size);
int WINAPI NMailImap4GetMailBoxListStatusW(SOCKET Socket, int ListNo, int *MailBoxFlag, LPWSTR Separate, LPWSTR MailBox, int Size);
#ifdef _MBCS
#define NMailImap4GetMailBoxListStatus	NMailImap4GetMailBoxListStatusA
#endif
#ifdef _UNICODE
#define NMailImap4GetMailBoxListStatus	NMailImap4GetMailBoxListStatusW
#endif

//
//	IMAP4 メールのサイズを得る
//	in:  Socket   .. ソケット
//	     MailNo   .. メール番号
//	     Flag     .. フラグ(UID)
//	out: メールのサイズ
//	     負の数でエラー
//
int WINAPI NMailImap4GetMailSize(SOCKET Socket, DWORD MailNo, int Flag);

//
//	IMAP4 メールの情報を得る
//	in:  Socket      .. ソケット
//	     MaiNo       .. メール番号
//	     Subject     .. メールの題名
//	     Date        .. メールの送信日時
//	     From        .. メールの差出人
//	     Header      .. ヘッダ
//	     MessageFlag .. メッセージフラグを格納する変数
//	     Flag        .. フラグ(UID)
//	out: エラーコード
//
int WINAPI NMailImap4GetMailStatus(SOCKET Socket, DWORD MailNo, LPTSTR Subject, LPTSTR Date, LPTSTR From, LPTSTR Header, int *MessageFlag, int Flag);
int WINAPI NMailImap4GetMailStatusA(SOCKET Socket, DWORD MailNo, LPSTR Subject, LPSTR Date, LPSTR From, LPSTR Header, int *MessageFlag, int Flag);
int WINAPI NMailImap4GetMailStatusW(SOCKET Socket, DWORD MailNo, LPWSTR Subject, LPWSTR Date, LPWSTR From, LPWSTR Header, int *MessageFlag, int Flag);
#ifdef _MBCS
#define NMailImap4GetMailStatus	NMailImap4GetMailStatusA
#endif
#ifdef _UNICODE
#define NMailImap4GetMailStatus	NMailImap4GetMailStatusW
#endif

//
//	IMAP4 メールを削除(削除フラグを付加するだけ)
//	in:  Socket   .. ソケット
//	     MailNo   .. メール番号
//	     Flag     .. フラグ(UID)
//	out: エラーコード
//
int WINAPI NMailImap4DeleteMail(SOCKET Socket, DWORD MailNo, int Flag);

//
//	IMAP4 メール削除を実行
//	in:  Socket   .. ソケット
//	out: エラーコード
//
int WINAPI NMailImap4ExpungeMail(SOCKET Socket);

//
//	IMAP4 メールメッセージフラグ変更
//	in:  Socket      .. ソケット
//	     MailNo      .. メール番号
//	     MessageFlag .. フラグ種別
//	     Command     .. 追加/削除
//	     Flag     .. フラグ(UID)
//	out: エラーコード
//
int WINAPI NMailImap4ChangeMessageFlag(SOCKET Socket, DWORD MailNo, int MessageFlag, int Command, int Flag);

//
//	IMAP4 メールボックス作成
//	in:  Socket   .. ソケット
//	     MailBox  .. 作成するメールボックス名
//	out: エラーコード
//
int WINAPI NMailImap4CreateMailBox(SOCKET Socket, LPCTSTR MailBox);
int WINAPI NMailImap4CreateMailBoxA(SOCKET Socket, LPCSTR MailBox);
int WINAPI NMailImap4CreateMailBoxW(SOCKET Socket, LPCWSTR MailBox);
#ifdef _MBCS
#define NMailImap4CreateMailBox	NMailImap4CreateMailBoxA
#endif
#ifdef _UNICODE
#define NMailImap4CreateMailBox	NMailImap4CreateMailBoxW
#endif

//
//	IMAP4 メールボックス削除
//	in:  Socket   .. ソケット
//	     MailBox  .. 削除するメールボックス名
//	out: エラーコード
//
int WINAPI NMailImap4DeleteMailBox(SOCKET Socket, LPCTSTR MailBox);
int WINAPI NMailImap4DeleteMailBoxA(SOCKET Socket, LPCSTR MailBox);
int WINAPI NMailImap4DeleteMailBoxW(SOCKET Socket, LPCWSTR MailBox);
#ifdef _MBCS
#define NMailImap4DeleteMailBox	NMailImap4DeleteMailBoxA
#endif
#ifdef _UNICODE
#define NMailImap4DeleteMailBox	NMailImap4DeleteMailBoxW
#endif

//
//	IMAP4 メールボックス名称変更
//	in:  Socket      .. ソケット
//	     OldMailBox  .. 名称変更するメールボックス名
//	     NewMailBox  .. 名称変更後のメールボックス名
//	out: エラーコード
//
int WINAPI NMailImap4RenameMailBox(SOCKET Socket, LPCTSTR OldMailBox, LPCTSTR NewMailBox);
int WINAPI NMailImap4RenameMailBoxA(SOCKET Socket, LPCSTR OldMailBox, LPCSTR NewMailBox);
int WINAPI NMailImap4RenameMailBoxW(SOCKET Socket, LPCWSTR OldMailBox, LPCWSTR NewMailBox);
#ifdef _MBCS
#define NMailImap4RenameMailBox	NMailImap4RenameMailBoxA
#endif
#ifdef _UNICODE
#define NMailImap4RenameMailBox	NMailImap4RenameMailBoxW
#endif

//
//	IMAP4 メールボックス購読
//	in:  Socket   .. ソケット
//	     MailBox  .. 購読するメールボックス名
//	out: エラーコード
//
int WINAPI NMailImap4SubscribeMailBox(SOCKET Socket, LPCTSTR MailBox);
int WINAPI NMailImap4SubscribeMailBoxA(SOCKET Socket, LPCSTR MailBox);
int WINAPI NMailImap4SubscribeMailBoxW(SOCKET Socket, LPCWSTR MailBox);
#ifdef _MBCS
#define NMailImap4SubscribeMailBox	NMailImap4SubscribeMailBoxA
#endif
#ifdef _UNICODE
#define NMailImap4SubscribeMailBox	NMailImap4SubscribeMailBoxW
#endif

//
//	IMAP4 メールボックス購読解除
//	in:  Socket   .. ソケット
//	     MailBox  .. 購読解除するメールボックス名
//	out: エラーコード
//
int WINAPI NMailImap4UnsubscribeMailBox(SOCKET Socket, LPCTSTR MailBox);
int WINAPI NMailImap4UnsubscribeMailBoxA(SOCKET Socket, LPCSTR MailBox);
int WINAPI NMailImap4UnsubscribeMailBoxW(SOCKET Socket, LPCWSTR MailBox);
#ifdef _MBCS
#define NMailImap4UnsubscribeMailBox	NMailImap4UnsubscribeMailBoxA
#endif
#ifdef _UNICODE
#define NMailImap4UnsubscribeMailBox	NMailImap4UnsubscribeMailBoxW
#endif

//
//	IMAP4 メールコピー
//	in:  Socket   .. ソケット
//	     MailNo   .. メール番号
//	     MailBox  .. コピー先のメールボックス名
//	     Flag     .. フラグ(UID)
//	out: エラーコード
//
int WINAPI NMailImap4CopyMail(SOCKET Socket, DWORD MaiNo, LPCTSTR MailBox, int Flag);
int WINAPI NMailImap4CopyMailA(SOCKET Socket, DWORD MailNo, LPCSTR MailBox, int Flag);
int WINAPI NMailImap4CopyMailW(SOCKET Socket, DWORD MailNo, LPCWSTR MailBox, int Flag);
#ifdef _MBCS
#define NMailImap4CopyMail	NMailImap4CopyMailA
#endif
#ifdef _UNICODE
#define NMailImap4CopyMail	NMailImap4CopyMailW
#endif

//
//	IMAP4 UID を得る
//	in:  Socket   .. ソケット
//	     MailNo   .. メール番号
//	     Uid      .. UID を格納するバッファ
//	out: NMAIL_SUCCESS .. 成功
//
int WINAPI NMailImap4GetUid(SOCKET Socket, DWORD No, DWORD *Uid);

//
//	IMAP4 メールボックス情報取得
//	in:  Socket   .. ソケット
//	     MailBox  .. メールボックス名
//	     Type     .. 情報種別
//	     Data     .. 情報格納用バッファ
//	out: エラーコード
//
int WINAPI NMailImap4GetMailBoxStatus(SOCKET Socket, LPCTSTR MailBox, int Type, DWORD *Data);
int WINAPI NMailImap4GetMailBoxStatusA(SOCKET Socket, LPCSTR MailBox, int Type, DWORD *Data);
int WINAPI NMailImap4GetMailBoxStatusW(SOCKET Socket, LPCWSTR MailBox, int Type, DWORD *Data);
#ifdef _MBCS
#define NMailImap4GetMailBoxStatus	NMailImap4GetMailBoxStatusA
#endif
#ifdef _UNICODE
#define NMailImap4GetMailBoxStatus	NMailImap4GetMailBoxStatusW
#endif

//
//	IMAP4 メール検索
//	in:  Socket   .. ソケット
//	     Type     .. 検索条件
//	     Text     .. 検索文字列
//	     Flag     .. フラグ(UID)
//	out: 条件に一致したメール数
//	     負の数でエラー
//
int WINAPI NMailImap4SearchMail(SOCKET Socket, int Type, LPCTSTR Text, int Flag);
int WINAPI NMailImap4SearchMailA(SOCKET Socket, int Type, LPCSTR Text, int Flag);
int WINAPI NMailImap4SearchMailW(SOCKET Socket, int Type, LPCWSTR Text, int Flag);
#ifdef _MBCS
#define NMailImap4SearchMail	NMailImap4SearchMailA
#endif
#ifdef _UNICODE
#define NMailImap4SearchMail	NMailImap4SearchMailW
#endif

//
//	IMAP4 検索結果取得
//	in:  Socket   .. ソケット
//	     ResultNo .. 検索結果番号
//	     MailNo   .. メール番号を格納するバッファ
//	out: メール番号
//
int WINAPI NMailImap4GetSearchMailResult(SOCKET Socket, int ResultNo, DWORD *MailNo);

//
//	IMAP4 メールをメールボックスに格納
//	in:  Socket      .. ソケット
//	     MailBox     .. メールメールボックス名
//	     Header      .. メールヘッダ
//	     Body        .. メール本文
//	     Path        .. 添付ファイル NULL で追加しない
//	     Flag        .. フラグ
//	     MessageFlag .. メッセージフラグ
//	     Date        .. メール追加日時(ヘッダとは別) NULL で現在日時
//	out: エラーコード
//
int WINAPI NMailImap4AppendMail(SOCKET Socket, LPCTSTR MailBox, LPCTSTR Header, LPCTSTR Body, LPCSTR Path, int MessageFlag, LPCTSTR Date, int Flag);
int WINAPI NMailImap4AppendMailA(SOCKET Socket, LPCSTR MailBox, LPCSTR Header, LPCSTR Body, LPCSTR Path, int MessageFlag, LPCSTR Date, int Flag);
int WINAPI NMailImap4AppendMailW(SOCKET Socket, LPCWSTR MailBox, LPCWSTR Header, LPCWSTR Body, LPCWSTR Path, int MessageFlag, LPCWSTR Date, int Flag);
#ifdef _MBCS
#define NMailImap4AppendMail	NMailImap4AppendMailA
#endif
#ifdef _UNICODE
#define NMailImap4AppendMail	NMailImap4AppendMailW
#endif

//
//	日時文字列作成
//	in: String   .. 文字列を格納するバッファ
//	    Year     .. 年
//	    Month    .. 月
//	    Day      .. 日
//	    Hour     .. 時
//	    Minute   .. 分
//	    Second   .. 秒
//	out: エラーコード
//
int WINAPI NMailMakeDateString(LPTSTR String, int Year, int Month, int Day, int Hour, int Minute, int Second, int Flag);
int WINAPI NMailMakeDateStringA(LPSTR String, int Year, int Month, int Day, int Hour, int Minute, int Second, int Flag);
int WINAPI NMailMakeDateStringW(LPWSTR String, int Year, int Month, int Day, int Hour, int Minute, int Second, int Flag);
#ifdef _MBCS
#define NMailMakeDateString		NMailMakeDateStringA
#endif
#ifdef _UNICODE
#define NMailMakeDateString		NMailMakeDateStringW
#endif

//
//	IMAP4 名前空間を取得
//	in:  Socket           .. ソケット
//	out: エラーコード
//
int WINAPI NMailImap4GetNameSpace(SOCKET Socket);

//
//	IMAP4 名前空間情報取得
//	in:  Socket   .. ソケット
//	     Type     .. 名前空間種別
//	     Separete .. 名前空間区切り文字を格納するバッファ
//	     Name     .. 名前空間名称を格納するバッファ
//	     Size     .. 名前空間名称を格納するバッファのサイズ
//	out: エラーコード
//
int WINAPI NMailImap4GetNameSpaceStatus(SOCKET Socket, int Type, LPSTR Separate, LPSTR Name, int Size);
int WINAPI NMailImap4GetNameSpaceStatusA(SOCKET Socket, int Type, LPSTR Separate, LPSTR Name, int Size);
int WINAPI NMailImap4GetNameSpaceStatusW(SOCKET Socket, int Type, LPWSTR Separate, LPWSTR Name, int Size);
#ifdef _MBCS
#define NMailImap4GetNameSpaceStatus		NMailImap4GetNameSpaceStatusA
#endif
#ifdef _UNICODE
#define NMailImap4GetNameSpaceStatus		NMailImap4GetNameSpaceStatusW
#endif

//
//	IMAP4 メールの構造を取得する
//	in:  Socket .. ソケット
//	     MailNo .. メール番号
//	     Flag   .. フラグ(UID)
//	out: MIME 構造パート数
//	     負の数でエラー
//
int WINAPI NMailImap4GetMimeStructure(SOCKET Socket, DWORD MailNo, int Flag);

//
//	IMAP4 メール構造情報取得
//	in:  Socket   .. ソケット
//	     Type     .. 種別
//	     PartNo   .. 構造番号
//	     SubNo    .. 構造パラメータ番号
//	     Name     .. 構造名称格納バッファ
//	     Value    .. パラメータ値格納するバッファ
//	     Size     .. 格納するバッファのサイズ
//	out: NMAIL_IMAP4_MIME_CONTENT_PARAMETER_COUNT,
//		 NMAIL_IMAP4_MIME_CONTENT_SIZE,
//		 NMAIL_IMAP4_MIME_CONTENT_LINE の場合は数値
//		 負の値はエラーコード
//
int WINAPI NMailImap4GetMimeStructureStatus(SOCKET Socket, int Type, int PartNo, int SubNo, LPTSTR Name, LPTSTR Value, int Size);
int WINAPI NMailImap4GetMimeStructureStatusA(SOCKET Socket, int Type, int PartNo, int SubNo, LPSTR Name, LPSTR Value, int Size);
int WINAPI NMailImap4GetMimeStructureStatusW(SOCKET Socket, int Type, int PartNo, int SubNo, LPWSTR Name, LPWSTR Value, int Size);
#ifdef _MBCS
#define	NMailImap4GetMimeStructureStatus 	NMailImap4GetMimeStructureStatusA
#endif
#ifdef _UNICODE
#define NMailImap4GetMimeStructureStatus	NMailImap4GetMimeStructureStatusW
#endif

//
//	IMAP4 メールボディ個別取得
//	in:  Socket   .. ソケット
//	     MailNo   .. メール番号
//	     PartNo   .. 構造番号
//	     Body     .. ボディ格納バッファ
//	     Flag     .. フラグ
//	out: エラーコード
//
int WINAPI NMailImap4GetMimePart(SOCKET Socket, DWORD MailNo, int PartNo, LPTSTR Body, int Flag);
int WINAPI NMailImap4GetMimePartA(SOCKET Socket, DWORD MailNo, int PartNo, LPSTR Body, int Flag);
int WINAPI NMailImap4GetMimePartW(SOCKET Socket, DWORD MailNo, int PartNo, LPWSTR Body, int Flag);
#ifdef _MBCS
#define	NMailImap4GetMimePart 	NMailImap4GetMimePartA
#endif
#ifdef _UNICODE
#define NMailImap4GetMimePart	NMailImap4GetMimePartW
#endif

//
//	IMAP4 メールボディファイル保存
//	in:  Socket   .. ソケット
//	     MailNo   .. メール番号
//	     PartNo   .. 構造番号
//	     Path     .. 添付ファイルを保存するフォルダ
//	     FileName .. 添付ファイル名を格納するバッファ
//	     Flag     .. フラグ
//	out: エラーコード
//
int WINAPI NMailImap4SaveMimePart(SOCKET Socket, DWORD MailNo, int PartNo, LPCTSTR Path, LPTSTR FileName, int Flag);
int WINAPI NMailImap4SaveMimePartA(SOCKET Socket, DWORD MailNo, int PartNo, LPCSTR Path, LPTSTR FileName, int Flag);
int WINAPI NMailImap4SaveMimePartW(SOCKET Socket, DWORD MailNo, int PartNo, LPCWSTR Path, LPWSTR FileName, int Flag);
#ifdef _MBCS
#define	NMailImap4SaveMimePart 	NMailImap4SaveMimePartA
#endif
#ifdef _UNICODE
#define NMailImap4SaveMimePart	NMailImap4SaveMimePartW
#endif

//
//	IMAP4 空コマンド送信
//	in:  Socket   .. ソケット
//	out: 負の数でエラー
//
int WINAPI NMailImap4NoOperation(SOCKET Socket);

//
//	IMAP4 接続終了
//	in:  Socket   .. ソケット
//	out: 負の数でエラー
//
int WINAPI NMailImap4Close(SOCKET Socket);

//
//	POP3 サーバに接続 SSL
//	in:  HostName .. POP3 ホスト名
//	     PortNo   .. POP3 ポート番号
//	     Flag     .. SSL 設定フラグ
//	     Name     .. クライアント証明書名称
//	out: ソケット
//	     INVALID_SOCKET でエラー
//
SOCKET WINAPI NMailPop3ConnectSsl(LPCTSTR HostName, int PortNo, int Flag, LPCTSTR Name);
SOCKET WINAPI NMailPop3ConnectSslA(LPCSTR HostName, int PortNo, int Flag, LPCSTR Name);
SOCKET WINAPI NMailPop3ConnectSslW(LPCWSTR HostName, int PortNo, int Flag, LPCWSTR Name);
#ifdef _MBCS
#define NMailPop3ConnectSsl	NMailPop3ConnectSslA
#endif
#ifdef _UNICODE
#define NMailPop3ConnectSsl	NMailPop3ConnectSslW
#endif

//
//	SMTP サーバに接続 SSL
//	in:  HostName .. SMTP ホスト名
//	     PortNo   .. SMTP ポート番号
//	     Flag     .. SSL 設定フラグ
//	     Name     .. クライアント証明書名称
//	out: ソケット
//	     INVALID_SOCKET でエラー
//
SOCKET WINAPI NMailSmtpConnectSsl(LPCTSTR HostName, int PortNo, int Flag, LPCTSTR Name);
SOCKET WINAPI NMailSmtpConnectSslA(LPCSTR HostName, int PortNo, int Flag, LPCSTR Name);
SOCKET WINAPI NMailSmtpConnectSslW(LPCWSTR HostName, int PortNo, int Flag, LPCWSTR Name);
#ifdef _MBCS
#define NMailSmtpConnectSsl	NMailSmtpConnectSslA
#endif
#ifdef _UNICODE
#define NMailSmtpConnectSsl	NMailSmtpConnectSslW
#endif

//
//	IMAP4 サーバに接続 SSL
//	in:  HostName .. IMAP4 ホスト名
//	     PortNo   .. IMAP4 ポート番号
//	     Flag     .. SSL 設定フラグ
//	     Name     .. クライアント証明書名称
//	out: ソケット
//	     INVALID_SOCKET でエラー
//
SOCKET WINAPI NMailImap4ConnectSsl(LPCTSTR HostName, int PortNo, int Flag, LPCTSTR Name);
SOCKET WINAPI NMailImap4ConnectSslA(LPCSTR HostName, int PortNo, int Flag, LPCSTR Name);
SOCKET WINAPI NMailImap4ConnectSslW(LPCWSTR HostName, int PortNo, int Flag, LPCWSTR Name);
#ifdef _MBCS
#define NMailImap4ConnectSsl	NMailImap4ConnectSslA
#endif
#ifdef _UNICODE
#define NMailImap4ConnectSsl	NMailImap4ConnectSslW
#endif

//
//	メールを送信 SSL
//	in:  HostName .. SMTP サーバ名
//	     To       .. 送り先
//	     Cc       .. CC
//	     Bcc      .. BCC
//	     From     .. 差出人
//	     Subject  .. 題名
//	     Body     .. メール本文
//	     Header   .. 他のヘッダ
//	     Path     .. 添付ファイル名(なければNULL)
//	     Flag     .. ヘッダにDate/Message-IDを付加するか
//	     PortNo   .. SMTP ポート番号
//	     SslFlag  .. SSL 設定フラグ
//	     Name     .. クライアント証明書名称
//	out: 負の数でエラー
//
int WINAPI NMailSmtpSendMailSsl(LPCTSTR HostName, LPCTSTR To, LPCTSTR Cc, LPCTSTR Bcc, LPCTSTR From, LPCTSTR Subject, LPCTSTR Body, LPCTSTR Header, LPCTSTR Path, int Flag, int PortNo, int SslFlag, LPCTSTR Name);
int WINAPI NMailSmtpSendMailSslA(LPCSTR HostName, LPCSTR To, LPCSTR Cc, LPCSTR Bcc, LPCSTR From, LPCSTR Subject, LPCSTR Body, LPCSTR Header, LPCSTR Path, int Flag, int PortNo, int SslFlag, LPCSTR Name);
int WINAPI NMailSmtpSendMailSslW(LPCWSTR HostName, LPCWSTR To, LPCWSTR Cc, LPCWSTR Bcc, LPCWSTR From, LPCWSTR Subject, LPCWSTR Body, LPCWSTR Header, LPCWSTR Path, int Flag, int PortNo, int SslFlag, LPCWSTR Name);
#ifdef _MBCS
#define NMailSmtpSendMailSsl	NMailSmtpSendMailSslA
#endif
#ifdef _UNICODE
#define NMailSmtpSendMailSsl	NMailSmtpSendMailSslW
#endif

#ifdef __cplusplus
}
#endif

#endif
