SQLの窓

2018年10月18日


PHP の imap 関数( Windows のローカル )で、さくらインターネットのメールボックスの情報を取得する

Sylpheed( Windows メールクライアント ) で、INBOX のフォルダの中にさらにフォルダを作成して読み出しています



<?php
error_reporting( E_ALL & ~E_NOTICE & ~E_STRICT );
session_cache_limiter('nocache');
session_start();

header( "Access-Control-Allow-Origin: *" );
header( "Content-Type: application/json; charset=utf-8" );

# デバッグログの初期化
file_put_contents("debug.log", "開始\n" );

mb_internal_encoding("UTF-8");

xlog("ログの出力");

# ***************************
# IMAP 接続
# ***************************
$con = @imap_open("{さくらサーバ:993/imap/ssl}INBOX", "アカウント", "パスワード");
if ( $con === FALSE ) {
	print imap_last_error();
	xlog(imap_last_error());
	exit();
}

// メールボックスのリストを読み込み、各ボックスに関する詳細な情報を返す
$mbox = imap_getmailboxes( $con, "{さくらサーバ}", "*" );
xlog("\n■■■ \$mbox_info 現在のメールボックスに関する情報 -------");
xlog( print_r( $mbox ,true ));

if( $mbox == FALSE ) {
	xlog( "imap_getmailboxes に失敗しました" );
	exit();
}

# ***************************
# デリミタ取得( サーバ依存 )
# ***************************
$delimiter = $mbox[0]->delimiter;

# ***************************
# フォルダ情報の配列
# ***************************
foreach ($mbox as $obj) {

	// サーバー文字列を削除して
	// 日本語を含むフォルダをデコード
	$obj->name = imap_mutf7_to_utf8( str_replace( "{さくらサーバ}", "", $obj->name ) );

	// . が無い場合は、ルートのメールボックス
	if ( strstr($obj->name,".") !== FALSE ) {

		// フォルダパスの分解
		$data = explode( $delimiter, $obj->name );

		// 先頭はメールボックス
		$mailbox = $data[ 0 ];

		// 先頭より下を再度連結する
		$name = "";
		for( $i = 1; $i < count( $data ); $i++ ) {
			if ( $i > 1 ) {
				$name .= ".";
			}
			$name .= $data[ $i ];
		}

		// フォルダのメールボックス以下の階層
		xlog( $mailbox . " のフォルダ名 : " . $name );

	}

}

// ***************************
// IMAP 接続解除
// ***************************
imap_close($con);

// ***************************
// デバッグ用 JSON出力
// ***************************
print json_encode($mbox, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE );

// ***************************
// ログ出力
// ***************************
function xlog($message) {
	file_put_contents("debug.log", "{$message}\n" , FILE_APPEND );
}
?>


JSON の内容
[
    {
        "name": "INBOX.メールアイテム格納用.階層テスト",
        "attributes": 64,
        "delimiter": "."
    },
    {
        "name": "INBOX.メールアイテム格納用",
        "attributes": 32,
        "delimiter": "."
    },
    {
        "name": "INBOX.Drafts",
        "attributes": 64,
        "delimiter": "."
    },
    {
        "name": "INBOX.Trash",
        "attributes": 64,
        "delimiter": "."
    },
    {
        "name": "INBOX.spam",
        "attributes": 64,
        "delimiter": "."
    },
    {
        "name": "INBOX.Sent",
        "attributes": 64,
        "delimiter": "."
    },
    {
        "name": "INBOX.Draft",
        "attributes": 64,
        "delimiter": "."
    },
    {
        "name": "INBOX",
        "attributes": 40,
        "delimiter": "."
    }
]
log の内容
開始
ログの出力

■■■ $mbox_info 現在のメールボックスに関する情報 -------
Array
(
    [0] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.&MOEw,DDrMKIwpDDGMOBoPH0NdSg-.&lo5cZDDGMLkwyA-
            [attributes] => 64
            [delimiter] => .
        )

    [1] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.&MOEw,DDrMKIwpDDGMOBoPH0NdSg-
            [attributes] => 32
            [delimiter] => .
        )

    [2] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.Drafts
            [attributes] => 64
            [delimiter] => .
        )

    [3] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.Trash
            [attributes] => 64
            [delimiter] => .
        )

    [4] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.spam
            [attributes] => 64
            [delimiter] => .
        )

    [5] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.Sent
            [attributes] => 64
            [delimiter] => .
        )

    [6] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX.Draft
            [attributes] => 64
            [delimiter] => .
        )

    [7] => stdClass Object
        (
            [name] => {さくらサーバ}INBOX
            [attributes] => 40
            [delimiter] => .
        )

)

INBOX のフォルダ名 : メールアイテム格納用.階層テスト
INBOX のフォルダ名 : メールアイテム格納用
INBOX のフォルダ名 : Drafts
INBOX のフォルダ名 : Trash
INBOX のフォルダ名 : spam
INBOX のフォルダ名 : Sent
INBOX のフォルダ名 : Draft
【PHP + 通信の最新記事】
posted by lightbox at 2018-10-18 11:49 | PHP + 通信 | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり