Open PNE をXREAサーバーへのインストールメモ
バージョンは2.6.2
サーバーは独自ドメインで利用
以下、xreaでは必須
■config.php
define('MAIL_SET_ENVFROM', false); に変える
既定ではコメントになっており自動ログインしないので
session_save_path('/virtual/登録したアカウント/お好きなフォルダ名');
コメントはずして、設定
■メール設定について
default@ドメイン名
defaultと言うアカウントで登録する事により、CacheALL機能で
@ドメイン名のメールをすべて受信する事が出来る
■cronでスクリプトを実行してmail.phpにメールを渡します。
cron設定でスクリプトを実行してmail.phpに渡す。
以下をに好きな名前たとえば cronmail.sh などと付けて
/virtual/アカウント/bin に保存
cronに設定
/virtual/アカウント/bin/cronmail.sh >/dev/null 2>&1
cd /virtual/アカウント/bin
/usr/local/bin/php /virtual/アカウント/bin/cpmail.php
exit
POPサーバ設定ファイルを作る
pop.ini.php
define('OPENPNE_DIR', realpath('/virtual/アカウント名/'));
//メールサーバーの設定
$_MS_host = "s210.xrea.com"; //POP3サーバー名 s210.xrea.com
$_MS_user = "default@s210.xrea.com"; // ユーザーID
$_MS_pass = "POPパスワード"; // パスワード
?>
以下は、cpmail.php mail.phpをコピーして作ったもの
同じく/virtual/アカウント/bin に保存
// エラー出力を抑制
ini_set('display_errors', false);
@ob_start();
//ライブラリ読み込み
require_once '../lib/include/Log.php';
//require_once 'PNE/KtaiMail.php';
require_once '../webapp/lib/mail/sns.php';
require "pop.ini.php"; // POPサーバ設定ファイル
// コマンドー送信!!
function _sendcmd($sock,$cmd) {
fputs($sock, $cmd."\r\n");
$buf = fgets($sock, 512);
if(substr($buf, 0, 3) == '+OK') {
return $buf;
} else {
die("$cmd => $buf");
}
return false;
}
$sock = fsockopen($_MS_host, 110, $err, $errno, 10) or die("サーバーに接続できません");
$buf = fgets($sock, 512);
if(substr($buf, 0, 3) != '+OK') die($buf);
$buf = _sendcmd($sock, "USER $_MS_user");
$buf = _sendcmd($sock, "PASS $_MS_pass");
$data = _sendcmd($sock, "STAT");//STAT -件数とサイズ取得
sscanf($data, '+OK %d %d', $num, $size);
$raw_mail = '';
//メールがない時
if ($num == "0") {
$buf = _sendcmd($sock, "QUIT");
fclose($sock);
echo "ないとき
";
exit;
// メールがある時
}else{
echo "ある
";
$mail_array=array();
// ----- $num件のメールread後削除
for($i=1;$i<=$num;$i++) {
$raw_mail = '';//初期化
$line = _sendcmd($sock, "RETR $i");//RETR n -n番目取得
while (!ereg("^\.\r\n",$line)) {//EOFの.までread
$line = fgets($sock,512);
$raw_mail.= $line;
}
$mail_array[]=$raw_mail;//配列に追加
$data = _sendcmd($sock, "DELE $i");//DELE n n番目削除
}
$buf = _sendcmd($sock, "QUIT");
fclose($sock);
}//end メール時処理
// 1通ずつ処理
foreach($mail_array as $a_mail){
m_process_mail($a_mail);
}
m_debug_log(ob_get_contents(), PEAR_LOG_DEBUG);
while (@ob_end_clean());
//メール処理
function m_process_mail($raw_mail)
{
$options['from_encoding'] = MAIL_FROM_ENCODING;
$options['to_encoding'] = 'UTF-8';
$options['img_tmp_dir'] = OPENPNE_VAR_DIR . '/tmp';
$options['img_max_filesize'] = IMAGE_MAX_FILESIZE * 1024;
$options['trim_doublebyte_space'] = OPENPNE_TRIM_DOUBLEBYTE_SPACE;
$decoder =& new OpenPNE_KtaiMail($options);
$decoder->decode($raw_mail);
$from = $decoder->get_from();
$to = $decoder->get_to();
if (!db_common_is_mailaddress($from) || !db_common_is_mailaddress($to)) {
m_debug_log('mail.php::m_process_mail() ERROR code 3');
return false;
}
list($to_user, $to_host) = explode("@", $to, 2);
// check prefix
if (MAIL_ADDRESS_PREFIX) {
if (strpos($to_user, MAIL_ADDRESS_PREFIX) !== 0) {
m_debug_log('mail.php::m_process_mail() missing prefix');
return false;
}
$to_user = substr($to_user, strlen(MAIL_ADDRESS_PREFIX));
}
if ($to_host === MAIL_SERVER_DOMAIN) {
$mail_sns =& new mail_sns($decoder);
if (!$mail_sns->main()) {
m_debug_log('mail.php::m_process_mail() ERROR code 1');
return false;
}
} else {
m_debug_log('mail.php::m_process_mail() ERROR code 2');
return false;
}
return true;
}
//デバッグ用ログ保存
function m_debug_log($msg, $priority = PEAR_LOG_WARNING)
{
if (!MAIL_DEBUG_LOG) return;
$log_path = OPENPNE_VAR_DIR . '/log/mail.log';
$file =& Log::singleton('file', $log_path, 'MAIL');
mb_convert_encoding($msg, 'JIS', 'auto');
$file->log($msg, $priority);
}
?>
ファイル保存時は文字コード、改行コードに注意してください。
改行コードなどの影響で実行されない場合があります。