/** * {@inheritdoc} */ public function select(EmailFolder $folder, OroEntityManager $em) { /** @var UserEmailOrigin $origin */ $origin = $folder->getOrigin(); $config = new ImapConfig($origin->getImapHost(), $origin->getImapPort(), $origin->getImapEncryption(), $origin->getUser(), $this->encryptor->decryptData($origin->getPassword()), $this->imapEmailGoogleOauth2Manager->getAccessTokenWithCheckingExpiration($origin)); return new ImapEmailFlagManager($this->connectorFactory->createImapConnector($config), $em); }
/** * Set SmtpTransport instance or create a new if default mailer transport is not smtp * * @param UserEmailOrigin $userEmailOrigin */ public function prepareSmtpTransport($userEmailOrigin) { if (!$this->smtpTransport) { $username = $userEmailOrigin->getUser(); /** @var Mcrypt $encoder */ $encoder = $this->container->get('oro_security.encoder.mcrypt'); $password = $encoder->decryptData($userEmailOrigin->getPassword()); $host = $userEmailOrigin->getSmtpHost(); $port = $userEmailOrigin->getSmtpPort(); $security = $userEmailOrigin->getSmtpEncryption(); $accessToken = $this->imapEmailGoogleOauth2Manager->getAccessTokenWithCheckingExpiration($userEmailOrigin); $transport = $this->getTransport(); if ($transport instanceof \Swift_SmtpTransport || $transport instanceof \Swift_Transport_EsmtpTransport) { $transport->setHost($host); $transport->setPort($port); $transport->setEncryption($security); } else { $transport = \Swift_SmtpTransport::newInstance($host, $port, $security); } $transport->setUsername($username); if ($accessToken === null) { $transport->setPassword($password); } else { $transport->setAuthMode('XOAUTH2'); $transport->setPassword($accessToken); } $this->smtpTransport = $transport; } }
/** * {@inheritdoc} */ public function loadEmailBody(EmailFolder $folder, Email $email, EntityManager $em) { /** @var UserEmailOrigin $origin */ $origin = $folder->getOrigin(); $config = new ImapConfig($origin->getImapHost(), $origin->getImapPort(), $origin->getImapEncryption(), $origin->getUser(), $this->encryptor->decryptData($origin->getPassword()), $this->imapEmailGoogleOauth2Manager->getAccessTokenWithCheckingExpiration($origin)); $manager = new ImapEmailManager($this->connectorFactory->createImapConnector($config)); $manager->selectFolder($folder->getFullName()); $repo = $em->getRepository('OroImapBundle:ImapEmail'); $query = $repo->createQueryBuilder('e')->select('e.uid')->innerJoin('e.imapFolder', 'if')->where('e.email = ?1 AND if.folder = ?2')->setParameter(1, $email)->setParameter(2, $folder)->getQuery(); $loadedEmail = $manager->findEmail($query->getSingleScalarResult()); if (null === $loadedEmail) { throw new EmailBodyNotFoundException($email); } $builder = new EmailBodyBuilder(); $builder->setEmailBody($loadedEmail->getBody()->getContent(), $loadedEmail->getBody()->getBodyIsText()); foreach ($loadedEmail->getAttachments() as $attachment) { $builder->addEmailAttachment($attachment->getFileName(), $attachment->getContent(), $attachment->getContentType(), $attachment->getContentTransferEncoding(), $attachment->getContentId()); } return $builder->getEmailBody(); }
/** * Creates a processor is used to synchronize emails * * @param UserEmailOrigin $origin * @return ImapEmailSynchronizationProcessor */ protected function createSynchronizationProcessor($origin) { $config = new ImapConfig($origin->getImapHost(), $origin->getImapPort(), $origin->getImapEncryption(), $origin->getUser(), $this->encryptor->decryptData($origin->getPassword()), $this->imapEmailGoogleOauth2Manager->getAccessTokenWithCheckingExpiration($origin)); return $this->syncProcessorFactory->create(new ImapEmailManager($this->connectorFactory->createImapConnector($config)), $this->getKnownEmailAddressChecker()); }
/** * @param UserEmailOrigin $origin * * @return ImapEmailFolderManager */ protected function createManager(UserEmailOrigin $origin) { $config = new ImapConfig($origin->getImapHost(), $origin->getImapPort(), $origin->getImapEncryption(), $origin->getUser(), $this->mcrypt->decryptData($origin->getPassword()), $this->imapEmailGoogleOauth2Manager->getAccessTokenWithCheckingExpiration($origin)); $connector = $this->connectorFactory->createImapConnector($config); return new ImapEmailFolderManager($connector, $this->doctrine->getManager(), $origin); }