もしこのブログがお役に立ちましたら、次回のAmazonでのお買い物時に こちらのリンクから 購入していただけますと嬉しく思います。

2010年3月22日

PHPからIMAP操作

Gmailに送信用のアカウントを作ってPHPからGmail経由でメールを送信したとします。
もしかするとその後、送信済みのメールを削除したいと思うかもしれません。
その場合次のようなコードで対応できます。

注意1.Gmailの設定画面から言語を「English (US)」に設定しておく必要があります。
注意2.このコードを実行すると「Sent Mail(送信済み)」および「Trash(ゴミ箱)」フォルダの中身がすべて削除され、復元することはできません。

// pearのNet_IMAPを利用する
require_once('Net/IMAP.php');
require_once('Net/IMAPProtocol.php');

$imap = new Net_IMAP("ssl://imap.googlemail.com", 993);

// デバッグモードをOnにする
$imap->setDebug(true);

// ログインする
$imap->login("アカウント名@gmail.com", "パスワード");

// 「Sent Mail」フォルダを選択する
$imap->selectMailbox("[Gmail]/Sent Mail");

// 「Sent Mail」フォルダのメールを「Trash」フォルダに移動する
$imap->copyMessages("[Gmail]/Trash");

// 「Trash」フォルダを選択する
$imap->selectMailbox("[Gmail]/Trash");

// 「Trash」フォルダ内のすべてのメールに削除フラグを付ける
$imap->setFlags("all", "\Deleted", "add");

// ゴミ箱を空にする
$imap->expunge();

// IMAPサーバから切断する
$imap->disconnect();


はまったのは、「Sent Mail」フォルダ内で削除フラグをつけてもメールがゴミ箱に移動しないことでした。
Gmailサーバーは削除フラグをセットするコマンドを、当該メールをアーカイブするコマンドとみなすようです。
なので、まずメールを「Trash」フォルダに移動させ、そこで削除フラグを付け、最後にEXPUNGEコマンドを発行する必要があります。
こうすることでやっと、論理削除ではなく物理削除したことになるようです。

最後にNet_IMAPのAPIドキュメントのリンクを貼っておきます。

0 件のコメント:

コメントを投稿