1 from email
.mime
.text
import MIMEText
2 from email
.mime
.multipart
import MIMEMultipart
3 from email
.mime
.nonmultipart
import MIMENonMultipart
4 from email
.utils
import formatdate
, formataddr
5 from email
.utils
import make_msgid
6 from email
import encoders
7 from email
.header
import Header
9 from .models
import QueuedMail
12 def _encoded_email_header(name
, email
):
14 return formataddr((str(Header(name
, 'utf-8')), email
))
18 def send_simple_mail(sender
, receiver
, subject
, msgtxt
, attachments
=None, usergenerated
=False, cc
=None, replyto
=None, sendername
=None, receivername
=None, messageid
=None):
19 # attachment format, each is a tuple of (name, mimetype,contents)
20 # content should be *binary* and not base64 encoded, since we need to
21 # use the base64 routines from the email library to get a properly
22 # formatted output message
24 msg
['Subject'] = subject
25 msg
['To'] = _encoded_email_header(receivername
, receiver
)
26 msg
['From'] = _encoded_email_header(sendername
, sender
)
30 msg
['Reply-To'] = replyto
31 msg
['Date'] = formatdate(localtime
=True)
33 msg
['Message-ID'] = messageid
35 msg
['Message-ID'] = make_msgid()
37 msg
.attach(MIMEText(msgtxt
, _charset
='utf-8'))
40 for filename
, contenttype
, content
in attachments
:
41 main
, sub
= contenttype
.split('/')
42 part
= MIMENonMultipart(main
, sub
)
43 part
.set_payload(content
)
44 part
.add_header('Content-Disposition', 'attachment; filename="%s"' % filename
)
45 encoders
.encode_base64(part
)
48 # Just write it to the queue, so it will be transactionally rolled back
49 QueuedMail(sender
=sender
, receiver
=receiver
, fullmsg
=msg
.as_string(), usergenerated
=usergenerated
).save()
51 # Write a second copy for the cc, wihch will be delivered
52 # directly to the recipient. (The sender doesn't parse the
53 # message content to extract cc fields).
54 QueuedMail(sender
=sender
, receiver
=cc
, fullmsg
=msg
.as_string(), usergenerated
=usergenerated
).save()
57 def send_mail(sender
, receiver
, fullmsg
, usergenerated
=False):
58 # Send an email, prepared as the full MIME encoded mail already
59 QueuedMail(sender
=sender
, receiver
=receiver
, fullmsg
=fullmsg
, usergenerated
=False).save()