def __call__(self, resource_id: str): emails = client_datastore.unpack_emails(resource_id) domain = '' num_stored = 0 for email in emails: email_id = email['_uid'] server_datastore.store_email(email_id, email) QUEUE.enqueue({ '_version': '0.1', '_type': 'email_to_send', 'resource_id': email_id, 'container_name': server_datastore.STORAGE.container, }) num_stored += 1 domain = get_domain(email.get('from', '')) client_datastore.delete(resource_id) self.log_event(events.EMAIL_STORED_FROM_CLIENT, { 'domain': domain, 'num_emails': num_stored }) # noqa: E501 return 'OK', 200
def __call__(self, resource_id: str) -> Response: email = self._email_storage.fetch_object(resource_id) success = self._send_email(email) if not success: return 'error', 500 self.log_event(events.EMAIL_DELIVERED_FROM_CLIENT, {'domain': get_domain(email.get('from', ''))}) # noqa: E501 return 'OK', 200
def _action(self, resource_id): # type: ignore email = self._email_storage.fetch_object(resource_id) success = self._send_email(email) if not success: return 'error', 500 self.log_event(events.EMAIL_DELIVERED_FROM_CLIENT, {'domain': get_domain(email.get('from', ''))}) # noqa: E501 # yapf: disable return 'OK', 200
def __call__(self, resource_id: str): email = server_datastore.fetch_email(resource_id) email_sender.send(email) self.log_event( events.EMAIL_DELIVERED_FROM_CLIENT, {'domain': get_domain(email.get('from', ''))}) # noqa: E501 return 'OK', 200
def __call__(self, resource_id: str) -> Response: mime_email = self._raw_email_storage.fetch_text(resource_id) email = self._email_parser(mime_email) self._store_inbound_email(resource_id, email) self._raw_email_storage.delete(resource_id) self.log_event(events.EMAIL_STORED_FOR_CLIENT, {'domain': get_domain(email.get('from') or '')}) # noqa: E501 return 'OK', 200
def _action(self, resource_id): # type: ignore email = self._email_storage.fetch_object(resource_id) for email_address in self._get_pivot(email): domain = get_domain(email_address) desc_prefix = descending_timestamp(email['sent_at']) if domain.endswith(mailbox.MAILBOX_DOMAIN): index = f"{domain}/{email_address}/{self._folder}/{desc_prefix}/{resource_id}" self._mailbox_storage.store_text(index, 'indexed') self.log_event(events.MAILBOX_EMAIL_INDEXED, {'folder': self._folder}) # noqa: E501 # yapf: disable return 'OK', 200
def _store_users(self, resource_id): users = self._client_storage.fetch_objects(resource_id, (sync.USERS_FILE, from_jsonl_bytes)) domain = '' num_stored = 0 for user in users: email = user['email'] domain = get_domain(email) self._user_storage.store_object(f'{domain}/{email}', user) num_stored += 1 self.log_event(events.USER_STORED_FROM_CLIENT, {'domain': domain, 'num_users': num_stored}) # noqa: E501 # yapf: disable
def __call__(self, resource_id: str): mime_email = email_receive.STORAGE.fetch_text(resource_id) email = parse_mime_email(mime_email) email = format_attachments(email) email = format_inline_images(email) server_datastore.store_email(resource_id, email) email_receive.STORAGE.delete(resource_id) self.log_event( events.EMAIL_STORED_FOR_CLIENT, {'domain': get_domain(email.get('from', ''))}) # noqa: E501 return 'OK', 200
def _action(self, resource_id): # type: ignore try: mime_email = self._raw_email_storage.fetch_text(resource_id) except ObjectDoesNotExistError: self.log_warning('Inbound email %s does not exist', resource_id) return 'skipped', 202 email = self._email_parser(mime_email) self._store_inbound_email(email) self._raw_email_storage.delete(resource_id) self.log_event(events.EMAIL_STORED_FOR_CLIENT, {'domain': get_domain(email.get('from') or '')}) # noqa: E501 # yapf: disable return 'OK', 200
def _iter_mailbox(self, email_address: str, page: int, folder: str) -> Iterable[dict]: domain = get_domain(email_address) emails = self._mailbox_storage.iter( f'{domain}/{email_address}/{folder}') for i, resource_ids in enumerate(chunks(emails, AppConfig.EMAILS_PER_PAGE), start=1): if i != page: continue for resource_id in resource_ids: email_id = resource_id.split('/')[-1] email = self.get(email_id) if email: yield email
def _create(self, emails_or_attachments: Iterable[dict]): for email in emails_or_attachments: if email.get('_type') == 'attachment': raise NotImplementedError domain = get_domain(email.get('from', '')) if not domain.endswith(mailbox.MAILBOX_DOMAIN): continue ensure_has_sent_at(email) email.pop('csrf_token', None) email_id = email['_uid'] self._email_storage.store_object(email_id, email) self._pending_storage.store_text(f'{domain}/{email_id}', 'pending') self._send_email(email_id)
def _store_emails(self, resource_id): emails = self._client_storage.fetch_objects(resource_id, (sync.EMAILS_FILE, from_jsonl_bytes)) domain = '' num_stored = 0 for email in emails: email_id = email['_uid'] email = self._decode_attachments(email) self._email_storage.store_object(email_id, email) self._next_task(email_id) num_stored += 1 domain = get_domain(email.get('from', '')) self.log_event(events.EMAIL_STORED_FROM_CLIENT, {'domain': domain, 'num_emails': num_stored}) # noqa: E501 # yapf: disable
def _delete(self, email_address: str, uids: Iterable[str]): domain = get_domain(email_address) for uid in uids: email = self.get(uid) if not email: continue if email_address == email.get('from'): folder = mailbox.SENT_FOLDER elif email_address in get_recipients(email): folder = mailbox.RECEIVED_FOLDER else: continue desc_prefix = descending_timestamp(email['sent_at']) self._mailbox_storage.delete( f"{domain}/{email_address}/{folder}/{desc_prefix}/{uid}")
def __call__(self, resource_id: str) -> Response: emails = self._client_storage.fetch_objects( resource_id, sync.EMAILS_FILE) domain = '' num_stored = 0 for email in emails: email_id = email['_uid'] self._email_storage.store_object(email_id, email) self._next_task(email_id) num_stored += 1 domain = get_domain(email.get('from', '')) self._client_storage.delete(resource_id) self.log_event(events.EMAIL_STORED_FROM_CLIENT, {'domain': domain, 'num_emails': num_stored}) # noqa: E501 return 'OK', 200
def _get_pivot(self, email: dict) -> Iterable[str]: for email_address in get_recipients(email): domain = get_domain(email_address) if domain.endswith(mailbox.MAILBOX_DOMAIN): yield email_address