* Add get_source_value to utils, and use it to get value from object or dict
* GitHub connector
* fix codacy
* remove print statement
* Remove Github Connector
* Data Migration Connector
- Create new connection with boilerplate
- Add Run button in Data Migration Plan
* minor
* fix codacy
* remove pygithub
* Minor
- Remove button from form and add to custom button
- Remove is_custom field
- Add Connector Type 'Custom'
- Show New Connection button only in developer mode
* [fix] logging
- only store the name, not the whole json
* [fix] tests
* Read image file in binary mode
* Read files in binary mode
* Don't use bytestrings unnecessarily
* Correctly convert byte strings to unicode in frappe.as_unicode
* Convert content to bytes before writing to file
* DRY font-family declarations
* Add email.less, inline styles using premailer
* min-width 100% for mobile email clients
* Emails without header have default 100% width (like before)
* Include email.css for all apps
* Keep !important declarations
* Add test case for inlining css
* Ignore important rules in css
* minor
* minor refactor
* update user.py to use new sendmail api
* On-demand attachments in email
* Replace inline_images by just specifying path
* Add header flag in frappe.sendmail
* Inline images can now be attached from assets/, files/ and private/files/
* Update tests
* Fix email_account test
* inline images working, ability to use template name for emails
* Extract header into separate file
* Remove erp-logo
* minor refactor
* [minor] codacy
* fix for test
* Add test case for email body
* remove unused imports
* Add more tests for email body
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* dict.iteritems to six.iteritems(dict) for python3 compatibility
* move message_id threading to communication to work with inbox
* move message_id threading fix
* rebase fix
* reset threading to email queue but keep in communications
* move email cc to header
* [test fixes] move email cc to header
* email cc additional tests
* email cc cleanup and unsubsribe link test
* email cc permit footer based cc with expose_recipient and tests + ui