ソースコードをブログ上できれいに表記させる為のテストがてら、空メールをパイプでシステムに渡して、自動返信をする仕組みを紹介
#!/usr/bin/php -q
mb_language("japanese");
mb_internal_encoding("UTF-8");
// main
{
$stdin = fopen("php://stdin", "r");
if (!$stdin) {
exit();
}
$email = "";
while ($line = fgets($stdin)) {
$line = trim($line);
// メールヘッダ部が終了したらループ終了
if (!$line || $email){
break;
}
// 送信元メールアドレスの取得
if (eregi("Return-Path:[ \t]*([^\r\n]+)", $line)){
$email = getEmail($line);
}elseif(eregi("From:[ \t]*([^\r\n]+)", $line)){
$email = getEmail($line);
}
}
// メールアドレスが取得できなければ終了。
if (!$email){
exit();
}
autoMail($email);
}
function getEmail($line)
{
if (eregi("Return-Path:[ \t]*([^\r\n]+)", $line, $freg)) {
$from = addr_search($freg[1]);
}elseif(eregi("From:[ \t]*([^\r\n]+)", $line, $freg)){
$from = addr_search($freg[1]);
}
return trim($from);
}
function addr_search($addr)
{
if ( eregi("[\"]?([-!#$%&\?\'*+\\./0-9A-Z^_`a-z{|}~]+)[\"]?(@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+)", $addr, $fromreg) ) {
return $fromreg[1] . $fromreg[2];
} else {
return false;
}
}
function autoMail($email)
{
//日本語メール送信
$subject = "テスト";
$body = "テスト";
$from = "test@test";
//ちゃんと日本語メールが送信できます
mb_send_mail($email,$subject,$body,"From:".$from);
}
?>