2014.
02.
16
13:55:20
ちょっくらメール関連の情報を収集していたのですが、
なんか自分でメーラーを作れる気分になってきました。
お金を頂けるような本格的なものは難しいにしても、
PHPとかで、なんちゃってWebメールくらいだったら行けるんじゃね(--?
思い立ったが吉日です。
試しに作ってみることにしました。
まずは基本的な機能、受信メールの一覧を表示するところを作ってみますか。
ふむふむ。
件名をデコードする方法を探したり、メールヘッダのみを取得する方法を探したり、
ちょいちょい情報を入手しながらやってみたところ、なんか知らんけどでけた\(--)/
コードはこんな感じφ(--)
■mail_list.php(UTF-8)
実行結果は例えばこんな感じφ(--)
ページングとかエラー処理とか何にもない必要最低限ですが、
取りあえず受信メールの一覧は表示できました。
一覧から選択してメールの詳細を表示するやり方は
「PHP、WEBメールを作ってみる(2)受信メールの詳細を取得して画面に表示する」
をご覧ください。
よっしゃぁ!\(--)/
なんか自分でメーラーを作れる気分になってきました。
お金を頂けるような本格的なものは難しいにしても、
PHPとかで、なんちゃってWebメールくらいだったら行けるんじゃね(--?
思い立ったが吉日です。
試しに作ってみることにしました。
まずは基本的な機能、受信メールの一覧を表示するところを作ってみますか。
ふむふむ。
件名をデコードする方法を探したり、メールヘッダのみを取得する方法を探したり、
ちょいちょい情報を入手しながらやってみたところ、なんか知らんけどでけた\(--)/
コードはこんな感じφ(--)
■mail_list.php(UTF-8)
<?php
//-------------------------------
//パラメータ定義
//-------------------------------
//文字エンコード
$enc = "UTF-8";
//POPサーバ
$mail_host = "mail.example.com";
//ポート
$mail_port = 110;
//ユーザ
$mail_user = "mailuser";
//パスワード
$mail_pwd = "mailpwd";
//-------------------------------
//接続&ログイン
//-------------------------------
//接続
$fp = fsockopen($mail_host, $mail_port);
//ログイン
$line = fgets($fp, 512);
fputs($fp, "USER $mail_user\r\n"); // USER名
$line = fgets($fp, 512);
fputs($fp, "PASS $mail_pwd\r\n"); // パスワード
$line = fgets($fp, 512);
if(!preg_match("(OK)", $line)){ // ログイン失敗?
fclose($fp);
die("ログイン失敗");
}
//-------------------------------
//受信メール件数取得
//-------------------------------
fputs($fp, "STAT\r\n");
$line = fgets($fp, 512);
print $line . "<br>"; //STAT結果表示
//STAT結果を変数に展開
list($status, $cnt, $size) = explode(' ', $line);
//受信メール件数チェック
if(intVal($cnt) == 0){
print "受信メール無し<br><br>";
}else{
print "受信メールあり<br><br>";
}
//テスト用に件数制限入れておきます(100件を超える場合は100件まで)
$cnt = ($cnt > 100 ? 100 : $cnt);
//-------------------------------
//受信メール一覧表示
//-------------------------------
for($i = 1; $i <= $cnt; $i++){
//メッセージヘッダ取得
//「TOP」が使えない環境の人は「RETR」で代用してください
//fputs($fp, "RETR $i\r\n");
fputs($fp, "TOP $i 0\r\n");
do{
$line = fgets($fp, 512);
//件名を表示する
if(preg_match("/^Subject/", $line)){
$subject = mb_decode_mimeheader($line);
$subject = preg_replace("/^Subject:/", "", $subject);
print $i . ":" . mb_convert_encoding($subject, $enc, "auto") . "<br>";
}
}while (!preg_match("/^\.\r\n/", $line));
}
//切断
fputs($fp, "QUIT\r\n");
fclose($fp);
?>
//-------------------------------
//パラメータ定義
//-------------------------------
//文字エンコード
$enc = "UTF-8";
//POPサーバ
$mail_host = "mail.example.com";
//ポート
$mail_port = 110;
//ユーザ
$mail_user = "mailuser";
//パスワード
$mail_pwd = "mailpwd";
//-------------------------------
//接続&ログイン
//-------------------------------
//接続
$fp = fsockopen($mail_host, $mail_port);
//ログイン
$line = fgets($fp, 512);
fputs($fp, "USER $mail_user\r\n"); // USER名
$line = fgets($fp, 512);
fputs($fp, "PASS $mail_pwd\r\n"); // パスワード
$line = fgets($fp, 512);
if(!preg_match("(OK)", $line)){ // ログイン失敗?
fclose($fp);
die("ログイン失敗");
}
//-------------------------------
//受信メール件数取得
//-------------------------------
fputs($fp, "STAT\r\n");
$line = fgets($fp, 512);
print $line . "<br>"; //STAT結果表示
//STAT結果を変数に展開
list($status, $cnt, $size) = explode(' ', $line);
//受信メール件数チェック
if(intVal($cnt) == 0){
print "受信メール無し<br><br>";
}else{
print "受信メールあり<br><br>";
}
//テスト用に件数制限入れておきます(100件を超える場合は100件まで)
$cnt = ($cnt > 100 ? 100 : $cnt);
//-------------------------------
//受信メール一覧表示
//-------------------------------
for($i = 1; $i <= $cnt; $i++){
//メッセージヘッダ取得
//「TOP」が使えない環境の人は「RETR」で代用してください
//fputs($fp, "RETR $i\r\n");
fputs($fp, "TOP $i 0\r\n");
do{
$line = fgets($fp, 512);
//件名を表示する
if(preg_match("/^Subject/", $line)){
$subject = mb_decode_mimeheader($line);
$subject = preg_replace("/^Subject:/", "", $subject);
print $i . ":" . mb_convert_encoding($subject, $enc, "auto") . "<br>";
}
}while (!preg_match("/^\.\r\n/", $line));
}
//切断
fputs($fp, "QUIT\r\n");
fclose($fp);
?>
実行結果は例えばこんな感じφ(--)
+OK 2 1912
受信メールあり
1: test
2: ああああ
受信メールあり
1: test
2: ああああ
ページングとかエラー処理とか何にもない必要最低限ですが、
取りあえず受信メールの一覧は表示できました。
一覧から選択してメールの詳細を表示するやり方は
「PHP、WEBメールを作ってみる(2)受信メールの詳細を取得して画面に表示する」
をご覧ください。
よっしゃぁ!\(--)/