Mandrill Forcefully Requiring Mailchimp Accounts

The announcement Mandrill Forcefully Requiring Mailchimp Accounts by on February 25, 2016, might be of general interest to all users of Mandrill Email services.
It seems that Mandrill only grants a 60 days grace period for the transition to a Mailchimp account or to other providers, such as Amazon SES.

1 Like

We might move to sendgrid as it allows you to send using any domain. This works out well for our cloud, as people expect emails to be sent from their own email address and not

Sadly, we might have to say goodbye to Mandrill Integration :cry:

Unless… Mandrill reverts its decision.

I’m working on SendGrid integration app. It will be based on Mandrill Integration and will provide same features for SendGrid. Hopefully, we will have working application by the end of this week.

1 Like

That’s brilliant. Thanks a lot :grinning:. That’s great timing.

@alex_melkoff would you mind to post your repository here?

@vrms I’ll post link to repository here as soon as it’s ready.

great thanks …

… but wouldn’t it be helpful to make the code available right now while you’re still at it?
That might lead to other people (not me because I can’t write code) picking up on it and help to finish.

SendGrid Integration App is now available for everybody. It can do everything that Mandrill Integration does:

  • uses event webhook to sync status of every sent message
  • unsubscribes and cleans bounced, spammed, blocked and invalid emails from
    corresponding lists with scheduled task

Feedback is appreciated.


Could this be integrated into the App Installer list?

I suppose yes, but I’m not exactly sure how to do that.

@anand: would you kindly have a look at @alex_melkoff 's SendGrid Integration App and let us know how to proceed from here?

1 Like

@limehalves thanks! will check it out. Great job :clap:

I am getting this error on installing the app:

Installing sendgrid_integration...
Updating sendgrid_integration       : [========================================]
Traceback (most recent call last):
  File "/usr/lib/python2.7/", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/", line 72, in _run_code
    exec code in run_globals
  File "/home/aditya/frappe-bench/apps/frappe/frappe/utils/", line 79, in <module>
  File "/home/aditya/frappe-bench/apps/frappe/frappe/utils/", line 16, in main
  File "/home/aditya/frappe-bench/env/local/lib/python2.7/site-packages/click/", line 664, in __call__
    return self.main(*args, **kwargs)
  File "/home/aditya/frappe-bench/env/local/lib/python2.7/site-packages/click/", line 644, in main
    rv = self.invoke(ctx)
  File "/home/aditya/frappe-bench/env/local/lib/python2.7/site-packages/click/", line 991, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/aditya/frappe-bench/env/local/lib/python2.7/site-packages/click/", line 991, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/aditya/frappe-bench/env/local/lib/python2.7/site-packages/click/", line 837, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/aditya/frappe-bench/env/local/lib/python2.7/site-packages/click/", line 464, in invoke
    return callback(*args, **kwargs)
  File "/home/aditya/frappe-bench/apps/frappe/frappe/", line 29, in _func
    ret = f(frappe._dict(ctx.obj), *args, **kwargs)
  File "/home/aditya/frappe-bench/apps/frappe/frappe/", line 163, in install_app
    _install_app(app, verbose=context.verbose)
  File "/home/aditya/frappe-bench/apps/frappe/frappe/", line 128, in install_app
  File "/home/aditya/frappe-bench/apps/frappe/frappe/", line 147, in add_to_installed_apps
  File "/home/aditya/frappe-bench/apps/frappe/frappe/", line 206, in post_install
  File "/home/aditya/frappe-bench/apps/frappe/frappe/", line 224, in init_singles
    doc = frappe.new_doc(single)
  File "/home/aditya/frappe-bench/apps/frappe/frappe/", line 509, in new_doc
    return get_new_doc(doctype, parent_doc, parentfield, as_dict=as_dict)
  File "/home/aditya/frappe-bench/apps/frappe/frappe/model/", line 19, in get_new_doc
    frappe.local.new_doc_templates[doctype] = make_new_doc(doctype)
  File "/home/aditya/frappe-bench/apps/frappe/frappe/model/", line 37, in make_new_doc
    "docstatus": 0
  File "/home/aditya/frappe-bench/apps/frappe/frappe/", line 533, in get_doc
    return frappe.model.document.get_doc(arg1, arg2)
  File "/home/aditya/frappe-bench/apps/frappe/frappe/model/", line 44, in get_doc
    controller = get_controller(doctype)
  File "/home/aditya/frappe-bench/apps/frappe/frappe/model/", line 30, in get_controller
    module = load_doctype_module(doctype, module_name)
  File "/home/aditya/frappe-bench/apps/frappe/frappe/modules/", line 64, in load_doctype_module
    doctype_python_modules[key] = frappe.get_module(get_module_name(doctype, module, prefix))
  File "/home/aditya/frappe-bench/apps/frappe/frappe/", line 598, in get_module
    return importlib.import_module(modulename)
  File "/usr/lib/python2.7/importlib/", line 37, in import_module
ImportError: No module named upload.upload

Hello @adityaduggal! Please, provide the following information:

  1. ERPNext Version
  2. Frappe Version
  3. Bench Version
  4. What actions did you perform before this error occured

This is an error from frappe-bench installer according to traceback. Did you have any issues with app installations before on your instance?

Hi @alex_melkoff,

I think the app installed fine after the 1st attempt since it did not give any error but I think the sendgrid account is not setup properly as the webhook are not configured properly…infact I have not done any webhook setting in my sendgrid account and hence the communication status is not getting updated.