ERPNext Conference 2019* ERPNext.com Blog

New errors in email settings


#1

After one of the latest bench updates, I’ve suddenly lost email connectivity. I went to the email account settings and was going to test another account but found I couldn’t save it. When I hit save, I get:

Server Error
AttributeError: ‘error_proto’ object has no attribute 'message’

So, I just reloaded the page to abandon my changes and tried to save with the same values that were previously working and I get the same error.

If I go to Email Domain and open my domain, hit save with no changes… I get this:

Server Error
TypeError: Object of type ‘AttributeError’ is not JSON serializable

This was a previously working setup and as far as I know, nothing other than bench update has altered the system.


#2

If I make a new account and accept all defaults, it will save. However, if I check Enable Incoming, then the attribute error appears.


#3

Ok, we figured it out. Our domain transitioned to two-layer authentication which broke the email connection because it couldn’t authenticate. It’s too bad the error messages didn’t have more meaningful clues!


#4

Have you server side access to the logs to post the complete traceback?


#5

The only log info I could find that seemed to be related was in node-socketio.log:

{ Error: unable to verify the first certificate
at TLSSocket. (_tls_wrap.js:1116:38)
at emitNone (events.js:106:13)
at TLSSocket.emit (events.js:208:7)
at TLSSocket._finishInit (_tls_wrap.js:643:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:473:38) code: ‘UNABLE_TO_VERIFY_LEAF_SIGNATURE’, response: undefined }

Anyway, I have it working again but I’ll need to figure out if two-factor authentication is going to be feasible.

Update - not sure how I missed it but here’s the complete traceback:

Traceback (most recent call last):
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/error.py”, line 36, in make_error_snapshot
snapshot = get_snapshot(exception)
File “/home/frappe/frappe-bench/apps/frappe/frappe/utils/error.py”, line 131, in get_snapshot
if type(value)==str and value.startswith(b"u’"):
TypeError: startswith first arg must be str or a tuple of str, not bytes
[ERROR] 2019-09-13 10:54:50,970 | /home/frappe/frappe-bench/apps/frappe/frappe/utils/error.py:
Could not take error snapshot: startswith first arg must be str or a tuple of str, not bytes
Traceback (most recent call last):
File “/home/frappe/frappe-bench/apps/frappe/frappe/email/receive.py”, line 76, in connect_pop
self.pop.pass_(self.settings.password)
File “/usr/lib/python3.6/poplib.py”, line 213, in pass_
return self._shortcmd(‘PASS %s’ % pswd)
File “/usr/lib/python3.6/poplib.py”, line 176, in _shortcmd
return self._getresp()
File “/usr/lib/python3.6/poplib.py”, line 152, in _getresp
raise error_proto(resp)
poplib.error_proto: b’-ERR Logon failure: unknown user name or bad password.’

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/home/frappe/frappe-bench/apps/frappe/frappe/app.py”, line 60, in application
response = frappe.api.handle()
File “/home/frappe/frappe-bench/apps/frappe/frappe/api.py”, line 55, in handle
return frappe.handler.handle()
File “/home/frappe/frappe-bench/apps/frappe/frappe/handler.py”, line 21, in handle
data = execute_cmd(cmd)
File “/home/frappe/frappe-bench/apps/frappe/frappe/handler.py”, line 56, in execute_cmd
return frappe.call(method, **frappe.form_dict)
File “/home/frappe/frappe-bench/apps/frappe/frappe/init.py”, line 1036, in call
return fn(*args, **newargs)
File “/home/frappe/frappe-bench/apps/frappe/frappe/desk/form/save.py”, line 22, in savedocs
doc.save()
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 271, in save
return self._save(*args, **kwargs)
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 307, in _save
self.run_before_save_methods()
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 886, in run_before_save_methods
self.run_method(“validate”)
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 786, in run_method
out = Document.hook(fn)(self, *args, **kwargs)
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 1056, in composer
return composed(self, method, *args, **kwargs)
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 1039, in runner
add_to_return_value(self, fn(self, *args, **kwargs))
File “/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py”, line 780, in
fn = lambda self, *args, **kwargs: getattr(self, method)(*args, **kwargs)
File “/home/frappe/frappe-bench/apps/frappe/frappe/email/doctype/email_account/email_account.py”, line 68, in validate
self.get_incoming_server()
File “/home/frappe/frappe-bench/apps/frappe/frappe/email/doctype/email_account/email_account.py”, line 167, in get_incoming_server
email_server.connect()
File “/home/frappe/frappe-bench/apps/frappe/frappe/email/receive.py”, line 45, in connect
return self.connect_pop()
File “/home/frappe/frappe-bench/apps/frappe/frappe/email/receive.py”, line 90, in connect_pop
if self.is_temporary_system_problem(e):
File “/home/frappe/frappe-bench/apps/frappe/frappe/email/receive.py”, line 301, in is_temporary_system_problem
if message in strip(cstr(e.message)) or message in strip(cstr(getattr(e, ‘strerror’, ‘’))):
AttributeError: ‘error_proto’ object has no attribute ‘message’