Fix changed names of imports
[pgweb/local.git] / pgweb / mailqueue / util.py
blobcd5e3eec3d1d304920a944b9bd6eb09a61777b5d
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):
13 if name:
14 return formataddr((str(Header(name, 'utf-8')), email))
15 return 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
23 msg = MIMEMultipart()
24 msg['Subject'] = subject
25 msg['To'] = _encoded_email_header(receivername, receiver)
26 msg['From'] = _encoded_email_header(sendername, sender)
27 if cc:
28 msg['Cc'] = cc
29 if replyto:
30 msg['Reply-To'] = replyto
31 msg['Date'] = formatdate(localtime=True)
32 if messageid:
33 msg['Message-ID'] = messageid
34 else:
35 msg['Message-ID'] = make_msgid()
37 msg.attach(MIMEText(msgtxt, _charset='utf-8'))
39 if attachments:
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)
46 msg.attach(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()
50 if cc:
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()