mirror of
https://github.com/espocrm/espocrm.git
synced 2026-06-28 15:06:06 +00:00
emailSender usage and fixes
This commit is contained in:
@@ -57,4 +57,9 @@ class Factory
|
||||
|
||||
return $this->injectableFactory->createWith(Htmlizer::class, $with);
|
||||
}
|
||||
|
||||
public function createNoAcl() : Htmlizer
|
||||
{
|
||||
return $this->create(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,12 +113,14 @@ class Htmlizer
|
||||
$this->acl->getScopeRestrictedAttributeList($entity->getEntityType(), ['forbidden', 'internal', 'onlyAdmin'])
|
||||
);
|
||||
|
||||
$forbiddenLinkList = $this->acl->getScopeRestrictedLinkList($entity->getEntityType(), ['forbidden', 'internal', 'onlyAdmin']);
|
||||
$forbiddenLinkList = $this->acl->getScopeRestrictedLinkList(
|
||||
$entity->getEntityType(), ['forbidden', 'internal', 'onlyAdmin']
|
||||
);
|
||||
}
|
||||
|
||||
$relationList = $entity->getRelationList();
|
||||
|
||||
if (!$skipLinks && $level === 0) {
|
||||
if (!$skipLinks && $level === 0 && $this->entityManager) {
|
||||
foreach ($relationList as $relation) {
|
||||
$collection = null;
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@ use Espo\Core\Exceptions\Error;
|
||||
use Espo\Core\{
|
||||
ORM\EntityManager,
|
||||
Utils\Config,
|
||||
Mail\Sender as MailSender,
|
||||
Mail\EmailSender,
|
||||
Htmlizer\Factory as HtmlizerFactory,
|
||||
Utils\TemplateFileManager,
|
||||
};
|
||||
@@ -53,20 +53,20 @@ class Recovery
|
||||
|
||||
protected $entityManager;
|
||||
protected $config;
|
||||
protected $mailSender;
|
||||
protected $emailSender;
|
||||
protected $htmlizerFactory;
|
||||
protected $templateFileManager;
|
||||
|
||||
public function __construct(
|
||||
EntityManager $entityManager,
|
||||
Config $config,
|
||||
MailSender $mailSender,
|
||||
EmailSender $emailSender,
|
||||
HtmlizerFactory $htmlizerFactory,
|
||||
TemplateFileManager $templateFileManager
|
||||
) {
|
||||
$this->entityManager = $entityManager;
|
||||
$this->config = $config;
|
||||
$this->mailSender = $mailSender;
|
||||
$this->emailSender = $emailSender;
|
||||
$this->htmlizerFactory = $htmlizerFactory;
|
||||
$this->templateFileManager = $templateFileManager;
|
||||
}
|
||||
@@ -227,7 +227,6 @@ class Recovery
|
||||
{
|
||||
$config = $this->config;
|
||||
$em = $this->entityManager;
|
||||
$mailSender = $this->mailSender;
|
||||
$htmlizerFactory = $this->htmlizerFactory;
|
||||
|
||||
$templateFileManager = $this->templateFileManager;
|
||||
@@ -236,10 +235,12 @@ class Recovery
|
||||
|
||||
$email = $em->getEntity('Email');
|
||||
|
||||
if (!$mailSender->hasSystemSmtp() && !$config->get('internalSmtpServer')) {
|
||||
if (!$this->emailSender->hasSystemSmtp() && !$config->get('internalSmtpServer')) {
|
||||
throw new Error("Password recovery: SMTP credentials are not defined.");
|
||||
}
|
||||
|
||||
$sender = $this->emailSender->create();
|
||||
|
||||
$subjectTpl = $templateFileManager->getTemplate('passwordChangeLink', 'subject', 'User');
|
||||
$bodyTpl = $templateFileManager->getTemplate('passwordChangeLink', 'body', 'User');
|
||||
|
||||
@@ -273,10 +274,8 @@ class Recovery
|
||||
'isSystem' => true,
|
||||
]);
|
||||
|
||||
if ($mailSender->hasSystemSmtp()) {
|
||||
$mailSender->useGlobal();
|
||||
} else {
|
||||
$mailSender->useSmtp([
|
||||
if (!$this->emailAddress->hasSystemSmtp()) {
|
||||
$sender->withSmtpParams([
|
||||
'server' => $config->get('internalSmtpServer'),
|
||||
'port' => $config->get('internalSmtpPort'),
|
||||
'auth' => $config->get('internalSmtpAuth'),
|
||||
@@ -287,7 +286,7 @@ class Recovery
|
||||
]);
|
||||
}
|
||||
|
||||
$mailSender->send($email);
|
||||
$sender->send($email);
|
||||
}
|
||||
|
||||
private function fail(?string $msg = null, int $errorCode = 403)
|
||||
|
||||
@@ -29,19 +29,22 @@
|
||||
|
||||
namespace Espo\Modules\Crm\Business\Event;
|
||||
|
||||
use Laminas\Mail\Message;
|
||||
|
||||
use Espo\ORM\Entity;
|
||||
|
||||
use Espo\Core\Utils\Util;
|
||||
|
||||
use Espo\Core\{
|
||||
ORM\EntityManager,
|
||||
Mail\Sender,
|
||||
Mail\EmailSender,
|
||||
Utils\Config,
|
||||
Utils\File\Manager as FileManager,
|
||||
Utils\DateTime,
|
||||
Utils\NumberUtil,
|
||||
Utils\Language,
|
||||
Utils\TemplateFileManager,
|
||||
Htmlizer\Factory as HtmlizerFactory,
|
||||
};
|
||||
|
||||
class Invitations
|
||||
@@ -51,34 +54,37 @@ class Invitations
|
||||
protected $ics;
|
||||
|
||||
protected $entityManager;
|
||||
protected $mailSender;
|
||||
protected $emailSender;
|
||||
protected $config;
|
||||
protected $dateTime;
|
||||
protected $language;
|
||||
protected $number;
|
||||
protected $templateFileManager;
|
||||
protected $fileManager;
|
||||
protected $htmlizerFactory;
|
||||
|
||||
public function __construct(
|
||||
EntityManager $entityManager,
|
||||
?array $smtpParams,
|
||||
Sender $mailSender,
|
||||
EmailSender $emailSender,
|
||||
Config $config,
|
||||
FileManager $fileManager,
|
||||
DateTime $dateTime,
|
||||
NumberUtil $number,
|
||||
Language $language,
|
||||
TemplateFileManager $templateFileManager
|
||||
TemplateFileManager $templateFileManager,
|
||||
HtmlizerFactory $htmlizerFactory
|
||||
) {
|
||||
$this->entityManager = $entityManager;
|
||||
$this->smtpParams = $smtpParams;
|
||||
$this->mailSender = $mailSender;
|
||||
$this->emailSender = $emailSender;
|
||||
$this->config = $config;
|
||||
$this->dateTime = $dateTime;
|
||||
$this->language = $language;
|
||||
$this->number = $number;
|
||||
$this->fileManager = $fileManager;
|
||||
$this->templateFileManager = $templateFileManager;
|
||||
$this->htmlizerFactory = $htmlizerFactory;
|
||||
}
|
||||
|
||||
protected function getEntityManager()
|
||||
@@ -161,7 +167,7 @@ class Invitations
|
||||
$data['entityType'] = $this->language->translate($entity->getEntityType(), 'scopeNames');
|
||||
$data['entityTypeLowerFirst'] = Util::mbLowerCaseFirst($data['entityType']);
|
||||
|
||||
$htmlizer = new \Espo\Core\Htmlizer\Htmlizer($this->fileManager, $dateTime, $this->number, null);
|
||||
$htmlizer = $this->htmlizerFactory->createNoAcl();
|
||||
|
||||
$subject = $htmlizer->render($entity, $subjectTpl, 'invitation-email-subject-' . $entity->getEntityType(), $data, true);
|
||||
$body = $htmlizer->render($entity, $bodyTpl, 'invitation-email-body-' . $entity->getEntityType(), $data, false);
|
||||
@@ -178,24 +184,32 @@ class Invitations
|
||||
'contents' => $this->getIscContents($entity),
|
||||
]);
|
||||
|
||||
$message = new \Laminas\Mail\Message();
|
||||
$message = new Message();
|
||||
|
||||
$emailSender = $this->mailSender;
|
||||
$sender = $this->emailSender->create();
|
||||
|
||||
if ($this->smtpParams) {
|
||||
$emailSender->useSmtp($this->smtpParams);
|
||||
$sender->withSmtpParams($this->smtpParams);
|
||||
}
|
||||
$emailSender->send($email, [], $message, [$attachment]);
|
||||
|
||||
$sender
|
||||
->withMessage($message)
|
||||
->withAttachments([$attachment])
|
||||
->send($email);
|
||||
|
||||
$this->getEntityManager()->removeEntity($email);
|
||||
}
|
||||
|
||||
protected function getIscContents(Entity $entity)
|
||||
{
|
||||
$user = $entity->get('assignedUser');
|
||||
$user = $this->entityManager
|
||||
->getRepository($entity->getEntityType())
|
||||
->getRelation($entity, 'assignedUser')
|
||||
->findOne();
|
||||
|
||||
$who = '';
|
||||
$email = '';
|
||||
|
||||
if ($user) {
|
||||
$who = $user->get('name');
|
||||
$email = $user->get('emailAddress');
|
||||
|
||||
@@ -36,7 +36,7 @@ use Espo\Core\Utils\Util;
|
||||
use Espo\Core\{
|
||||
ORM\EntityManager,
|
||||
Utils\TemplateFileManager,
|
||||
Mail\Sender,
|
||||
Mail\EmailSender,
|
||||
Utils\Config,
|
||||
Htmlizer\Factory as HtmlizerFactory,
|
||||
Utils\Language,
|
||||
@@ -45,7 +45,7 @@ use Espo\Core\{
|
||||
class EmailReminder
|
||||
{
|
||||
protected $entityManager;
|
||||
protected $mailSender;
|
||||
protected $emailSender;
|
||||
protected $config;
|
||||
protected $dateTime;
|
||||
protected $templateFileManager;
|
||||
@@ -55,14 +55,14 @@ class EmailReminder
|
||||
public function __construct(
|
||||
EntityManager $entityManager,
|
||||
TemplateFileManager $templateFileManager,
|
||||
Sender $mailSender,
|
||||
EmailSender $emailSender,
|
||||
Config $config,
|
||||
HtmlizerFactory $htmlizerFactory,
|
||||
Language $language
|
||||
) {
|
||||
$this->entityManager = $entityManager;
|
||||
$this->templateFileManager = $templateFileManager;
|
||||
$this->mailSender = $mailSender;
|
||||
$this->emailSender = $emailSender;
|
||||
$this->config = $config;
|
||||
$this->language = $language;
|
||||
$this->htmlizerFactory = $htmlizerFactory;
|
||||
@@ -140,8 +140,6 @@ class EmailReminder
|
||||
$email->set('body', $body);
|
||||
$email->set('isHtml', true);
|
||||
|
||||
$emailSender = $this->mailSender;
|
||||
|
||||
$emailSender->send($email);
|
||||
$this->emailSender->send($email);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,7 +105,11 @@ class Meeting extends \Espo\Services\Record implements
|
||||
|
||||
$sentCount = 0;
|
||||
|
||||
$users = $entity->get('users');
|
||||
$users = $this->getEntityManager()
|
||||
->getRepository($entity->getEntityType())
|
||||
->getRelation($entity, 'users')
|
||||
->find();
|
||||
|
||||
foreach ($users as $user) {
|
||||
if ($user->id === $this->getUser()->id) {
|
||||
if ($entity->getLinkMultipleColumn('users', 'status', $user->id) === 'Accepted') {
|
||||
@@ -119,7 +123,11 @@ class Meeting extends \Espo\Services\Record implements
|
||||
}
|
||||
}
|
||||
|
||||
$contacts = $entity->get('contacts');
|
||||
$contacts = $this->getEntityManager()
|
||||
->getRepository($entity->getEntityType())
|
||||
->getRelation($entity, 'contacts')
|
||||
->find();
|
||||
|
||||
foreach ($contacts as $contact) {
|
||||
if ($contact->get('emailAddress') && !array_key_exists($contact->get('emailAddress'), $emailHash)) {
|
||||
$invitationManager->sendInvitation($entity, $contact, 'contacts');
|
||||
@@ -128,7 +136,11 @@ class Meeting extends \Espo\Services\Record implements
|
||||
}
|
||||
}
|
||||
|
||||
$leads = $entity->get('leads');
|
||||
$leads = $this->getEntityManager()
|
||||
->getRepository($entity->getEntityType())
|
||||
->getRelation($entity, 'leads')
|
||||
->find();
|
||||
|
||||
foreach ($leads as $lead) {
|
||||
if ($lead->get('emailAddress') && !array_key_exists($lead->get('emailAddress'), $emailHash)) {
|
||||
$invitationManager->sendInvitation($entity, $lead, 'leads');
|
||||
|
||||
@@ -152,6 +152,9 @@ class BaseEntity implements Entity
|
||||
|
||||
// @todo Remove this.
|
||||
if ($this->hasRelation($name) && $this->id && $this->entityManager) {
|
||||
$e = new \Exception();
|
||||
echo $e->getTraceAsString();
|
||||
die;
|
||||
trigger_error(
|
||||
"Accessing related records with Entity::get is deprecated. Use \$entityManager->getRelation(...)->find()",
|
||||
E_USER_DEPRECATED
|
||||
|
||||
@@ -41,16 +41,17 @@ use Espo\Core\Utils\Util;
|
||||
use Espo\Core\{
|
||||
ORM\EntityManager,
|
||||
Htmlizer\Factory as HtmlizerFactory,
|
||||
Mail\Sender,
|
||||
Utils\Config,
|
||||
Utils\Metadata,
|
||||
Utils\Language,
|
||||
Select\SelectManagerFactory,
|
||||
InjectableFactory,
|
||||
Utils\TemplateFileManager,
|
||||
Mail\Sender as MailSender,
|
||||
Mail\EmailSender as EmailSender,
|
||||
};
|
||||
|
||||
use Exception;
|
||||
|
||||
class EmailNotification
|
||||
{
|
||||
const HOURS_THERSHOLD = 5;
|
||||
@@ -61,7 +62,7 @@ class EmailNotification
|
||||
|
||||
protected $entityManager;
|
||||
protected $htmlizerFactory;
|
||||
protected $mailSender;
|
||||
protected $emailSender;
|
||||
protected $config;
|
||||
protected $selectManagerFactory;
|
||||
protected $injectableFactory;
|
||||
@@ -71,7 +72,7 @@ class EmailNotification
|
||||
public function __construct(
|
||||
EntityManager $entityManager,
|
||||
HtmlizerFactory $htmlizerFactory,
|
||||
MailSender $mailSender,
|
||||
EmailSender $emailSender,
|
||||
Config $config,
|
||||
SelectManagerFactory $selectManagerFactory,
|
||||
InjectableFactory $injectableFactory,
|
||||
@@ -81,7 +82,7 @@ class EmailNotification
|
||||
) {
|
||||
$this->entityManager = $entityManager;
|
||||
$this->htmlizerFactory = $htmlizerFactory;
|
||||
$this->mailSender = $mailSender;
|
||||
$this->emailSender = $emailSender;
|
||||
$this->config = $config;
|
||||
$this->selectManagerFactory = $selectManagerFactory;
|
||||
$this->injectableFactory = $injectableFactory;
|
||||
@@ -174,9 +175,11 @@ class EmailNotification
|
||||
'parentId' => $entity->id,
|
||||
'parentType' => $entity->getEntityType()
|
||||
]);
|
||||
|
||||
try {
|
||||
$this->mailSender->send($email);
|
||||
} catch (\Exception $e) {
|
||||
$this->emailSender->send($email);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$GLOBALS['log']->error('EmailNotification: [' . $e->getCode() . '] ' .$e->getMessage());
|
||||
}
|
||||
}
|
||||
@@ -383,8 +386,9 @@ class EmailNotification
|
||||
}
|
||||
|
||||
try {
|
||||
$this->mailSender->send($email);
|
||||
} catch (\Exception $e) {
|
||||
$this->emailSender->send($email);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$GLOBALS['log']->error('EmailNotification: [' . $e->getCode() . '] ' .$e->getMessage());
|
||||
}
|
||||
}
|
||||
@@ -503,6 +507,7 @@ class EmailNotification
|
||||
}
|
||||
|
||||
$smtpParams = null;
|
||||
|
||||
if ($parentId && $parentType && !empty($parent)) {
|
||||
$handler = $this->getEmailNotificationEntityHandler($parentType);
|
||||
if ($handler) {
|
||||
@@ -517,12 +522,16 @@ class EmailNotification
|
||||
}
|
||||
}
|
||||
|
||||
$sender = $this->emailSender->create();
|
||||
|
||||
try {
|
||||
if ($smtpParams) {
|
||||
$this->mailSender->setParams($smtpParams);
|
||||
$sender->withSmtpParams($smtpParams);
|
||||
}
|
||||
$this->mailSender->send($email);
|
||||
} catch (\Exception $e) {
|
||||
|
||||
$sender->send($email);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$GLOBALS['log']->error('EmailNotification: [' . $e->getCode() . '] ' .$e->getMessage());
|
||||
}
|
||||
}
|
||||
@@ -619,8 +628,9 @@ class EmailNotification
|
||||
]);
|
||||
|
||||
try {
|
||||
$this->mailSender->send($email);
|
||||
} catch (\Exception $e) {
|
||||
$this->emailSender->send($email);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$GLOBALS['log']->error('EmailNotification: [' . $e->getCode() . '] ' .$e->getMessage());
|
||||
}
|
||||
}
|
||||
@@ -704,7 +714,7 @@ class EmailNotification
|
||||
'body' => $body,
|
||||
'isHtml' => true,
|
||||
'to' => $emailAddress,
|
||||
'isSystem' => true
|
||||
'isSystem' => true,
|
||||
]);
|
||||
|
||||
$email->set([
|
||||
@@ -713,8 +723,9 @@ class EmailNotification
|
||||
]);
|
||||
|
||||
try {
|
||||
$this->mailSender->send($email);
|
||||
} catch (\Exception $e) {
|
||||
$this->emailSender->send($email);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
$GLOBALS['log']->error('EmailNotification: [' . $e->getCode() . '] ' .$e->getMessage());
|
||||
}
|
||||
}
|
||||
@@ -722,6 +733,7 @@ class EmailNotification
|
||||
protected function loadParentNameFields(Entity $entity)
|
||||
{
|
||||
$fieldDefs = $this->metadata->get(['entityDefs', $entity->getEntityType(), 'fields'], []);
|
||||
|
||||
foreach ($fieldDefs as $field => $defs) {
|
||||
if (isset($defs['type']) && $defs['type'] == 'linkParent') {
|
||||
$entity->loadParentNameField($field);
|
||||
|
||||
Reference in New Issue
Block a user