その他

PHPファイルひとつで作る簡単IMAPメーラー

こんにちは、中川です。

最近何かと社外に出ることが多くなり、簡単にケータイからも会社のメールチェックがしたいなと、思いましたので、ケータイから見れるものを作ってみました。

今回作るものはIMAP用で、最新のメール一覧と本文の閲覧のみで、返信等の操作はできません。私の用途として、確認だけできればいいというのと、ちょっとPHPからIMAPを触ってみたかったというのと、ブログのネタに困って勢いで作ったというものです。

※以下のサンプルをご利用になるような場合は、しっかりとファイル自体への認証を行ってください。また、会社に怒られる可能性もありますので、気をつけてください。


<?php
/**
 * Imap受信テスト(文字コードは環境によって変更してください。)
 *  ※このファイルへのアクセス認証はしっかりかけましょう
 * php-imapモジュールが必要です。
 */
//--------------------------------------------------------------------------------------//
function h($str) {
return htmlspecialchars($str, ENT_QUOTES);
}
function he($str) {
echo h($str);
}
function convert_mail_str($str) {
return mb_convert_encoding(mb_decode_mimeheader($str), "utf-8", mb_detect_encoding($str));
}
//--------------------------------------------------------------------------------------//
mb_language('Japanese');
mb_internal_encoding('ISO-2022-JP');
$MAIL_HOST = "mail.example.com";
$MAIL_FETCH_COUNT = 20;
$MAIL_USER = "MyUser";
$MAIL_PASS = "MyPassword";
$mbox = @imap_open("{" . $MAIL_HOST . ":143/imap}INBOX", $MAIL_USER, $MAIL_PASS)
 or exit("error.\n");
if ($id = intval($_GET["id"])) {
$head = imap_header($mbox, $id);
$body = imap_body($mbox, $id, FT_INTERNAL);
$mail_data = array(
  "date"          => date("Y-m-d H:i:s", strtotime($head->date)),
  "to"            => convert_mail_str($head->toaddress),
  "cc"            => convert_mail_str($head->ccaddress),
  "from"          => convert_mail_str($head->fromaddress),
  "subject" 			=> convert_mail_str($head->subject),
  "body"          => mb_convert_encoding($body, "utf-8", "auto"),
);
} else {
$mboxes = imap_check($mbox);
$start_cnt = $mboxes->Nmsgs - $MAIL_FETCH_COUNT;
$overview_list = imap_fetch_overview($mbox,"{$start_cnt}:{$mboxes->Nmsgs}",0);
$mail_list = array();
foreach ($overview_list as $_overview) {
  $mail_list[$_overview->msgno] = array(
          "msgno" 				=> $_overview->msgno,
          "date" 					=> date("Y-m-d H:i:s", strtotime($_overview->date)),
          "from" 					=> convert_mail_str($_overview->from),
          "to" 						=> $_overview->to,
          "subject"       => convert_mail_str($_overview->subject),
  );
}
$mail_list = array_reverse($mail_list, true);
}
imap_close($mbox);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ImapTest</title>
</head>
<body>
<?php if ($id  & & $mail_data): ?>
    <?php he($mail_data["date"]); ?>
    <b><?php he($mail_data["subject"]); ?></b>
    From:<?php he($mail_data["from"]); ?>
To :<?php he($mail_data["to"]); ?>
Cc :<?php he($mail_data["cc"]); ?>
<div><?php echo nl2br(h($mail_data["body"])); ?></div>
<?php else: ?>
<?php foreach ($mail_list as $mail): ?>
    <a href="<?php he($_SERVER['SCRIPT_NAME'])?>?id=<?php he($mail['msgno']);?>"><?php he($mail["subject"]); ?></a>
    <?php he($mail["date"]); ?>
    From:<?php he($mail["from"]); ?>
    To :<?php he($mail["to"]); ?>
  <hr />
<?php endforeach ?>
<?php endif ?>
<hr />
<a href="<?php he($_SERVER['SCRIPT_NAME']); ?>" accesskey="0">HOME</a>
</body>
</html>

これで、一覧と本文の閲覧ができました。

と、作ってはみたものの、管理者に頼めば、Squirrelmail とかのテンプレートでケータイ対応できたり、そういうようなソフトがあるのでしょうか?

とりあえず、PHPでも簡単にIMAPの利用ができるようですね。

author img for asial

asial

前の記事へ

次の記事へ

一覧へ戻る
PAGE TOP