mirror of
https://github.com/mailcow/mailcow-dockerized.git
synced 2026-07-29 08:03:36 +00:00
[Web] add dot stuffing for quarantine raw release
This commit is contained in:
@@ -22,7 +22,7 @@ function quarantine($_action, $_data = null) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$stmt = $pdo->prepare('SELECT `id` FROM `quarantine` LEFT OUTER JOIN `user_acl` ON `user_acl`.`username` = `rcpt`
|
$stmt = $pdo->prepare('SELECT `id` FROM `quarantine` LEFT OUTER JOIN `user_acl` ON `user_acl`.`username` = `rcpt`
|
||||||
WHERE `qhash` = :hash
|
WHERE `qhash` = :hash
|
||||||
AND user_acl.quarantine = 1
|
AND user_acl.quarantine = 1
|
||||||
AND rcpt IN (SELECT username FROM mailbox)');
|
AND rcpt IN (SELECT username FROM mailbox)');
|
||||||
$stmt->execute(array(':hash' => $hash));
|
$stmt->execute(array(':hash' => $hash));
|
||||||
@@ -65,7 +65,7 @@ function quarantine($_action, $_data = null) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$stmt = $pdo->prepare('SELECT `id` FROM `quarantine` LEFT OUTER JOIN `user_acl` ON `user_acl`.`username` = `rcpt`
|
$stmt = $pdo->prepare('SELECT `id` FROM `quarantine` LEFT OUTER JOIN `user_acl` ON `user_acl`.`username` = `rcpt`
|
||||||
WHERE `qhash` = :hash
|
WHERE `qhash` = :hash
|
||||||
AND `user_acl`.`quarantine` = 1
|
AND `user_acl`.`quarantine` = 1
|
||||||
AND `username` IN (SELECT `username` FROM `mailbox`)');
|
AND `username` IN (SELECT `username` FROM `mailbox`)');
|
||||||
$stmt->execute(array(':hash' => $hash));
|
$stmt->execute(array(':hash' => $hash));
|
||||||
@@ -170,6 +170,8 @@ function quarantine($_action, $_data = null) {
|
|||||||
}
|
}
|
||||||
elseif ($release_format == 'raw') {
|
elseif ($release_format == 'raw') {
|
||||||
$detail_row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/m', 'X-Pre-Release-Spam-Flag: $1', $detail_row['msg']);
|
$detail_row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/m', 'X-Pre-Release-Spam-Flag: $1', $detail_row['msg']);
|
||||||
|
// dot-stuffing per RFC5321 4.5.2: escape leading dots
|
||||||
|
$detail_row['msg'] = preg_replace('~^\.~m', '..', $detail_row['msg']);
|
||||||
$postfix_talk = array(
|
$postfix_talk = array(
|
||||||
array('220', 'HELO quarantine' . chr(10)),
|
array('220', 'HELO quarantine' . chr(10)),
|
||||||
array('250', 'MAIL FROM: ' . $sender . chr(10)),
|
array('250', 'MAIL FROM: ' . $sender . chr(10)),
|
||||||
@@ -180,7 +182,7 @@ function quarantine($_action, $_data = null) {
|
|||||||
array('221', '')
|
array('221', '')
|
||||||
);
|
);
|
||||||
// Thanks to https://stackoverflow.com/questions/6632399/given-an-email-as-raw-text-how-can-i-send-it-using-php
|
// Thanks to https://stackoverflow.com/questions/6632399/given-an-email-as-raw-text-how-can-i-send-it-using-php
|
||||||
$smtp_connection = fsockopen($postfix, 590, $errno, $errstr, 1);
|
$smtp_connection = fsockopen($postfix, 590, $errno, $errstr, 1);
|
||||||
if (!$smtp_connection) {
|
if (!$smtp_connection) {
|
||||||
logger(array('return' => array(
|
logger(array('return' => array(
|
||||||
array(
|
array(
|
||||||
@@ -192,7 +194,7 @@ function quarantine($_action, $_data = null) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for ($i=0; $i < count($postfix_talk); $i++) {
|
for ($i=0; $i < count($postfix_talk); $i++) {
|
||||||
$smtp_resource = fgets($smtp_connection, 256);
|
$smtp_resource = fgets($smtp_connection, 256);
|
||||||
if (substr($smtp_resource, 0, 3) !== $postfix_talk[$i][0]) {
|
if (substr($smtp_resource, 0, 3) !== $postfix_talk[$i][0]) {
|
||||||
$ret = substr($smtp_resource, 0, 3);
|
$ret = substr($smtp_resource, 0, 3);
|
||||||
$ret = (empty($ret)) ? '-' : $ret;
|
$ret = (empty($ret)) ? '-' : $ret;
|
||||||
@@ -465,17 +467,19 @@ function quarantine($_action, $_data = null) {
|
|||||||
}
|
}
|
||||||
elseif ($release_format == 'raw') {
|
elseif ($release_format == 'raw') {
|
||||||
$row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/m', 'X-Pre-Release-Spam-Flag: $1', $row['msg']);
|
$row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/m', 'X-Pre-Release-Spam-Flag: $1', $row['msg']);
|
||||||
|
// dot-stuffing per RFC5321 4.5.2: escape leading dots
|
||||||
|
$row['msg'] = preg_replace('~^\.~m', '..', $row['msg']);
|
||||||
$postfix_talk = array(
|
$postfix_talk = array(
|
||||||
array('220', 'HELO quarantine' . chr(10)),
|
array('220', 'HELO quarantine' . chr(10)),
|
||||||
array('250', 'MAIL FROM: ' . $sender . chr(10)),
|
array('250', 'MAIL FROM: ' . $sender . chr(10)),
|
||||||
array('250', 'RCPT TO: ' . $row['rcpt'] . chr(10)),
|
array('250', 'RCPT TO: ' . $row['rcpt'] . chr(10)),
|
||||||
array('250', 'DATA' . chr(10)),
|
array('250', 'DATA' . chr(10)),
|
||||||
array('354', str_replace("\n.", '', $row['msg']) . chr(10) . '.' . chr(10)),
|
array('354', $row['msg'] . chr(10) . '.' . chr(10)),
|
||||||
array('250', 'QUIT' . chr(10)),
|
array('250', 'QUIT' . chr(10)),
|
||||||
array('221', '')
|
array('221', '')
|
||||||
);
|
);
|
||||||
// Thanks to https://stackoverflow.com/questions/6632399/given-an-email-as-raw-text-how-can-i-send-it-using-php
|
// Thanks to https://stackoverflow.com/questions/6632399/given-an-email-as-raw-text-how-can-i-send-it-using-php
|
||||||
$smtp_connection = fsockopen($postfix, 590, $errno, $errstr, 1);
|
$smtp_connection = fsockopen($postfix, 590, $errno, $errstr, 1);
|
||||||
if (!$smtp_connection) {
|
if (!$smtp_connection) {
|
||||||
$_SESSION['return'][] = array(
|
$_SESSION['return'][] = array(
|
||||||
'type' => 'warning',
|
'type' => 'warning',
|
||||||
@@ -485,7 +489,7 @@ function quarantine($_action, $_data = null) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for ($i=0; $i < count($postfix_talk); $i++) {
|
for ($i=0; $i < count($postfix_talk); $i++) {
|
||||||
$smtp_resource = fgets($smtp_connection, 256);
|
$smtp_resource = fgets($smtp_connection, 256);
|
||||||
if (substr($smtp_resource, 0, 3) !== $postfix_talk[$i][0]) {
|
if (substr($smtp_resource, 0, 3) !== $postfix_talk[$i][0]) {
|
||||||
$ret = substr($smtp_resource, 0, 3);
|
$ret = substr($smtp_resource, 0, 3);
|
||||||
$ret = (empty($ret)) ? '-' : $ret;
|
$ret = (empty($ret)) ? '-' : $ret;
|
||||||
@@ -833,7 +837,7 @@ function quarantine($_action, $_data = null) {
|
|||||||
)));
|
)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
$stmt = $pdo->prepare('SELECT * FROM `quarantine` WHERE `qhash` = :hash');
|
$stmt = $pdo->prepare('SELECT * FROM `quarantine` WHERE `qhash` = :hash');
|
||||||
$stmt->execute(array(':hash' => $hash));
|
$stmt->execute(array(':hash' => $hash));
|
||||||
return $stmt->fetch(PDO::FETCH_ASSOC);
|
return $stmt->fetch(PDO::FETCH_ASSOC);
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user