技術者派遣の技術日誌ブログ

December 29, 2007

メール受信スクリプト (PHP)

Filed under: ALL — Tags: , , — Sayuri @ 2:01 am
管理しているサイトで、携帯からの写真の投稿や空メールを受信しての登録などで、PHPでメールを受信する必要があったので、そのスクリプトを書いたことがあった。最初はよくわからなかったのでネットをあちこち探しながら調べながらプログラミングしたのだが、備忘録として載せておくことにする。

function mail_receive($user, $pwd)
{
$host = “xxx.xxx.xxx.xxx”;
$port = 110;

$fp = fsockopen($host, $port);

// ログイン
$line = fgets($fp, 512);
fputs($fp, “USER $user\r\n”); // USER名
$line = fgets($fp, 512);
fputs($fp, “PASS $pwd\r\n”); // パスワード
$line = fgets($fp, 512);
if( !eregi(“OK”, $line) ) // ログイン失敗?
{
fclose($fp);
return false;
}

// メールボックス内のデータを取得
fputs($fp, “STAT\r\n”);
$line = fgets($fp, 512);
list($stat, $num, $size) = explode(' ', $line);
if( 0+$num == 0 ) // データがない?
{
fclose($fp);
return false;
}

// それぞれ受信して、配列に納める
for($id=1;$id<=$num;$id++)
{
fputs($fp, “RETR $id\r\n”);
$line = fgets($fp);

$msg[$id] = “”;
while( !eregi(“^\.\r?\n”, $line) )
{
$line = fgets($fp, 512);
$msg[$id] .= $line;
}

fputs($fp, “DELE $id\r\n”);
$line = fgets($fp, 512);
}

fputs($fp, “QUIT\r\n”);
fclose($fp);

return $msg;
}

アカウント名とパスワードを指定して呼び出すと、メールを受信して、配列に受信テキストを納めて返すという関数だ。
$host と $port は固定にしてあるが、汎用的にするなら引数にしてもかまわない。これはそのサイトではどのアカウントであってもメールサーバーが変わらないので、そうしてあるだけなので。メールサーバーによっては途中のコマンドとか多少変更する必要などがあるかもしれない。また手抜きして受信途中でエラーとかタイムアウトとかの処理を入れていないのでご注意。

Related posts:

  1. 【How To】【Tips】php メール受信 — メール受信スクリプト (PHP)
  2. phpメール受信スクリプト
  3. 【tips】大量のメールを送信するPHPのプログラムを教えてください
  4. CakePHP1.2(+PHPMailer) から Gmail (または Google Apps)経由でメールを送る
  5. how to find that given string is palindrome or not C# .NET

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

このページの上部に戻る

Powered by WordPress