Merge pull request #5903 from rmehta/codingCoffee-strict_email

[email] smtp connection per sender
This commit is contained in:
Ameya Shenoy 2018-08-01 11:40:34 +05:30 committed by GitHub
commit 9bc18213a4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -2,7 +2,6 @@
# MIT License. See license.txt
from __future__ import unicode_literals
from six.moves import range
import frappe
from six.moves import html_parser as HTMLParser
import smtplib, quopri, json
@ -332,7 +331,6 @@ def return_unsubscribed_page(email, doctype, name):
def flush(from_test=False):
"""flush email queue, every time: called from scheduler"""
# additional check
cache = frappe.cache()
check_email_limit([])
auto_commit = not from_test
@ -340,28 +338,27 @@ def flush(from_test=False):
msgprint(_("Emails are muted"))
from_test = True
smtpserver = SMTPServer()
smtpserver_dict = frappe._dict()
make_cache_queue()
for i in range(cache.llen('cache_email_queue')):
email = cache.lpop('cache_email_queue')
for email in get_queue():
if cint(frappe.defaults.get_defaults().get("hold_queue"))==1:
break
if email:
send_one(email, smtpserver, auto_commit, from_test=from_test)
if email.name:
smtpserver = smtpserver_dict.get(email.sender)
if not smtpserver:
smtpserver = SMTPServer()
smtpserver_dict[email.sender] = smtpserver
send_one(email.name, smtpserver, auto_commit, from_test=from_test)
# NOTE: removing commit here because we pass auto_commit
# finally:
# frappe.db.commit()
def make_cache_queue():
'''cache values in queue before sendign'''
cache = frappe.cache()
emails = frappe.db.sql('''select
name
def get_queue():
return frappe.db.sql('''select
name, sender
from
`tabEmail Queue`
where
@ -369,12 +366,8 @@ def make_cache_queue():
(send_after is null or send_after < %(now)s)
order
by priority desc, creation asc
limit 500''', { 'now': now_datetime() })
limit 500''', { 'now': now_datetime() }, as_dict=True)
# reset value
cache.delete_value('cache_email_queue')
for e in emails:
cache.rpush('cache_email_queue', e[0])
def send_one(email, smtpserver=None, auto_commit=True, now=False, from_test=False):
'''Send Email Queue with given smtpserver'''