[覚書]PHPでPOP接続して内容を取得[メモ]

お久しぶりです。

とりあえず、phpでpop接続してメールの内容を取得するんご!

<?php
$host = "ssl://[ホスト名]";
$port = "[ポート番号]";
$user = "[ユーザー名]";
$pass = "[パスワード]";
// 接続
$con = fsockopen( $host, $port, $err, $errno );

// 認証ユーザー
fputs($con, "USER {$user}\r\n");
$buf = fgets($con, 512);

// 認証パスワード
fputs($con, "PASS {$pass}\r\n");
$buf = fgets($con, 512);

// メールメッセージの数とサイズを応答する
fputs($con, "STAT\r\n");
$buf = fgets($con, 512);
$tmp = explode(" ",$buf);
if ($tmp[1] == "Logged"){
    $buf = fgets($con, 512);
    $tmp = explode(" ",$buf);
}
if ($tmp[1] == 0){
    // メッセージがない場合は、接続を閉じる
    fputs($con, "QUIT\r\n");
    $buf = fgets($con, 512);
    exit;
}

// 指定されたメッセージ番号のメッセージ全体を表示する
fputs($con, "RETR 1\r\n"); // 今回は1番のを取得
$buf = fgets($con, 512);
$data='';
while ( !feof($con) ) {
    $meta_data = stream_get_meta_data($con);
    if($meta_data["timed_out"]) break;
    $line = fgets($con);
    if($line === false || preg_match("/^\.\r\n/", $line)) break;
    $line = preg_replace("/^\.\./", ".", $line);
    $data .= $line;
}
// 接続を閉じる
fputs($con, "QUIT\r\n");
$buf = fgets($con, 512);

$dataはメールのヘッダー部分が含まれているのでヘッダー部分とボディー部分を分離する必要がある。
で、ボディーの部分がヘッダー部分で書かれているContent-Typeのcharsetの文字コードになっているので、プログラムがUTF-8の場合は、扱いやすいようにUTF-8へしてあげるといいのかな。

 

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です