此脚本检查Postfix邮箱文件夹上的修改日期。
问题是,我有多个位置需要检查。
文件夹 / mnt / mail1 / 包含邮件目录a,b,d,g
文件夹 / mnt / mail2 / 包含其余 c,e,f,h,........,x,z
该脚本只通过网址https://URL/index.php?email=charlie@delta.com
运行我需要脚本来检查正确的挂载点,具体取决于要检查的电子邮件地址。在上面的情况下,它应该检入/mnt/mail2/d/e/delta.com /.....
请帮忙。我对PHP一无所知。
<?php
if (isset($_REQUEST["email"])) {
$emailaddress= trim($_REQUEST["email"]);
$emailparts = explode("@",$emailaddress);
if (sizeof($emailparts) != 2) {
print "invalid-email,,,,";
exit();
}
$username = $emailparts[0];
$domain = $emailparts[1];
$basedir = "/mnt/mail1/";
$livePrefix = $basedir;
$archivePrefix = $basedir."archive/";
$livePath = $livePrefix . substr($domain,0,1) . "/" . substr($domain,1,1) . "/" . $domain . "/" . substr($username,0,1) . "/" . $username;
$archivePath = $archivePrefix . $domain ;
$liveStat = stat( $livePath . "/" . "cur");
$archStat = false;
if ( file_exists( $archivePath ) && is_dir( $archivePrefix ) ) {
$arhiveDirs = scandir($archivePath);
foreach( $arhiveDirs as $i => $fname ) {
if ( stripos( $fname , $username . "-" ) !== false ) {
$archivePath = $archivePath . "/" . $fname ;
$archStat = stat( $archivePath . "/cur" );
break;
}
}
}
$status="lost" ;
if ( $liveStat != false ) {
$status = "live" . "," . date("Y-m-d H:i:s", $liveStat['mtime'] ) . "," . sizeof( scandir($livePath . "/new") ) . "," ;
} else if ($archStat != false ) {
$status = "archived,,,";
} else {
$status = "lost,,,";
}
if ($archStat != false ) {
$status = $status . date("Y-m-d H:i:s", $archStat['mtime'] ) . "," . sizeof( scandir($archivePath . "/new") ) ;
} else {
$status = $status . "," ;
}
print $status ;
exit();
} else {
print "error,,,,";
exit();
}
?>
答案 0 :(得分:0)
无需阅读代码并了解PHP:首先,您需要从链接中获取电子邮件地址。使用正则表达式。 其次,爆炸电子邮件并获取域名(也使用正则表达式)。
$ domain =
获取域的第一个和第二个字符:$ domain [0]和$ domain [1]。
然后你应该在两个文件夹中选择两个检查。使用开关进行操作,有4种主要情况:a,b,d,g和检查其他情况的默认情况。
...顺便说一下:上面的情况不应该检查/ mnt / mail1 /文件夹吗?
答案 1 :(得分:0)
脚本包含您准备好的所有内容:
$domain = $emailparts[1];
$basedir = "/mnt/mail1/";
您只需根据$basedir
中的值更改$domain
,例如
switch ($domain[0]) {
case 'a':
case 'b':
case 'd':
case 'g':
// fall through: all the cases above reach this point
$basedir = "/mnt/mail1/";
break;
default:
// all other cases are handled here
$basedir = "/mnt/mail2/";
}
但严重的是,如果你想维护这样的脚本,你应该学习基础知识。从网上的一些随机陌生人那里复制/粘贴代码行可能很危险。特别是在Stackoverflow,这是一个Q和A站点,人们通常不愿意只编写代码