From 28e93c700954073ff465b345f415579f6f0f6928 Mon Sep 17 00:00:00 2001 From: "YSA (Openerp)" Date: Thu, 3 Feb 2011 12:49:44 +0530 Subject: [PATCH 1/4] [IMP] add smtp-server related argument in email_send method of tools. bzr revid: ysa@tinyerp.com-20110203071944-a1h78f13ot4yn6hn --- bin/tools/misc.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/bin/tools/misc.py b/bin/tools/misc.py index 615893ef238..bc0bbc13a3f 100644 --- a/bin/tools/misc.py +++ b/bin/tools/misc.py @@ -155,7 +155,7 @@ def exec_pg_command(name, *args): if not prog: raise Exception('Couldn\'t find %s' % name) args2 = (prog,) + args - + return subprocess.call(args2) def exec_pg_command_pipe(name, *args): @@ -422,7 +422,8 @@ def generate_tracking_message_id(openobject_id): """ return "<%s-openobject-%s@%s>" % (time.time(), openobject_id, socket.gethostname()) -def _email_send(smtp_from, smtp_to_list, message, openobject_id=None, ssl=False, debug=False): +def _email_send(smtp_from, smtp_to_list, message, openobject_id=None, ssl=False, debug=False, + smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None): """Low-level method to send directly a Message through the configured smtp server. :param smtp_from: RFC-822 envelope FROM (not displayed to recipient) :param smtp_to_list: RFC-822 envelope RCPT_TOs (not displayed to recipient) @@ -443,7 +444,7 @@ def _email_send(smtp_from, smtp_to_list, message, openobject_id=None, ssl=False, message['Message-Id'] = generate_tracking_message_id(openobject_id) try: - smtp_server = config['smtp_server'] + smtp_server = smtp_server or config['smtp_server'] if smtp_server.startswith('maildir:/'): from mailbox import Maildir @@ -461,14 +462,15 @@ def _email_send(smtp_from, smtp_to_list, message, openobject_id=None, ssl=False, smtplib.stderr = WriteToLogger() s.set_debuglevel(int(bool(debug))) # 0 or 1 - s.connect(smtp_server, config['smtp_port']) + s.connect(smtp_server, smtp_port or config['smtp_port']) if ssl: s.ehlo() s.starttls() s.ehlo() - - if config['smtp_user'] or config['smtp_password']: - s.login(config['smtp_user'], config['smtp_password']) + smtp_server_user = smtp_user or config['smtp_user'] + smtp_server_password = smtp_password or config['smtp_password'] + if smtp_server_user or smtp_server_password: + s.login(smtp_server_user, smtp_server_password) s.sendmail(smtp_from, smtp_to_list, message.as_string()) finally: @@ -488,7 +490,8 @@ def _email_send(smtp_from, smtp_to_list, message, openobject_id=None, ssl=False, def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, - attach=None, openobject_id=False, ssl=False, debug=False, subtype='plain', x_headers=None, priority='3'): + attach=None, openobject_id=False, debug=False, subtype='plain', x_headers=None, priority='3', + smtp_email_from=None, smtp_server=None, smtp_port=None, ssl=False, smtp_user=None, smtp_password=None): """Send an email. @@ -504,11 +507,11 @@ def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=Non x_headers = {} - if not (email_from or config['email_from']): + if not (email_from or smtp_email_from or config['email_from']): raise ValueError("Sending an email requires either providing a sender " "address or having configured one") - if not email_from: email_from = config.get('email_from', False) + if not email_from: email_from = smtp_email_from or config.get('email_from', False) email_from = ustr(email_from).encode('utf-8') if not email_cc: email_cc = [] @@ -557,7 +560,8 @@ def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=Non part.add_header('Content-Disposition', 'attachment; filename="%s"' % (fname,)) msg.attach(part) - return _email_send(email_from, flatten([email_to, email_cc, email_bcc]), msg, openobject_id=openobject_id, ssl=ssl, debug=debug) + return _email_send(email_from, flatten([email_to, email_cc, email_bcc]), msg, openobject_id=openobject_id, ssl=ssl, debug=debug, + smtp_server=smtp_server, smtp_port=smtp_port, smtp_user=smtp_user, smtp_password=smtp_password) #---------------------------------------------------------- # SMS From 8d37539d5c90f3855751246bb5247ece6db9921a Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Tue, 15 Feb 2011 11:49:22 +0530 Subject: [PATCH 2/4] [REVIEW] emails_service: remove smtp_email_from argument from email_send method bzr revid: hmo@tinyerp.com-20110215061922-i61uyl2lniv7rkbe --- openerp/tools/misc.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index a602ab4136b..48a66732d96 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -518,7 +518,7 @@ def _email_send(smtp_from, smtp_to_list, message, openobject_id=None, ssl=False, def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attach=None, openobject_id=False, debug=False, subtype='plain', x_headers=None, priority='3', - smtp_email_from=None, smtp_server=None, smtp_port=None, ssl=False, smtp_user=None, smtp_password=None): + smtp_server=None, smtp_port=None, ssl=False, smtp_user=None, smtp_password=None): """Send an email. @@ -534,11 +534,11 @@ def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=Non x_headers = {} - if not (email_from or smtp_email_from or config['email_from']): + if not (email_from or config['email_from']): raise ValueError("Sending an email requires either providing a sender " "address or having configured one") - if not email_from: email_from = smtp_email_from or config.get('email_from', False) + if not email_from: email_from = config.get('email_from', False) email_from = ustr(email_from).encode('utf-8') if not email_cc: email_cc = [] @@ -547,7 +547,6 @@ def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=Non email_body = ustr(body).encode('utf-8') email_text = MIMEText(email_body or '',_subtype=subtype,_charset='utf-8') - msg = MIMEMultipart() msg['Subject'] = Header(ustr(subject), 'utf-8') From 67f8f9194569940a974377330faf54ab7b90a649 Mon Sep 17 00:00:00 2001 From: "Harry (OpenERP)" Date: Tue, 15 Feb 2011 12:07:29 +0530 Subject: [PATCH 3/4] [REVIEW+IMP] email_service: add argument for message_id in email_send and remove argument: openoject_id into _email_send bzr revid: hmo@tinyerp.com-20110215063729-6x9gijb9zb24lk8a --- openerp/tools/misc.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index 48a66732d96..13ca39bec39 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -458,7 +458,7 @@ def connect_smtp_server(server_host, server_port, user_name=None, user_password return smtp_server -def _email_send(smtp_from, smtp_to_list, message, openobject_id=None, ssl=False, debug=False, +def _email_send(smtp_from, smtp_to_list, message, ssl=False, debug=False, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None): """Low-level method to send directly a Message through the configured smtp server. :param smtp_from: RFC-822 envelope FROM (not displayed to recipient) @@ -476,9 +476,6 @@ def _email_send(smtp_from, smtp_to_list, message, openobject_id=None, ssl=False, def write(self, s): self.logger.notifyChannel('email_send', loglevels.LOG_DEBUG, s) - if openobject_id: - message['Message-Id'] = generate_tracking_message_id(openobject_id) - try: smtp_server = smtp_server or config['smtp_server'] @@ -517,7 +514,7 @@ def _email_send(smtp_from, smtp_to_list, message, openobject_id=None, ssl=False, def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, - attach=None, openobject_id=False, debug=False, subtype='plain', x_headers=None, priority='3', + attach=None, message_id=None, openobject_id=False, debug=False, subtype='plain', x_headers=None, priority='3', smtp_server=None, smtp_port=None, ssl=False, smtp_user=None, smtp_password=None): """Send an email. @@ -549,6 +546,11 @@ def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=Non email_text = MIMEText(email_body or '',_subtype=subtype,_charset='utf-8') msg = MIMEMultipart() + if message_id: + msg['Message-Id'] = message_id + elif openobject_id: + msg['Message-Id'] = generate_tracking_message_id(openobject_id) + msg['Subject'] = Header(ustr(subject), 'utf-8') msg['From'] = email_from del msg['Reply-To'] @@ -586,7 +588,7 @@ def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=Non part.add_header('Content-Disposition', 'attachment; filename="%s"' % (fname,)) msg.attach(part) - return _email_send(email_from, flatten([email_to, email_cc, email_bcc]), msg, openobject_id=openobject_id, ssl=ssl, debug=debug, + return _email_send(email_from, flatten([email_to, email_cc, email_bcc]), msg, ssl=ssl, debug=debug, smtp_server=smtp_server, smtp_port=smtp_port, smtp_user=smtp_user, smtp_password=smtp_password) #---------------------------------------------------------- From 3723536d5dc0ee53d90cf0f94f5da1064d0a78cc Mon Sep 17 00:00:00 2001 From: "Yogesh (OpenERP)" Date: Wed, 23 Feb 2011 17:54:20 +0530 Subject: [PATCH 4/4] [IMP] add reference argument in email_send method for references of send email. bzr revid: ysa@tinyerp.com-20110223122420-p6b1z9rglae6euwf --- openerp/tools/misc.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index 13ca39bec39..39fa0bd5932 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -42,6 +42,7 @@ from email.MIMEBase import MIMEBase from email.MIMEMultipart import MIMEMultipart from email.Header import Header from email.Utils import formatdate, COMMASPACE +from email import Utils from email import Encoders from itertools import islice, izip from lxml import etree @@ -440,12 +441,12 @@ def connect_smtp_server(server_host, server_port, user_name=None, user_password smtp_server.set_debuglevel(int(bool(debug))) # 0 or 1 - + if tls: smtp_server.ehlo() smtp_server.starttls() smtp_server.ehlo() - + #smtp_server.connect(server_host, server_port) if smtp_server.has_extn('AUTH') or user_name or user_password: @@ -456,7 +457,7 @@ def connect_smtp_server(server_host, server_port, user_name=None, user_password _logger.error('Could not connect to smtp server : %s' %(error), exc_info=True) raise error return smtp_server - + def _email_send(smtp_from, smtp_to_list, message, ssl=False, debug=False, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None): @@ -489,7 +490,7 @@ def _email_send(smtp_from, smtp_to_list, message, ssl=False, debug=False, if debug: oldstderr = smtplib.stderr smtplib.stderr = WriteToLogger() - + if not ssl: ssl = config.get('smtp_ssl', False) smtp = connect_smtp_server(smtp_server, smtp_port, smtp_user, smtp_password, ssl=ssl, tls=True, debug=debug) try: @@ -514,7 +515,7 @@ def _email_send(smtp_from, smtp_to_list, message, ssl=False, debug=False, def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, - attach=None, message_id=None, openobject_id=False, debug=False, subtype='plain', x_headers=None, priority='3', + attach=None, message_id=None, references=None, openobject_id=False, debug=False, subtype='plain', x_headers=None, priority='3', smtp_server=None, smtp_port=None, ssl=False, smtp_user=None, smtp_password=None): """Send an email. @@ -546,11 +547,13 @@ def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=Non email_text = MIMEText(email_body or '',_subtype=subtype,_charset='utf-8') msg = MIMEMultipart() - if message_id: - msg['Message-Id'] = message_id - elif openobject_id: - msg['Message-Id'] = generate_tracking_message_id(openobject_id) - + if not message_id and openobject_id: + message_id = generate_tracking_message_id(openobject_id) + else: + message_id = Utils.make_msgid() + if references: + msg['references'] = references + msg['Message-Id'] = message_id msg['Subject'] = Header(ustr(subject), 'utf-8') msg['From'] = email_from del msg['Reply-To'] @@ -588,8 +591,11 @@ def email_send(email_from, email_to, subject, body, email_cc=None, email_bcc=Non part.add_header('Content-Disposition', 'attachment; filename="%s"' % (fname,)) msg.attach(part) - return _email_send(email_from, flatten([email_to, email_cc, email_bcc]), msg, ssl=ssl, debug=debug, + res = _email_send(email_from, flatten([email_to, email_cc, email_bcc]), msg, ssl=ssl, debug=debug, smtp_server=smtp_server, smtp_port=smtp_port, smtp_user=smtp_user, smtp_password=smtp_password) + if res: + return message_id + return False #---------------------------------------------------------- # SMS