Mercurial > kallithea
annotate rhodecode/lib/rcmail/smtp_mailer.py @ 2375:bc2d8c03c050 beta
Implemented #467 Journal logs comments on changesets
- added created/updated user action to journal
- added created/updated users group action journal
- added ip adresses to most of action_log calls to track IP changes
- rewrote action_parser to simpler and more efficient solution
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 03 Jun 2012 00:40:14 +0200 |
parents | 349a0ca30a75 |
children | 82a88013a3fd d95ef6587bca |
rev | line source |
---|---|
981
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
1 # -*- coding: utf-8 -*- |
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
2 """ |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
3 rhodecode.lib.rcmail.smtp_mailer |
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1169
diff
changeset
|
5 |
981
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
6 Simple smtp mailer used in RhodeCode |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1169
diff
changeset
|
7 |
984
ccd323bfa121
Added limit option for revision ranges
Marcin Kuzminski <marcin@python-works.com>
parents:
981
diff
changeset
|
8 :created_on: Sep 13, 2010 |
1824
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1717
diff
changeset
|
9 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com> |
1532
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
10 :license: GPLv3, see COPYING for more details. |
981
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
11 """ |
1532
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
12 # This program is free software: you can redistribute it and/or modify |
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
13 # it under the terms of the GNU General Public License as published by |
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
14 # the Free Software Foundation, either version 3 of the License, or |
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
15 # (at your option) any later version. |
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
16 # |
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
17 # This program is distributed in the hope that it will be useful, |
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
20 # GNU General Public License for more details. |
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
21 # |
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
22 # You should have received a copy of the GNU General Public License |
2afe9320d5e6
updated docstrings
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
23 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
981
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
24 |
474
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
25 import logging |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
26 import smtplib |
981
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
27 from socket import sslerror |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
28 from rhodecode.lib.rcmail.message import Message |
1307 | 29 |
1824
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1717
diff
changeset
|
30 |
474
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
31 class SmtpMailer(object): |
981
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
32 """SMTP mailer class |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1169
diff
changeset
|
33 |
1583
8e77c75bd65a
made auth type optional in constructor
Marcin Kuzminski <marcin@python-works.com>
parents:
1581
diff
changeset
|
34 mailer = SmtpMailer(mail_from, user, passwd, mail_server, smtp_auth |
1307 | 35 mail_port, ssl, tls) |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1169
diff
changeset
|
36 mailer.send(recipients, subject, body, attachment_files) |
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1169
diff
changeset
|
37 |
474
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
38 :param recipients might be a list of string or single string |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1169
diff
changeset
|
39 :param attachment_files is a dict of {filename:location} |
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1169
diff
changeset
|
40 it tries to guess the mimetype and attach the file |
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1169
diff
changeset
|
41 |
474
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
42 """ |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
43 |
1583
8e77c75bd65a
made auth type optional in constructor
Marcin Kuzminski <marcin@python-works.com>
parents:
1581
diff
changeset
|
44 def __init__(self, mail_from, user, passwd, mail_server, smtp_auth=None, |
8e77c75bd65a
made auth type optional in constructor
Marcin Kuzminski <marcin@python-works.com>
parents:
1581
diff
changeset
|
45 mail_port=None, ssl=False, tls=False, debug=False): |
689
ecc566f8b69f
fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents:
604
diff
changeset
|
46 |
474
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
47 self.mail_from = mail_from |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
48 self.mail_server = mail_server |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
49 self.mail_port = mail_port |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
50 self.user = user |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
51 self.passwd = passwd |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
52 self.ssl = ssl |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
53 self.tls = tls |
1169
f6dca275c5a8
control mailer debug with the .ini file
Marcin Kuzminski <marcin@python-works.com>
parents:
1029
diff
changeset
|
54 self.debug = debug |
1581
67377fd685be
applied smth_auth options update patch
Les Peabody <lpeabody@ccom.unh.edu>
parents:
1532
diff
changeset
|
55 self.auth = smtp_auth |
689
ecc566f8b69f
fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents:
604
diff
changeset
|
56 |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
57 def send(self, recipients=[], subject='', body='', html='', |
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
58 attachment_files=None): |
474
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
59 |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
60 if isinstance(recipients, basestring): |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
61 recipients = [recipients] |
1846
349a0ca30a75
Changed default recipients separator for mails to ', '
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
62 msg = Message(subject, recipients, body, html, self.mail_from, |
349a0ca30a75
Changed default recipients separator for mails to ', '
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
63 recipients_separator=", ") |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
64 raw_msg = msg.to_message() |
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
65 |
474
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
66 if self.ssl: |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
67 smtp_serv = smtplib.SMTP_SSL(self.mail_server, self.mail_port) |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
68 else: |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
69 smtp_serv = smtplib.SMTP(self.mail_server, self.mail_port) |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
70 |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
71 if self.tls: |
981
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
72 smtp_serv.ehlo() |
474
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
73 smtp_serv.starttls() |
689
ecc566f8b69f
fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents:
604
diff
changeset
|
74 |
ecc566f8b69f
fixes #59, notifications for user registrations + some changes to mailer
Marcin Kuzminski <marcin@python-works.com>
parents:
604
diff
changeset
|
75 if self.debug: |
474
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
76 smtp_serv.set_debuglevel(1) |
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
77 |
952
beabd452f08b
fixed ehlo command for mailing.
Marcin Kuzminski <marcin@python-works.com>
parents:
689
diff
changeset
|
78 smtp_serv.ehlo() |
1581
67377fd685be
applied smth_auth options update patch
Les Peabody <lpeabody@ccom.unh.edu>
parents:
1532
diff
changeset
|
79 if self.auth: |
67377fd685be
applied smth_auth options update patch
Les Peabody <lpeabody@ccom.unh.edu>
parents:
1532
diff
changeset
|
80 smtp_serv.esmtp_features["auth"] = self.auth |
474
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
81 |
1583
8e77c75bd65a
made auth type optional in constructor
Marcin Kuzminski <marcin@python-works.com>
parents:
1581
diff
changeset
|
82 # if server requires authorization you must provide login and password |
8e77c75bd65a
made auth type optional in constructor
Marcin Kuzminski <marcin@python-works.com>
parents:
1581
diff
changeset
|
83 # but only if we have them |
981
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
84 if self.user and self.passwd: |
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
85 smtp_serv.login(self.user, self.passwd) |
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
86 |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
87 smtp_serv.sendmail(msg.sender, msg.send_to, raw_msg.as_string()) |
474
a3d9d24acbec
Implemented password reset(forms/models/ tasks) and mailing tasks.
Marcin Kuzminski <marcin@python-works.com>
parents:
diff
changeset
|
88 logging.info('MAIL SEND TO: %s' % recipients) |
981
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
89 |
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
90 try: |
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
91 smtp_serv.quit() |
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
92 except sslerror: |
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
93 # sslerror is raised in tls connections on closing sometimes |
c45c910714e4
fixed smtp_mailer with Johan Walles suggestion, and made some patches according to
Marcin Kuzminski <marcin@python-works.com>
parents:
952
diff
changeset
|
94 pass |