annotate rhodecode/lib/rcmail/message.py @ 3181:efe23d6c178c rhodecode-0.0.1.5.2

merged with beta
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 21 Jan 2013 00:49:59 +0100
parents d95ef6587bca
children 7e5f8c12a3fc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
1 from rhodecode.lib.rcmail.response import MailResponse
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
2
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
3 from rhodecode.lib.rcmail.exceptions import BadHeaders
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
4 from rhodecode.lib.rcmail.exceptions import InvalidMessage
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
5
2452
d95ef6587bca fixes #481 rhodecode emails are sent without Date header
Marcin Kuzminski <marcin@python-works.com>
parents: 1904
diff changeset
6
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
7 class Attachment(object):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
8 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
9 Encapsulates file attachment information.
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
10
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
11 :param filename: filename of attachment
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
12 :param content_type: file mimetype
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
13 :param data: the raw file data, either as string or file obj
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
14 :param disposition: content-disposition (if any)
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
15 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
16
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
17 def __init__(self,
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
18 filename=None,
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
19 content_type=None,
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
20 data=None,
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
21 disposition=None):
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
22
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
23 self.filename = filename
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
24 self.content_type = content_type
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
25 self.disposition = disposition or 'attachment'
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
26 self._data = data
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
27
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
28 @property
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
29 def data(self):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
30 if isinstance(self._data, basestring):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
31 return self._data
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
32 self._data = self._data.read()
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
33 return self._data
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
34
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
35
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
36 class Message(object):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
37 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
38 Encapsulates an email message.
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
39
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
40 :param subject: email subject header
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
41 :param recipients: list of email addresses
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
42 :param body: plain text message
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
43 :param html: HTML message
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
44 :param sender: email sender address
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
45 :param cc: CC list
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
46 :param bcc: BCC list
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
47 :param extra_headers: dict of extra email headers
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
48 :param attachments: list of Attachment instances
1846
349a0ca30a75 Changed default recipients separator for mails to ', '
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
49 :param recipients_separator: alternative separator for any of
349a0ca30a75 Changed default recipients separator for mails to ', '
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
50 'From', 'To', 'Delivered-To', 'Cc', 'Bcc' fields
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
51 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
52
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
53 def __init__(self,
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
54 subject=None,
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
55 recipients=None,
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
56 body=None,
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
57 html=None,
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
58 sender=None,
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
59 cc=None,
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
60 bcc=None,
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
61 extra_headers=None,
1846
349a0ca30a75 Changed default recipients separator for mails to ', '
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
62 attachments=None,
349a0ca30a75 Changed default recipients separator for mails to ', '
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
63 recipients_separator="; "):
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
64
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
65 self.subject = subject or ''
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
66 self.sender = sender
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
67 self.body = body
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
68 self.html = html
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
69
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
70 self.recipients = recipients or []
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
71 self.attachments = attachments or []
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
72 self.cc = cc or []
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
73 self.bcc = bcc or []
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
74 self.extra_headers = extra_headers or {}
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
75
1846
349a0ca30a75 Changed default recipients separator for mails to ', '
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
76 self.recipients_separator = recipients_separator
349a0ca30a75 Changed default recipients separator for mails to ', '
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
77
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
78 @property
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
79 def send_to(self):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
80 return set(self.recipients) | set(self.bcc or ()) | set(self.cc or ())
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
81
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
82 def to_message(self):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
83 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
84 Returns raw email.Message instance.Validates message first.
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
85 """
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
86
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
87 self.validate()
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
88
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
89 return self.get_response().to_message()
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
90
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
91 def get_response(self):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
92 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
93 Creates a Lamson MailResponse instance
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
94 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
95
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
96 response = MailResponse(Subject=self.subject,
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
97 To=self.recipients,
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
98 From=self.sender,
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
99 Body=self.body,
1846
349a0ca30a75 Changed default recipients separator for mails to ', '
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
100 Html=self.html,
349a0ca30a75 Changed default recipients separator for mails to ', '
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
101 separator=self.recipients_separator)
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
102
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
103 if self.cc:
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
104 response.base['Cc'] = self.cc
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
105
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
106 for attachment in self.attachments:
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
107
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
108 response.attach(attachment.filename,
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
109 attachment.content_type,
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
110 attachment.data,
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
111 attachment.disposition)
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
112
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
113 response.update(self.extra_headers)
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
114
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
115 return response
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
116
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
117 def is_bad_headers(self):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
118 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
119 Checks for bad headers i.e. newlines in subject, sender or recipients.
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
120 """
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
121
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
122 headers = [self.subject, self.sender]
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
123 headers += list(self.send_to)
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
124 headers += self.extra_headers.values()
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
125
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
126 for val in headers:
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
127 for c in '\r\n':
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
128 if c in val:
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
129 return True
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
130 return False
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
131
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
132 def validate(self):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
133 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
134 Checks if message is valid and raises appropriate exception.
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
135 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
136
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
137 if not self.recipients:
2452
d95ef6587bca fixes #481 rhodecode emails are sent without Date header
Marcin Kuzminski <marcin@python-works.com>
parents: 1904
diff changeset
138 raise InvalidMessage("No recipients have been added")
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
139
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
140 if not self.body and not self.html:
2452
d95ef6587bca fixes #481 rhodecode emails are sent without Date header
Marcin Kuzminski <marcin@python-works.com>
parents: 1904
diff changeset
141 raise InvalidMessage("No body has been set")
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
142
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
143 if not self.sender:
2452
d95ef6587bca fixes #481 rhodecode emails are sent without Date header
Marcin Kuzminski <marcin@python-works.com>
parents: 1904
diff changeset
144 raise InvalidMessage("No sender address has been set")
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
145
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
146 if self.is_bad_headers():
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
147 raise BadHeaders
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
148
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
149 def add_recipient(self, recipient):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
150 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
151 Adds another recipient to the message.
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
152
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
153 :param recipient: email address of recipient.
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
154 """
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
155
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
156 self.recipients.append(recipient)
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
157
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
158 def add_cc(self, recipient):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
159 """
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
160 Adds an email address to the CC list.
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
161
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
162 :param recipient: email address of recipient.
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
163 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
164
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
165 self.cc.append(recipient)
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
166
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
167 def add_bcc(self, recipient):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
168 """
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1717
diff changeset
169 Adds an email address to the BCC list.
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
170
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
171 :param recipient: email address of recipient.
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
172 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
173
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
174 self.bcc.append(recipient)
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
175
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
176 def attach(self, attachment):
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
177 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
178 Adds an attachment to the message.
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
179
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
180 :param attachment: an **Attachment** instance.
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
181 """
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
182
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
183 self.attachments.append(attachment)