Git Product home page Git Product logo

frappe / helpdesk Goto Github PK

View Code? Open in Web Editor NEW
436.0 19.0 188.0 23.28 MB

Modern, Streamlined, Free and Open Source Customer Service Software

Home Page: https://frappedesk.com/

License: GNU Affero General Public License v3.0

Python 23.32% JavaScript 4.55% HTML 1.51% Vue 64.12% CSS 0.66% Shell 0.01% TypeScript 5.83%
frappe helpdesk ticketing python javascript typescript vue3 foss issue-tracker

helpdesk's Introduction

Frappe Helpdesk Logo

Frappe Helpdesk

Modern, Streamlined, Customer Service Software

frappedesk.com


Frappe Helpdesk offers an easy setup, clean user interface, and automation tools to resolve customer issues efficiently. It is based on Frappe Framework. It lets you streamline your company's support and helps you to efficiently manage your customer queries. It can help you to,

  • Create tickets from email or help center
  • Empower customers with a comprehensive knowledge base and self-service portal
  • Automate redundant tasks like agent assignment and set up triggers to notify agents and customers based on certain events

screenshot

Installation

  1. Install and setup bench by following this guide

  2. In the bench directory, run bench start and keep it running

  3. Open another terminal in bench directory, and run these commands

    bench get-app helpdesk
    bench new-site helpdesk.test
    bench --site helpdesk.test install-app helpdesk
    bench --site helpdesk.test add-to-hosts
    

    You can now access Helpdesk at http://helpdesk.test

  4. You can also run a development server by following theses steps, in Helpdesk directory (apps/helpdesk)

    yarn
    yarn dev
    

    Development server will be now available at http://localhost:8080

Contributions and Community

There are many ways you can contribute even if you don't code:

  1. You can start by giving a star to this repository!
  2. If you find any issues, even if it is a typo, you can raise an issue to inform us.
  3. Join our Telegram group and share your thoughts.

License

GNU Affero General Public License v3.0

helpdesk's People

Contributors

akhileshdarjee avatar anandpdoshi avatar ankush avatar anuja-pawar avatar deepeshgarg007 avatar esafwan avatar fadilsid avatar harshit-30 avatar hrwx avatar kamaljohnson avatar kanchanchauhan avatar maxmorais avatar mbauskar avatar michellealva avatar nabinhait avatar nagariahussain avatar netchampfaris avatar nextchamp-saqib avatar pdvyas avatar pratu16x7 avatar rmehta avatar rohitwaghchaure avatar ruchamahabal avatar rutwikhdev avatar saurabh6790 avatar scmmishra avatar shadrak98 avatar ssiyad avatar sumitbhanushali avatar surajshetty3416 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

helpdesk's Issues

Fix Email Sync

I got the following error while synching emails:

Traceback (most recent call last):
  File "apps/frappe/frappe/utils/background_jobs.py", line 112, in execute_job
    method(**kwargs)
  File "apps/frappe/frappe/email/doctype/email_account/email_account.py", line 737, in pull_from_email_account
    email_account.receive()
  File "apps/frappe/frappe/email/doctype/email_account/email_account.py", line 459, in receive
    raise Exception(frappe.as_json(exceptions))
Exception: [
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n",
 "Traceback (most recent call last):\n  File \"apps/frappe/frappe/email/doctype/email_account/email_account.py\", line 440, in receive\n    communication.send_email(is_inbound_mail_communcation=True)\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 277, in send_email\n    input_dict = self.sendmail_input_dict(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 241, in sendmail_input_dict\n    cc = self.get_mail_cc_with_displayname(\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in get_mail_cc_with_displayname\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 95, in <listcomp>\n    return [self.get_email_with_displayname(email) for email in cc_list]\n  File \"apps/frappe/frappe/core/doctype/communication/mixins.py\", line 30, in get_email_with_displayname\n    display_name, email = parse_addr(email_address)\n  File \"apps/frappe/frappe/utils/__init__.py\", line 582, in parse_addr\n    email_list = re.findall(email_regex, email_string)\n  File \"/usr/lib/python3.8/re.py\", line 241, in findall\n    return _compile(pattern, flags).findall(string)\nTypeError: expected string or bytes-like object\n"
]

Change the Naming Series of SLA

Change the naming series of Service Level Agreement to the data available in the field Service Level.

For example,

CleanShot 2022-02-15 at 16 12 16@2x

This is the current behaviour, in the expected behaviour - it should be Default SLA

[Customer Portal] Fix the 'New Ticket' view

Please use the below wireframe to understand the aesthetics of the form, the form will be redesigned in the future.

Customer Portal - New Ticket

Map the fields to:

  1. Your Email ID -> Raised By
  2. Subject -> Subject
  3. Description -> As the first communication.

Default SLA

Make one SLA default, as soon as a new account is created - there should be one non-deletable SLA which should be applied on all of their tickets.

Remove this section when in article view

The Search section while viewing the article consumes a bit of real estate, and the actual article which is the focus of the page has to be scrolled - not a good UX.
CleanShot 2022-02-08 at 12 56 51

Fix category doctype form logic

  • When Is Group is set don't show Parent Category
  • Show Articles when Is Group is not checked
  • Show Sub Categories when Is Group is checked

Add a Author field in the Article DocType

Every Article will have an Author, the user who creates the Articles should automatically be added as an author. There is no need for Author DocType.
It should be a read-only field.

CleanShot 2022-02-08 at 13 22 46@2x

  • The user who creates the article, will be automatically tagged here.
  • Clicking on the User will redirect to Agent DocType from the frontend - backend tooling is not required.

Rename the Holiday List DocType to Workings Hours

We already have Holiday List in HR and ERPNext. To avoid future integration issues, renaming it to Working Hours makes more sense where we can define holidays as well as timings.

The timings part can be skipped for now.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.