/**
  * {@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);
 }
Exemplo n.º 2
0
 /**
  * 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;
     }
 }
Exemplo n.º 3
0
 /**
  * {@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();
 }
 /**
  * Get oauth2 access token by security code
  *
  * @param $code
  *
  * @return array
  */
 public function getAccessToken($code)
 {
     $accessToken = $this->imapEmailGoogleOauth2Manager->getAccessTokenByAuthCode($code);
     $userInfo = $this->imapEmailGoogleOauth2Manager->getUserInfo($accessToken['access_token']);
     $userInfoResponse = $userInfo->getResponse();
     if (array_key_exists('error', $userInfoResponse)) {
         $response = $userInfoResponse['error'];
     } else {
         $response = ['access_token' => $accessToken['access_token'], 'refresh_token' => $accessToken['refresh_token'], 'expires_in' => $accessToken['expires_in'], 'email_address' => $userInfo->getEmail()];
     }
     return $response;
 }
Exemplo n.º 5
0
 /**
  * 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());
 }
Exemplo n.º 6
0
 /**
  * @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);
 }