Skip to content

Commit

Permalink
Fix using Hm_IMAP_List instead of Hm_Mailbox
Browse files Browse the repository at this point in the history
  • Loading branch information
josaphatim committed Jan 23, 2025
1 parent 38cf70b commit a134b65
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 43 deletions.
19 changes: 16 additions & 3 deletions lib/servers.php
Original file line number Diff line number Diff line change
Expand Up @@ -274,13 +274,26 @@ private static function match($server, $user, $name) {
return false;
}

private static function appendPpasswordAndUsername(array $server) {
$server['password'] = $server['pass'];
$server['username'] = $server['user'];
return $server;
}

public static function getForMailbox($id) {
$server = self::get($id, true);
if ($server) {
$server['password'] = $server['pass'];
$server['username'] = $server['user'];
return $server;
return self::appendPpasswordAndUsername($server);
}
return false;
}

public static function dumpForMailbox($id = false) {
$list = self::dump($id, true);
foreach ($list as $index => $server) {
$server = self::appendPpasswordAndUsername($server);
$list[$index] = $server;
}
return $list;
}
}
3 changes: 2 additions & 1 deletion modules/imap/handler_modules.php
Original file line number Diff line number Diff line change
Expand Up @@ -1710,7 +1710,8 @@ public function process() {
'port' => $auth_server['port'],
'tls' => $auth_server['tls'],
'user' => $auth_server['username'],
'pass' => $auth_server['password']
'pass' => $auth_server['password'],
'type' => 'imap',
);
if (! empty($auth_server['sieve_config_host'])) {
$imap_details['sieve_config_host'] = $auth_server['sieve_config_host'];
Expand Down
28 changes: 14 additions & 14 deletions modules/smtp/functions.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@ function get_reply_type($request) {
* @subpackage smtp/functions
*/
if (!hm_exists('send_scheduled_message')) {
function send_scheduled_message($handler, $imap, $folder, $msg_id, $send_now = false) {
$msg_headers = $imap->get_message_headers($folder, $msg_id);
$imap_details = $imap->get_config();
function send_scheduled_message($handler, $mailbox, $folder, $msg_id, $send_now = false) {
$msg_headers = $mailbox->get_message_headers($folder, $msg_id);
$mailbox_details = $mailbox->get_config();

try {
if (empty($msg_headers['X-Schedule'])) {
Expand All @@ -78,10 +78,10 @@ function send_scheduled_message($handler, $imap, $folder, $msg_id, $send_now = f
if (new DateTime($msg_headers['X-Schedule']) <= new DateTime() || $send_now) {
$profile = Hm_Profiles::get($msg_headers['X-Profile-ID']);
if (!$profile) {
$profiles = Hm_Profiles::search('server', $imap_details['server']);
$profiles = Hm_Profiles::search('server', $mailbox_details['server']);

if (!$profiles) {
Hm_Debug::add(sprintf('ERRCannot find profiles corresponding with IMAP server: %s', $imap_details['server']));
Hm_Debug::add(sprintf('ERRCannot find profiles corresponding with MAILBOX server: %s', $mailbox_details['server']));
return false;
}
$profile = $profiles[0];
Expand All @@ -99,14 +99,14 @@ function send_scheduled_message($handler, $imap, $folder, $msg_id, $send_now = f
}
}

$msg_content = $imap->get_message_content($folder, $msg_id, 0);
$msg_content = $mailbox->get_message_content($folder, $msg_id, 0);
$from = process_address_fld($msg_headers['From']);

$err_msg = $smtp->send_message($from[0]['email'], $recipients, $msg_content, $delivery_receipt);

if (!$err_msg) {
$imap->delete_message($folder, $msg_id, false);
save_sent_msg($handler, $imap->get_config()['id'], $imap, $imap_details, $msg_content, $msg_id, false);
$mailbox->delete_message($folder, $msg_id, false);
save_sent_msg($handler, $mailbox->get_config()['id'], $mailbox, $mailbox_details, $msg_content, $msg_id, false);
return true;
}
}
Expand All @@ -121,11 +121,11 @@ function send_scheduled_message($handler, $imap, $folder, $msg_id, $send_now = f
* @subpackage smtp/functions
*/
if (!hm_exists('reschedule_message_sending')) {
function reschedule_message_sending($handler, $imap, $msg_id, $folder, $new_date) {
function reschedule_message_sending($handler, $mailbox, $msg_id, $folder, $new_date) {
if ($new_date == 'now') {
return send_scheduled_message($handler, $imap, $folder, $msg_id, true);
return send_scheduled_message($handler, $mailbox, $folder, $msg_id, true);
}
$msg = $imap->get_message_content($folder, $msg_id, 0);
$msg = $mailbox->get_message_content($folder, $msg_id, 0);
$new_date = get_scheduled_date($new_date);
preg_match("/^X-Schedule:.*(\r?\n[ \t]+.*)*\r?\n?/im", $msg, $matches);

Expand All @@ -139,12 +139,12 @@ function reschedule_message_sending($handler, $imap, $msg_id, $folder, $new_date
$msg = rtrim($msg)."\r\n";

$schedule_folder = 'Scheduled';
if (!count($imap->get_folder_status($schedule_folder))) {
if (!count($mailbox->get_folder_status($schedule_folder))) {
return;
}
$res = false;
if ($imap->store_message($schedule_folder, $msg)) {
if ($imap->delete_message($folder, $msg_id, false)) {
if ($mailbox->store_message($schedule_folder, $msg)) {
if ($mailbox->delete_message($folder, $msg_id, false)) {
$res = true;
}
}
Expand Down
49 changes: 24 additions & 25 deletions modules/smtp/modules.php
Original file line number Diff line number Diff line change
Expand Up @@ -1566,37 +1566,36 @@ class Hm_Handler_send_scheduled_messages extends Hm_Handler_Module {
* Send delayed messages
* This should use cron
*/
public function process() {
if (!($this->module_is_supported('imap') || $this->module_is_supported('profiles'))) {
return;
}
public function process() {
if (!($this->module_is_supported('imap') || $this->module_is_supported('profiles'))) {
return;
}

$servers = Hm_IMAP_List::dump();
$scheduled_msg_count = 0;
$servers = Hm_IMAP_List::dumpForMailbox();
$scheduled_msg_count = 0;

foreach (array_keys($servers) as $server_id) {
$cache = Hm_IMAP_List::get_cache($this->cache, $server_id);
$imap = Hm_IMAP_List::connect($server_id, $cache);

if ($imap->authed()) {
$folder = 'Scheduled';
$ret = $imap->get_messages($folder, 'DATE', false, 'ALL');
foreach ($ret[1] as $msg) {
$msg_headers = $imap->get_message_headers($folder, $msg['uid']);
if (! empty($msg_headers['X-Schedule'])) {
$scheduled_msg_count++;
} else {
continue;
}
if (send_scheduled_message($this, $imap, $folder, $msg['uid'])) {
$scheduled_msg_count++;
foreach ($servers as $server_id => $config) {
$mailbox = new Hm_Mailbox($server_id, $this->user_config, $this->session, $config);
if ($mailbox && $mailbox->connect()) {
$folder = 'Scheduled';
$ret = $mailbox->get_messages($folder, 'DATE', false, 'ALL');
foreach ($ret[1] as $msg) {
$msg_headers = $mailbox->get_message_headers($folder, $msg['uid']);
if (! empty($msg_headers['X-Schedule'])) {
$scheduled_msg_count++;
} else {
continue;
}
if (send_scheduled_message($this, $mailbox, $folder, $msg['uid'])) {
$scheduled_msg_count++;
}
}
}
}
}

$this->out('scheduled_msg_count', $scheduled_msg_count);
}}
$this->out('scheduled_msg_count', $scheduled_msg_count);
}
}

/**
* Changes the schedule of the message
Expand Down

0 comments on commit a134b65

Please sign in to comment.