emailSender usage and fixes

This commit is contained in:
Yuri Kuznetsov
2020-09-04 15:35:09 +03:00
parent 396ce79d22
commit 7645fa4e90
8 changed files with 96 additions and 51 deletions

View File

@@ -57,4 +57,9 @@ class Factory
return $this->injectableFactory->createWith(Htmlizer::class, $with);
}
public function createNoAcl() : Htmlizer
{
return $this->create(true);
}
}

View File

@@ -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;

View File

@@ -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)

View File

@@ -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');

View File

@@ -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);
}
}

View File

@@ -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');

View File

@@ -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

View File

@@ -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);