Этот скрипт проверяет измененную дату в папке почтового ящика Postfix.
Проблема в том, что у меня есть несколько мест, которые нужно проверить.
Папка /mnt/mail1/ содержит почту dirs a, b, d, g
Папка /mnt/mail2/ содержит остальные c, e, f, h,........, x, z
Скрипт запускается просто через URL https://URL/index.php? [email protected]
Мне нужен скрипт для проверки правильной точки монтирования в зависимости от проверяемого адреса электронной почты. В вышеприведенном случае он должен проверить /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();
}
?>
в скрипте есть все, что вам нужно:
$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, люди обычно не хотят просто писать код
Не читая код и не зная много о php: во-первых, вам нужно получить адрес электронной почты из ссылки. Для этого используйте regex. Во-вторых, взорвите письмо и получите домен (также с регулярным выражением).
$ domain =
Получите первый и второй символы домена: $ domain [0] и $ domain [1].
Затем вы должны выбрать между двумя папками две проверки. Сделайте это с помощью переключателя с четырьмя основными случаями: a, b, d, g и случай по умолчанию, который проверяет остальные.
... кстати: не следует ли в этом случае проверить папку /mnt/mail1/?