ILIAS
trunk Revision v12.0_alpha-16-g3e876e53c80
◀ ilDoc Overview
ScheduledMailsCron.php
Go to the documentation of this file.
1
<?php
2
19
declare(strict_types=1);
20
21
namespace
ILIAS\Mail\Cron
;
22
23
use
ilMail
;
24
use Generator;
25
use
ilContext
;
26
use
ilObjUser
;
27
use Throwable;
28
use
ilLanguage
;
29
use DateTimeZone;
30
use
ilFormatMail
;
31
use
ilDBConstants
;
32
use
ilDBInterface
;
33
use
ilLoggerFactory
;
34
use DateTimeImmutable;
35
use
ILIAS\Cron\CronJob
;
36
use
ILIAS\Cron\Job\JobResult
;
37
use
ILIAS\Data\Clock\ClockFactory
;
38
use
ILIAS\Mail\Folder\MailFolderType
;
39
use
ILIAS\Data\Factory
as DataFactory;
40
use
ILIAS\Cron\Job\Schedule\JobScheduleType
;
41
use
MailDeliveryData
;
42
use ILIAS\Mail\Folder\OutboxDatabaseRepository;
43
use
ILIAS\Mail\Folder\OutboxRepository
;
44
use
ILIAS\Mail\Folder\MailScheduleData
;
45
46
class
ScheduledMailsCron
extends
CronJob
47
{
48
private
readonly
ilLanguage
$lng
;
49
private
readonly
ilObjUser
$user
;
50
private
bool
$init_done
=
false
;
51
private
readonly
ilMail
$mail
;
52
private
readonly
ilFormatMail
$umail
;
53
private
OutboxRepository
$outbox_repository
;
54
55
private
function
init
(): void
56
{
57
global
$DIC
;
58
59
if
(!$this->init_done) {
60
$this->
lng
= $DIC->language();
61
$this->
user
= $DIC->user();
62
$this->mail =
new
ilMail
($this->
user
->getId());
63
$this->umail =
new
ilFormatMail
($this->
user
->getId());
64
65
$this->
lng
->loadLanguageModule(
'mail'
);
66
$this->init_done =
true
;
67
$this->outbox_repository =
new
OutboxDatabaseRepository(
68
$DIC
->database(),
69
(
new
DataFactory())->clock(),
70
$this->mail
71
);
72
}
73
}
74
75
public
function
getId
(): string
76
{
77
return
'mail_scheduled_mails'
;
78
}
79
80
public
function
getTitle
(): string
81
{
82
$this->
init
();
83
84
return
$this->
lng
->txt(
'mail_cron_scheduled_mails'
);
85
}
86
87
public
function
getDescription
(): string
88
{
89
$this->
init
();
90
91
return
$this->
lng
->txt(
'mail_cron_scheduled_mails_desc'
);
92
}
93
94
public
function
hasAutoActivation
(): bool
95
{
96
return
true
;
97
}
98
99
public
function
hasFlexibleSchedule
(): bool
100
{
101
return
true
;
102
}
103
104
public
function
getDefaultScheduleType
():
JobScheduleType
105
{
106
return
JobScheduleType::DAILY;
107
}
108
109
public
function
getDefaultScheduleValue
(): ?
int
110
{
111
return
1;
112
}
113
114
public
function
run
():
JobResult
115
{
116
$this->
init
();
117
118
$job_result =
new
JobResult
();
119
$job_result->setStatus(
JobResult::STATUS_OK
);
120
121
ilLoggerFactory::getLogger
(
'mail'
)->info(
'Start sending scheduled mails from all users.'
);
122
123
$mails = $this->outbox_repository->getOutboxMails();
124
$sent_mail_ids = [];
125
foreach
($mails as
$mail
) {
127
try
{
128
$mailer = $this->umail
129
->withContextId(
ilContext::CONTEXT_CRON
);
130
131
$mailer->setSaveInSentbox(
true
);
132
133
$mailer->autoresponder()->enableAutoresponder();
134
$errors = $mailer->enqueue(
135
$mail
->getTo(),
136
$mail
->getCc(),
137
$mail
->getBcc(),
138
$mail
->getSubject(),
139
$mail
->getMessage(),
140
$mail
->getAttachments(),
141
$mail
->isUsePlaceholder()
142
);
143
144
if
(empty($errors)) {
145
$sent_mail_ids[] =
$mail
->getInternalMailId();
146
}
147
}
catch
(Throwable
$e
) {
148
$job_result->setStatus(
JobResult::STATUS_FAIL
);
149
ilLoggerFactory::getLogger
(
'mail'
)->error(
150
'Error sending scheduled mail with id '
. ((
string
) (
$mail
->getInternalMailId() ??
'unknown'
)) .
': '
.
151
$e
->getMessage() .
'\n'
.
$e
->getTraceAsString()
152
);
153
$job_result->setMessage(substr(
$e
->getMessage() .
' '
.
$e
->getTraceAsString(), 0, 4000));
154
155
return
$job_result;
156
}
157
}
158
$this->mail->deleteMails($sent_mail_ids);
159
ilLoggerFactory::getLogger
(
'mail'
)->info(
160
'Sent '
. count($sent_mail_ids) .
' scheduled mails and removed them from outbox.'
161
);
162
$job_result->setMessage(
'Processed '
. count($sent_mail_ids) .
' mails.'
);
163
164
return
$job_result;
165
}
166
}
ILIAS\Cron\CronJob
Definition:
CronJob.php:27
ILIAS\Cron\CronJob\run
run()
ILIAS\Cron\Job\JobResult
Definition:
JobResult.php:24
ILIAS\Cron\Job\JobResult\STATUS_FAIL
final const int STATUS_FAIL
Definition:
JobResult.php:30
ILIAS\Cron\Job\JobResult\STATUS_OK
final const int STATUS_OK
Definition:
JobResult.php:27
ILIAS\Data\Factory
Builds data types.
Definition:
Factory.php:36
ILIAS\Mail\Cron\ScheduledMailsCron
Definition:
ScheduledMailsCron.php:47
ILIAS\Mail\Cron\ScheduledMailsCron\hasAutoActivation
hasAutoActivation()
Is to be activated on "installation", does only work for ILIAS core cron jobs.
Definition:
ScheduledMailsCron.php:94
ILIAS\Mail\Cron\ScheduledMailsCron\init
init()
Definition:
ScheduledMailsCron.php:55
ILIAS\Mail\Cron\ScheduledMailsCron\getDefaultScheduleValue
getDefaultScheduleValue()
Definition:
ScheduledMailsCron.php:109
ILIAS\Mail\Cron\ScheduledMailsCron\getDefaultScheduleType
getDefaultScheduleType()
Definition:
ScheduledMailsCron.php:104
ILIAS\Mail\Cron\ScheduledMailsCron\$lng
readonly ilLanguage $lng
Definition:
ScheduledMailsCron.php:48
ILIAS\Mail\Cron\ScheduledMailsCron\getId
getId()
Definition:
ScheduledMailsCron.php:75
ILIAS\Mail\Cron\ScheduledMailsCron\$mail
readonly ilMail $mail
Definition:
ScheduledMailsCron.php:51
ILIAS\Mail\Cron\ScheduledMailsCron\$umail
readonly ilFormatMail $umail
Definition:
ScheduledMailsCron.php:52
ILIAS\Mail\Cron\ScheduledMailsCron\$outbox_repository
OutboxRepository $outbox_repository
Definition:
ScheduledMailsCron.php:53
ILIAS\Mail\Cron\ScheduledMailsCron\getTitle
getTitle()
Definition:
ScheduledMailsCron.php:80
ILIAS\Mail\Cron\ScheduledMailsCron\$init_done
bool $init_done
Definition:
ScheduledMailsCron.php:50
ILIAS\Mail\Cron\ScheduledMailsCron\hasFlexibleSchedule
hasFlexibleSchedule()
Definition:
ScheduledMailsCron.php:99
ILIAS\Mail\Cron\ScheduledMailsCron\getDescription
getDescription()
Definition:
ScheduledMailsCron.php:87
ILIAS\Mail\Cron\ScheduledMailsCron\$user
readonly ilObjUser $user
Definition:
ScheduledMailsCron.php:49
ILIAS\Mail\Folder\MailScheduleData
Definition:
MailScheduleData.php:27
MailDeliveryData
Definition:
MailDeliveryData.php:22
ilContext
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Definition:
class.ilContext.php:26
ilContext\CONTEXT_CRON
const CONTEXT_CRON
Definition:
class.ilContext.php:31
ilDBConstants
Class ilDBConstants.
Definition:
class.ilDBConstants.php:27
ilFormatMail
Definition:
class.ilFormatMail.php:26
ilLanguage
language handling
Definition:
class.ilLanguage.php:43
ilLoggerFactory
Logging factory.
Definition:
class.ilLoggerFactory.php:38
ilLoggerFactory\getLogger
static getLogger(string $a_component_id)
Get component logger.
Definition:
class.ilLoggerFactory.php:89
ilMail
Definition:
class.ilMail.php:31
ilObjUser
User class.
Definition:
class.ilObjUser.php:47
ILIAS\Data\Clock\ClockFactory
Definition:
ClockFactory.php:26
ILIAS\Mail\Folder\OutboxRepository
Definition:
OutboxRepository.php:27
ilDBInterface
Interface ilDBInterface.
Definition:
interface.ilDBInterface.php:30
ILIAS\Cron\Job\Schedule\JobScheduleType
JobScheduleType
Definition:
JobScheduleType.php:24
ILIAS\Mail\Cron
ILIAS\Mail\Folder\MailFolderType
MailFolderType
Definition:
MailFolderType.php:24
ILIAS\Repository\int
int(string $key)
Definition:
trait.BaseGUIRequest.php:61
ILIAS\Repository\user
user()
Definition:
trait.GlobalDICDomainServices.php:66
ILIAS\Repository\lng
lng()
Definition:
trait.GlobalDICDomainServices.php:61
Vendor\Package\$e
$e
Definition:
example_cleaned.php:49
$DIC
global $DIC
Definition:
shib_login.php:26
components
ILIAS
Mail
src
Cron
ScheduledMailsCron.php
Generated on Sun Nov 2 2025 23:02:52 for ILIAS by
1.9.4 (using
Doxyfile
)