Previous Next

メールメッセージの読み込み

Zend_Mail を使用すると、 ローカルあるいはリモートに保存されたメールを読み込むことができます。 すべての保存形式に共通の基本 API では、メッセージ数を数えたり メッセージを読み込んだりすることができます。また、 いくつかの保存形式では、特殊な追加機能も実装されています。 各保存形式で実装されている機能の概要については以下の表を参照ください。

メール読み込み機能の概要
機能 Mbox Maildir Pop3 IMAP
保存形式 ローカル ローカル リモート リモート
メッセージの取得 Yes Yes Yes Yes
MIME パートの取得 エミュレート エミュレート エミュレート エミュレート
フォルダ Yes Yes No Yes
メッセージ/フォルダ の作成 No 対応予定 No 対応予定
フラグ No Yes No Yes
容量制限 No Yes No No

Pop3 によるシンプルな読み込み例

$mail = new Zend_Mail_Storage_Pop3(array('host'     => 'localhost',
                                         'user'     => 'test',
                                         'password' => 'test'));

echo $mail->countMessages() . " messages found\n";
foreach ($mail as $message) {
    echo "Mail from '{$message->from}': {$message->subject}\n";
}

ローカルに保存されたメールのオープン

ローカルのメール保存形式としては、Mbox および Maildir をサポートしています。これらはともに、もっともシンプルな形式です。

Mbox ファイルからメールを読み込むには、そのファイル名を Zend_Mail_Storage_Mbox のコンストラクタに渡すだけです。

$mail = new Zend_Mail_Storage_Mbox(array('filename' =>
                                             '/home/test/mail/inbox'));

Maildir もほぼ同様ですが、こちらはディレクトリ名を指定します。

$mail = new Zend_Mail_Storage_Maildir(array('dirname' =>
                                                '/home/test/mail/'));

どちらのコンストラクタも、もし読み込めなかった場合は Zend_Mail_Exception をスローします。

リモートに保存されたメールのオープン

リモートの保存形式としては、もっとも有名なふたつである Pop3 と Imap をサポートしています。それぞれ、 ホスト名とユーザ名を指定して接続、ログインします。 デフォルトのパスワードは空の文字列で、デフォルトのポート番号は そのプロトコルの RFC で指定されているものです。

// Pop3 での接続
$mail = new Zend_Mail_Storage_Pop3(array('host'     => 'example.com',
                                         'user'     => 'test',
                                         'password' => 'test'));

// Imap での接続
$mail = new Zend_Mail_Storage_Imap(array('host'     => 'example.com',
                                         'user'     => 'test',
                                         'password' => 'test'));

// 非標準のポートの例
$mail = new Zend_Mail_Storage_Pop3(array('host'     => 'example.com',
                                         'port'     => 1120
                                         'user'     => 'test',
                                         'password' => 'test'));

どちらの保存形式についても、SSL や TLS をサポートしています。 SSL を使用する場合、デフォルトのポートは RFC にあるとおりに変更されます。

// Zend_Mail_Storage_Pop3 の例ですが、Zend_Mail_Storage_Imap でも同様です

// SSL を使用する場合はポートが異なります (デフォルトは Pop3 なら 995、Imap なら 993)
$mail = new Zend_Mail_Storage_Pop3(array('host'     => 'example.com',
                                         'user'     => 'test',
                                         'password' => 'test',
                                         'ssl'      => 'SSL'));

// TLS を使用します
$mail = new Zend_Mail_Storage_Pop3(array('host'     => 'example.com',
                                         'user'     => 'test',
                                         'password' => 'test',
                                         'ssl'      => 'TLS'));

どちらのコンストラクタも、エラーの形式によって Zend_Mail_Exception あるいは Zend_Mail_Protocol_Exception (Zend_Mail_Exception を継承したもの) をスローします。

メッセージの取得およびシンプルなメソッド

ストレージをオープンしたら、メッセージを取得することができます。 メッセージを取得するには、メッセージ番号が必要です。 これは、最初のメッセージを 1 番とする連番となります。 メッセージを取得する際に使用するメソッドは getMessage() です。

$message = $mail->getMessage($messageNum);

配列形式のアクセスもサポートしていますが、getMessage() に追加のパラメータを渡すことはサポートしていません。 なにも気にせずデフォルトでいいなら、このように使用します。

$message = $mail[$messageNum];

全メッセージについて順に処理するために、Iterator インターフェイスも実装されています。

foreach ($mail as $messageNum => $message) {
    // 何かの処理 ...
}

保存されているメッセージ数を数えるには、 countMessages() メソッドあるいは配列形式のアクセスを使用します。

// メソッド
$maxMessage = $mail->countMessages();

// 配列形式のアクセス
$maxMessage = count($mail);

メールを削除するには、removeMessage() メソッドあるいは配列形式のアクセスを使用します。

// メソッド
$mail->removeMessage($messageNum);

// 配列形式のアクセス
unset($mail[$messageNum]);

メッセージの操作

getMessage() でメッセージを取得したら、 次にしたくなることは、ヘッダの取得やマルチパートメッセージの各パートの取得などでしょう。 すべてのヘッダには、プロパティあるいはメソッド getHeader() (一般的でないヘッダの場合) でアクセスできます。 ヘッダ名は、内部では小文字で表されます。 したがって、メールメッセージ内のでのヘッダ名は関係ありません。 また、ヘッダ名にダッシュが入っている場合は、 camel-case で保持されます。どちらの記法でもヘッダが見つからなかった場合は、例外がスローされます。 そんな場合は、headerExists() メソッドを使用すれば ヘッダが存在するかどうかを調べることができます。

// メッセージオブジェクトを取得します
$message = $mail->getMessage(1);

// メッセージの件名を出力します
echo $message->subject . "\n";

// content-type ヘッダを取得します
$type = $message->contentType;

// CC が設定されているかどうかを調べます
if( isset($message->cc) ) { // あるいは $message->headerExists('cc');
    $cc = $message->cc;
}

同名のヘッダが複数ある場合 (たとえば Received ヘッダなど)、 それを文字列ではなく配列として扱うこともできます。これは getHeader() メソッドを使用して行います。

// ヘッダをプロパティとして取得します - 結果は常に文字列で、
// メッセージ内で複数あらわれる場合は改行文字で区切られます
$received = $message->received;

// getHeader() メソッドを使用しても同様です
$received = $message->getHeader('received', 'string');

// 配列形式の場合、複数あらわれるとそれぞれ別のエントリとなるので便利です
$received = $message->getHeader('received', 'array');
foreach ($received as $line) {
    // なにかをします
}

// 書式を指定しなかった場合は内部表現で取得します
// (ひとつしかない場合は文字列、複数ある場合は配列となります)
$received = $message->getHeader('received');
if (is_string($received)) {
    // メッセージ内にそのヘッダはひとつしかありません
}

getHeaders() メソッドは、すべてのヘッダを配列で返します。 キーはヘッダ名を小文字にしたもので、値は文字列 (そのヘッダがひとつの場合) あるいは文字列の配列 (そのヘッダが複数の場合) となります。

// すべてのヘッダを出力します
foreach ($message->getHeaders() as $name => $value) {
    if (is_string($value)) {
        echo "$name: $value\n";
        continue;
    }
    foreach ($value as $entry) {
        echo "$name: $entry\n";
    }
}

マルチパートメッセージがないのなら、その内容は getContent() で簡単に取得できます。ヘッダの場合とは異なり、 内容は必要になった時点で初めて取得します (いわゆる遅延取得っていうやつです)。

// メッセージの内容を HTML で出力します
echo '
';
echo $message->getContent();
echo '
';

マルチパートメッセージであるかどうかを調べるには isMultipart() メソッドを使用します。マルチパートメッセージがある場合は、 getPart() メソッドで Zend_Mail_Part のインスタンスを取得します。 Zend_Mail_PartZend_Mail_Message の基底クラスなので、 getHeader()getHeaders()getContent()getPart()isMultipart といったメソッドを同様に使えます。 また、ヘッダもプロパティとして使用できます。

// マルチパートの最初の部分を取得します
$part = $message;
while ($part->isMultipart()) {
    $part = $message->getPart(1);
}
echo 'Type of this part is ' . strtok($part->contentType, ';') . "\n";
echo "Content:\n";
echo $part->getContent();

Zend_Mail_PartRecursiveIterator も実装しています。 つまり、すべてのパートを順にスキャンすることも簡単にできます。また、 結果を簡単に出力できるよう、マジックメソッド __toString() を実装しています。このメソッドは、パートの中身を返します。

// 最初の text/plain パートを出力します
$foundPart = null;
foreach (new RecursiveIteratorIterator($mail->getMessage(1)) as $part) {
    try {
        if (strtok($part->contentType, ';') == 'text/plain') {
            $foundPart = $part;
            break;
        }
    } catch (Zend_Mail_Exception $e) {
        // 無視します
    }
}
if (!$foundPart) {
    echo 'プレーンテキストのパートがありません';
} else {
    echo "プレーンテキストパート: \n" . $foundPart;
}

フラグのチェック

Maildir および IMAP はフラグの保存をサポートしています。 Zend_Mail_Storage クラスには、maildir や IMAP で使用するすべてのフラグに対応する定数が定義されています。これは Zend_Mail_Storage::FLAG_<flagname> という名前です。 フラグをチェックするには、Zend_Mail_MessagehasFlag() メソッドを使用します。 getFlags() で、設定されているすべてのフラグを取得することができます。

// 未読メッセージを探します
echo "未読メール\n";
foreach ($mail as $message) {
    if ($message->hasFlag(Zend_Mail_Storage::FLAG_SEEN)) {
        continue;
    }
    // 新着メールのマークをつけます
    if ($message->hasFlag(Zend_Mail_Storage::FLAG_RECENT)) {
        echo '! ';
    } else {
        echo '  ';
    }
    echo $message->subject . "\n";
}

// フラグをチェックします
$flags = $message->getFlags();
echo "Message is flagged as: ";
foreach ($flags as $flag) {
    switch ($flag) {
        case Zend_Mail_Storage::FLAG_ANSWERED:
            echo '返信済み ';
            break;
        case Zend_Mail_Storage::FLAG_FLAGGED:
            echo 'フラグ設定済み ';
            break;

        // ...
        // その他のフラグのチェック
        // ...

        default:
            echo $flag . '(未知のフラグ) ';
    }
}

IMAP ではユーザやクライアントが独自にフラグを設定することができます。 Zend_Mail_Storage で定数が定義されていない、 このようなフラグを取得することも可能です。これらは文字列として返され、 hasFlag() で同じようにチェックできます。

// クライアントで定義したフラグ $IsSpam, $SpamTested を調べます
if (!$message->hasFlag('$SpamTested')) {
    echo 'まだスパムチェックがすんでいません';
} else if ($message->hasFlag('$IsSpam')) {
    echo 'このメッセージはスパムです';
} else {
    echo 'このメッセージはハムです (スパムではありません)';
}

フォルダの使用法

Pop3 以外のすべての保存形式は、フォルダをサポートしています。 これはメールボックスとも言います。各保存形式で、 フォルダをサポートするために実装しているインターフェイスが Zend_Mail_Storage_Folder_Interface です。 これらすべてのクラスでは、コンストラクタで追加のオプションパラメータ folder を指定できます。これは、ログイン後に使用するフォルダを指定するものです。

ローカルの保存形式では、Zend_Mail_Storage_Folder_Mbox あるいは Zend_Mail_Storage_Folder_Maildir のいずれかのクラスを使用します。どちらもパラメータ dirname が必須で、これは基底ディレクトリの名前となります。 maildir のフォーマットは maildir++ で定義されているもの (デフォルトの区切り文字はドットです)、一方 Mbox は Mbox ファイルのディレクトリ階層を使用します。Mbox の基底ディレクトリに INBOX という名前の Mbox ファイルがない場合は、 コンストラクタで別のフォルダを設定する必要があります。

Zend_Mail_Storage_Imap は、デフォルトでフォルダをサポートしています。 これらの保存形式をオープンする例を以下に示します。

// mbox でフォルダを使用します
$mail = new Zend_Mail_Storage_Folder_Mbox(array('dirname' =>
                                                    '/home/test/mail/'));

// mbox で INBOX 以外のデフォルトフォルダを使用します。
// Zend_Mail_Storage_Folder_Maildir および Zend_Mail_Storage_Imap でも動作します
$mail = new Zend_Mail_Storage_Folder_Mbox(array('dirname' =>
                                                    '/home/test/mail/',
                                                'folder'  =>
                                                    'Archive'));

// maildir でフォルダを使用します
$mail = new Zend_Mail_Storage_Folder_Maildir(array('dirname' =>
                                                       '/home/test/mail/'));

// maildir で区切り文字にコロンを使用します。Maildir++ の推奨する形式です
$mail = new Zend_Mail_Storage_Folder_Maildir(array('dirname' =>
                                                       '/home/test/mail/',
                                                   'delim'   => ':'));

// imap の場合は、フォルダを使用するしないにかかわらず同じ形式です
$mail = new Zend_Mail_Storage_Imap(array('host'     => 'example.com',
                                         'user'     => 'test',
                                         'password' => 'test'));

getFolders($root = null) メソッドを使用すると、 ルートフォルダあるいは指定したフォルダから始まるフォルダ階層を取得できます。 返り値は Zend_Mail_Storage_Folder のインスタンスとなります。これは RecursiveIterator を実装しており、子要素もすべて Zend_Mail_Storage_Folder のインスタンスとなります。 これらの各インスタンスはローカル名およびグローバル名を持っており、 それぞれ getLocalName() メソッドおよび getGlobalName() メソッドで取得できます。 グローバル名とはルートフォルダからの絶対名称 (区切り文字を含む) で、 ローカル名とは親フォルダから見た名前のことです。

Mail フォルダの名前
グローバル名 ローカル名
/INBOX INBOX
/Archive/2005 2005
List.ZF.General General

イテレータを使用する際は、要素のキーはローカル名となります。 グローバル名を取得するには、マジックメソッド __toString() を使用します。 フォルダによっては、選択できないものもあるかもしれません。 これは、そのフォルダにメッセージを保存できず、 メッセージを選ぼうとしてエラーになっていることを意味します。 これを確認するためのメソッドが isSelectable() です。 ツリー全体をビューに出力するのは、このように非常に簡単です。

$folders = new RecursiveIteratorIterator($this->mail->getFolders(),
                                         RecursiveIteratorIterator::SELF_FIRST);
echo '';

現在選択されているフォルダを返すメソッドは getSelectedFolder() です。フォルダを変更するには selectFolder() メソッドを使用します。 このメソッドのパラメータには、グローバル名を指定しなければなりません。 区切り文字を書き込んでしまうことを防ぎたければ、 Zend_Mail_Storage_Folder インスタンスのプロパティを使用します。

// 選択した保存形式とその設定により、$rootFolder->Archive->2005
// は以下の内容と同等になります
//   /Archive/2005
//  Archive:2005
//  INBOX.Archive.2005
//  ...
$folder = $mail->getFolders()->Archive->2005;
echo 'Last folder was '
   . $mail->getSelectedFolder()
   . "new folder is $folder\n";
$mail->selectFolder($folder);

高度な使用法

NOOP の使用

リモートの保存形式を使用しており、何らかの事情で接続をずっと保持し続けたい場合は noop を使用します。

foreach ($mail as $message) {

    // 何かの計算 ...

    $mail->noop(); // 接続をキープします

    // また別の処理 ...

    $mail->noop(); // 接続をキープします
}

インスタンスのキャッシュ

Zend_Mail_Storage_MboxZend_Mail_Storage_Folder_MboxZend_Mail_Storage_Maildir および Zend_Mail_Storage_Folder_Maildir は、マジックメソッド __sleep()__wakeup() を実装しています。 つまり、シリアライズが可能であるということです。 これで、ファイルやディレクトリツリーを何度もパースする必要がなくなります。 難点があるとすれば、Mbox や Maildir を変更することができなくなるということです。 簡単な解決策としては、最終更新時刻が変更されたときに Mbox ファイルをパースしなおしたり、 フォルダがなくなった場合にフォルダ構造を再パースしたり (これはエラーとなりますが、その後別のフォルダを検索することができます) といったことが考えられます。よりよい方法は、シグナルファイル的なものを用意して 変更情報をそこに記録し、まずそれをチェックしてからキャッシュを利用するようにすることです。

// ここでは、特定のキャッシュハンドラ/クラスは使用しません。
// 使用するキャッシュハンドラにあわせてコードを変更してください
$signal_file = '/home/test/.mail.last_change';
$mbox_basedir = '/home/test/mail/';
$cache_id = 'example mail cache ' . $mbox_basedir . $signal_file;

$cache = new Your_Cache_Class();
if (!$cache->isCached($cache_id) ||
    filemtime($signal_file) > $cache->getMTime($cache_id)) {
    $mail = new Zend_Mail_Storage_Folder_Pop3(array('dirname' =>
                                                        $mbox_basedir));
} else {
    $mail = $cache->get($cache_id);
}

// 何らかの処理 ...

$cache->set($cache_id, $mail);

プロトコルクラスの拡張

リモートの保存形式では、ふたつのクラス Zend_Mail_Storage_<Name> および Zend_Mail_Protocol_<Name> を使用しています。 プロトコルクラスは、プロトコルのコマンドを処理して、レスポンスを PHP に受け渡しします。コマンドに対応したメソッド、 さまざまなデータ構造に対応した変数を保持します。 もう一方のメインクラスでは、共通インターフェイスを実装します。

プロトコルを追加したい場合は、プロトコルクラスを継承したものを作成し、 それをメインクラスのコンストラクタで使用します。 例として、PHP3 接続の前に別のポートをノックしなければならないという場面を考えてみましょう。

class Example_Mail_Exception extends Zend_Mail_Exception
{
}

class Example_Mail_Protocol_Exception extends Zend_Mail_Protocol_Exception
{
}

class Example_Mail_Protocol_Pop3_Knock extends Zend_Mail_Protocol_Pop3
{
    private $host, $port;

    public function __construct($host, $port = null)
    {
        // このクラスでは自動接続は行いません
        $this->host = $host;
        $this->port = $port;
    }

    public function knock($port)
    {
        $sock = @fsockopen($this->host, $port);
        if ($sock) {
            fclose($sock);
        }
    }

    public function connect($host = null, $port = null, $ssl = false)
    {
        if ($host === null) {
            $host = $this->host;
        }
        if ($port === null) {
            $port = $this->port;
        }
        parent::connect($host, $port);
    }
}

class Example_Mail_Pop3_Knock extends Zend_Mail_Storage_Pop3
{
    public function __construct(array $params)
    {
        // ... $params をここでチェックします! ...
        $protocol = new Example_Mail_Protocol_Pop3_Knock($params['host']);

        // 「特別な」処理をここでします
        foreach ((array)$params['knock_ports'] as $port) {
            $protocol->knock($port);
        }

        // 正しい状態に修正します
        $protocol->connect($params['host'], $params['port']);
        $protocol->login($params['user'], $params['password']);

        // 親を初期化します
        parent::__construct($protocol);
    }
}

$mail = new Example_Mail_Pop3_Knock(array('host'        => 'localhost',
                                          'user'        => 'test',
                                          'password'    => 'test',
                                          'knock_ports' =>
                                              array(1101, 1105, 1111)));

ご覧の通り、メインクラスのコンストラクタでは 接続、ログイン、(サポートされるなら) フォルダの選択 までを済ませているものと期待しています。 したがって、独自のプロトコルクラスを使用する場合は、 これらを確実に処理しておく必要があります。そうしないと、 その後のメソッドが失敗してしまいます。

容量制限の使用 (1.5 以降)

Zend_Mail_Storage_Writable_Maildir は Maildir++ の容量制限をサポートしています。デフォルトではこの機能は無効になっていますが、 手動で使用することもできます。これは、自動チェックをしたくないとき (つまり appendMessage()removeMessage() および copyMessage() でチェックを行わず maildirsize ファイルにもエントリを追加しないとき) に使えます。 この機能を有効にすると、容量制限に達した maildir に書き込もうとしたときに例外がスローされます。

容量制限関連のメソッドは getQuota()setQuota() および checkQuota() の 3 つです。

$mail = new Zend_Mail_Storage_Writable_Maildir(array('dirname' =>
                                                   '/home/test/mail/'));
$mail->setQuota(true); // true で有効に、そして false で無効にします
echo 'Quota check is now ', $mail->getQuota() ? 'enabled' : 'disabled', "\n";
// チェックを無効にしている場合でも手動でのチェックは使用できます
echo 'You are ', $mail->checkQuota() ? 'over quota' : 'not over quota', "\n";

checkQuota() は、より詳細な情報も返します。

$quota = $mail->checkQuota(true);
echo 'You are ', $quota['over_quota'] ? 'over quota' : 'not over quota', "\n";
echo 'You have ',
     $quota['count'],
     ' of ',
     $quota['quota']['count'],
     ' messages and use ';
echo $quota['size'], ' of ', $quota['quota']['size'], ' octets';

maildirsize ファイルで指定したものではなく独自の容量制限を使用したい場合は、 setQuota() を使用します。

// メッセージ数とオクテットサイズに対応しています。順序が重要です
$quota = $mail->setQuota(array('size' => 10000, 'count' => 100));

独自の容量チェックを追加するには、単一の文字をキーとして使用します。 キーが保存されます (が、チェックはされません)。 Zend_Mail_Storage_Writable_Maildir を継承して独自の容量制限 を定義することもできます。 maildirsize ファイルが存在しないときにのみ使用します (Maildir++ ではこれが起こりえます)。

class Example_Mail_Storage_Maildir extends Zend_Mail_Storage_Writable_Maildir {
    // getQuota は、容量チェックの際に $fromStorage = true でコールされます
    public function getQuota($fromStorage = false) {
        try {
            return parent::getQuota($fromStorage);
        } catch (Zend_Mail_Storage_Exception $e) {
            if (!$fromStorage) {
                // 未知のエラー
                throw $e;
            }
            // maildirsize ファイルが見つからないようです

            list($count, $size) = get_quota_from_somewhere_else();
            return array('count' => $count, 'size' => $size);
        }
    }
}
Previous Next
Introduction to Zend Framework
概要
インストール
Zend_Acl
導入
アクセス制御の洗練
高度な使用法
Zend_Amf
導入
Zend_Amf_Server
Zend_Application
導入
Zend_Application クイックスタート
Theory of Operation
コア機能
利用できるリソースプラグイン
Zend_Auth
導入
データベースのテーブルでの認証
ダイジェスト認証
HTTP 認証アダプタ
LDAP 認証
Open ID 認証
Zend_Cache
導入
キャッシュの仕組み
Zend_Cache のフロントエンド
Zend_Cache のバックエンド
Zend_Captcha
導入
Captcha の方法
CAPTCHA アダプタ
Zend_CodeGenerator
導入
Zend_CodeGeneratorサンプル
Zend_CodeGeneratorリファレンス
Zend_Config
導入
動作原理
Zend_Config_Ini
Zend_Config_Xml
Zend_Config_Writer
Zend_Config_Writer
Zend_Console_Getopt
導入
Getopt の規則の宣言
オプションおよび引数の取得
Zend_Console_Getopt の設定
Zend_Controller
Zend_Controller クイックスタート
Zend_Controller の基本
フロントコントローラ
リクエストオブジェクト
標準のルータ
ディスパッチャ
アクションコントローラ
アクションヘルパー
レスポンスオブジェクト
プラグイン
モジュラーディレクトリ構造の規約の使用
MVC での例外
以前のバージョンからの移行
Zend_Currency
Zend_Currency について
通貨の操作方法
以前のバージョンからの移行
Zend_Date
導入
動作原理
基本メソッド
Zend_Date API の概要
日付の作成
日付関数全般用の定数
動作例
Zend_Db
Zend_Db_Adapter
Zend_Db_Statement
Zend_Db_Profiler
Zend_Db_Select
Zend_Db_Table
Zend_Db_Table_Row
Zend_Db_Table_Rowset
導入
Zend_Db_Table_Definition
Zend_Debug
変数の出力
Zend_Dojo
導入
Zend_Dojo_Data: dojo.data エンベロープ
Dojo ビューヘルパー
Dojoフォーム要素とデコレーター
Zend_Dojo build layer support
Zend_Dom
導入
Zend_Dom_Query
Zend_Exception
例外の使用法
Zend_Feed
導入
フィードの読み込み
ウェブページからのフィードの取得
RSS フィードの使用
Atom フィードの使用
単一の Atom エントリの処理
フィードおよびエントリの構造の変更
独自のフィードクラスおよびエントリクラス
Zend_Feed_Reader
Zend_File
Zend_File_Transfer
Zend_File_Transfer 用のバリデータ
Filters for Zend_File_Transfer
以前のバージョンからの移行
Zend_Filter
導入
標準のフィルタクラス群
フィルタチェイン
フィルタの書き方
Zend_Filter_Input
Zend_Filter_Inflector
前バージョンからの移行
Zend_Form
Zend_Form
Zend_Form クイックスタート
Zend_Form_Element を用いたフォーム要素の作成
Zend_Form によるフォームの作成
Zend_Form_Decorator による独自のフォームマークアップの作成
Zend Framework に同梱されている標準のフォーム要素
Zend Framework に同梱されている標準のデコレータ
Zend_Form の国際化
Zend_Form の高度な使用法
Zend_Gdata
導入
AuthSub による認証
Using the Book Search Data API
ClientLogin による認証
Google Calendar の使用法
Google Documents List Data API の使用法
Using Google Health
Google Spreadsheets の使用法
Google Apps Provisioning の使用法
Google Base の使用法
Picasa Web Albums の使用法
YouTube Data API の使用法
Gdata の例外処理
Zend_Http
導入
Zend_Http_Client - 高度な使用法
Zend_Http_Client - 接続アダプタ
前バージョンからの移行
Zend_Http_Cookie および Zend_Http_CookieJar
Zend_Http_Response
Zend_InfoCard
導入
Zend_Json
導入
基本的な使用法
Zend_Json の高度な使用法
XML から JSON への変換
Zend_Json_Server - JSON-RPCサーバー
Zend_Layout
導入
Zend_Layout クイックスタート
Zend_Layout の設定オプション
Zend_Layout の高度な使用法
Zend_Ldap
導入
API概要
利用シナリオ
ツール
Zend_Ldap_Nodeを使用してLDAPツリーへのオブジェクト指向アクセス
LDAPサーバから情報を取得
LDIFへ、または、からのLDAPデータシリアライズ
Zend_Loader
ファイルやクラスの動的な読み込み
The Autoloader
Resource Autoloaders
プラグインのロード
Zend_Locale
導入
Zend_Locale の使用法
正規化および地域化
日付および時刻の扱い
サポートするロケール
以前のバージョンからの移行
Zend_Log
概要
ライター
フォーマッタ
フィルタ
Zend_Mail
導入
SMTP 経由での送信
SMTP 接続による複数のメールの送信
異なる転送手段の使用
HTML メール
ファイルの添付
受信者の追加
MIME バウンダリの制御
追加のヘッダ
文字セット
エンコーディング
SMTP 認証
セキュアな SMTP トランスポート
メールメッセージの読み込み
Zend_Measure
導入
計測値の作成
計測値の出力
計測値の操作
計測値の型
Zend_Memory
概要
メモリマネージャ
メモリオブジェクト
Zend_Mime
Zend_Mime
Zend_Mime_Message
Zend_Mime_Part
Zend_Navigation
導入
画面
Containers
Migrating from Previous Versions
Zend_OpenId
導入
Zend_OpenId_Consumer の基本
Zend_OpenId_Provider
Zend_Paginator
導入
使用法
設定
高度な使用法
Zend_Pdf
導入
PDF ドキュメントの作成および読み込み
PDF ドキュメントへの変更内容の保存
ページの操作
描画
Interactive Features
ドキュメントの情報およびメタデータ
Zend_Pdf モジュールの使用例
Zend_ProgressBar
Zend_ProgressBar
Zend_Queue
導入
使用例
フレームワーク
アダプタ
Zend_Queueのカスタマイズ
Stomp
Zend_Reflection
導入
Zend_Reflectionサンプル
Zend_Reflectionリファレンス
Zend_Registry
レジストリの使用法
Zend_Rest
導入
Zend_Rest_Client
Zend_Rest_Server
Zend_Search_Lucene
概要
インデックスの構築
インデックスの検索
クエリ言語
クエリ作成用の API
文字セット
拡張性
Java Lucene との相互運用
応用
ベストプラクティス
Zend_Server
導入
Zend_Server_Reflection
Zend_Service
導入
Zend_Service_Akismet
Zend_Service_Amazon
Zend_Service_Amazon_Ec2
Zend_Service_Amazon_Ec2: Instances
Zend_Service_Amazon_Ec2: Windows Instances
Zend_Service_Amazon_Ec2: Reserved Instances
Zend_Service_Amazon_Ec2: CloudWatch Monitoring
Zend_Service_Amazon_Ec2: Amazon Machine Images (AMI)
Zend_Service_Amazon_Ec2: Elastic Block Stroage (EBS)
Zend_Service_Amazon_Ec2: Elastic IP Addresses
Zend_Service_Amazon_Ec2: Keypairs
Zend_Service_Amazon_Ec2:リージョンおよび利用可能ゾーン
Zend_Service_Amazon_Ec2: Security Groups
Zend_Service_Amazon_S3
Zend_Service_Amazon_Sqs
Zend_Service_Audioscrobbler
Zend_Service_Delicious
Zend_Service_Flickr
Zend_Service_Nirvanix
Zend_Service_ReCaptcha
Zend_Service_Simpy
導入
Zend_Service_StrikeIron
Zend_Service_StrikeIron: バンドルされているサービス
Zend_Service_StrikeIron: 応用編
Zend_Service_Technorati
Zend_Service_Twitter
Zend_Service_Yahoo
Zend_Session
導入
基本的な使用法
高度な使用法
グローバルセッションの管理
Zend_Session_SaveHandler_DbTable
Zend_Soap
Zend_Soap_Server
Zend_Soap_Client
WSDLアクセッサ
自動検出
Zend_Tag
導入
Zend_Tag_Cloud
Zend_Test
導入
Zend_Test_PHPUnit
Zend_Test_PHPUnit_Db
Zend_Text
Zend_Text_Figlet
Zend_Text_Table
Zend_TimeSync
導入
Zend_TimeSync の動作
Zend_Tool_Framework
導入
CLIツールの使用
アーキテクチャ
Zend_Tool_Frameworkを利用してプロバイダを作成する
出荷されたシステムプロバイダー
Extending and Configuring Zend_Tool_Framework
Zend_Tool_Project
導入
プロジェクトを作成
Zend Toolプロジェクトプロバイダー
Zend_Translate
導入
Zend_Translate のアダプタ
翻訳アダプタの使用法
ソースファイルの作成
翻訳用の追加機能
Plural notations for Translation
以前のバージョンからの移行
Zend_Uri
Zend_Uri
Zend_Validate
導入
標準のバリデーションクラス群
バリデータチェイン
バリデータの書き方
検証メッセージ
Zend_Version
Zend Framework のバージョンの取得
Zend_View
導入
コントローラスクリプト
ビュースクリプト
ビューヘルパー
Zend_View_Abstract
以前のバージョンからの移行
Zend_Wildfire
Zend_Wildfire
Zend_XmlRpc
導入
Zend_XmlRpc_Client
Zend_XmlRpc_Server
Zend Framework のシステム要件
導入
Zend Framework PHP 標準コーディング規約
概要
PHP ファイルの書式
命名規約
コーディングスタイル
Zend Framework Documentation Standard
Overview
Documentation File Formatting
Recommendations
Zend Framework MVC アプリケーションのために推奨されるプロジェクト構造
概要
推奨されるプロジェクト・ディレクトリ構造
モジュール構造
リライト設定ガイド
Zend Framework Performance Guide
導入
クラスの読み込み
Zend_Dbパフォーマンス
国際化(i18n)とローカライズ(l10n)
ビューのレンダリング
著作権に関する情報