本文整理汇总了Python中email.charset.Charset类的典型用法代码示例。如果您正苦于以下问题:Python Charset类的具体用法?Python Charset怎么用?Python Charset使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Charset类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: as_message
def as_message(self, escape_addresses=True):
# http://wordeology.com/computer/how-to-send-good-unicode-email-with-python.html
# http://stackoverflow.com/questions/31714221/how-to-send-an-email-with-quoted
# http://stackoverflow.com/questions/9403265/how-do-i-use-python/9509718#9509718
charset = Charset('utf-8')
charset.header_encoding = QP
charset.body_encoding = QP
msg = MIMEMultipart()
# Headers
unixfrom = "From %s %s" % (
self.sender.address, self.archived_date.strftime("%c"))
header_from = self.sender.address
if self.sender.name and self.sender.name != self.sender.address:
header_from = "%s <%s>" % (self.sender.name, header_from)
header_to = self.mailinglist.name
if escape_addresses:
header_from = header_from.replace("@", " at ")
header_to = header_to.replace("@", " at ")
unixfrom = unixfrom.replace("@", " at ")
msg.set_unixfrom(unixfrom)
headers = (
("From", header_from),
("To", header_to),
("Subject", self.subject),
)
for header_name, header_value in headers:
if not header_value:
continue
try:
msg[header_name] = header_value.encode('ascii')
except UnicodeEncodeError:
msg[header_name] = Header(
header_value.encode('utf-8'), charset).encode()
tz = get_fixed_timezone(self.timezone)
header_date = self.date.astimezone(tz).replace(microsecond=0)
# Date format: http://tools.ietf.org/html/rfc5322#section-3.3
msg["Date"] = header_date.strftime("%a, %d %b %Y %H:%M:%S %z")
msg["Message-ID"] = "<%s>" % self.message_id
if self.in_reply_to:
msg["In-Reply-To"] = self.in_reply_to
# Body
content = self.ADDRESS_REPLACE_RE.sub(r"\1(a)\2", self.content)
# Don't use MIMEText, it won't encode to quoted-printable
textpart = MIMENonMultipart("text", "plain", charset='utf-8')
textpart.set_payload(content, charset=charset)
msg.attach(textpart)
# Attachments
for attachment in self.attachments.order_by("counter"):
mimetype = attachment.content_type.split('/', 1)
part = MIMEBase(mimetype[0], mimetype[1])
part.set_payload(attachment.content)
encode_base64(part)
part.add_header('Content-Disposition', 'attachment',
filename=attachment.name)
msg.attach(part)
return msg
示例2: formataddr
def formataddr(pair, charset='utf-8'):
"""The inverse of parseaddr(), this takes a 2-tuple of the form
(realname, email_address) and returns the string value suitable
for an RFC 2822 From, To or Cc header.
If the first element of pair is false, then the second element is
returned unmodified.
Optional charset if given is the character set that is used to encode
realname in case realname is not ASCII safe. Can be an instance of str or
a Charset-like object which has a header_encode method. Default is
'utf-8'.
"""
name, address = pair
# The address MUST (per RFC) be ascii, so throw a UnicodeError if it isn't.
address.encode('ascii')
if name:
try:
name.encode('ascii')
except UnicodeEncodeError:
if isinstance(charset, str):
charset = Charset(charset)
encoded_name = charset.header_encode(name)
return "%s <%s>" % (encoded_name, address)
else:
quotes = ''
if specialsre.search(name):
quotes = '"'
name = escapesre.sub(r'\\\g<0>', name)
return '%s%s%s <%s>' % (quotes, name, quotes, address)
return address
示例3: format
def format(self, events, encoding="utf-8"):
parts = list()
data = templates.Template.format(self, parts, events)
parsed = message_from_string(data.encode(encoding))
charset = Charset(encoding)
charset.header_encoding = QP
msg = MIMEMultipart()
msg.set_charset(charset)
for key, value in msg.items():
del parsed[key]
for key, value in parsed.items():
msg[key] = value
for encoded in ["Subject", "Comment"]:
if encoded not in msg:
continue
value = charset.header_encode(msg[encoded])
del msg[encoded]
msg[encoded] = value
del msg["Content-Transfer-Encoding"]
msg["Content-Transfer-Encoding"] = "7bit"
msg.attach(MIMEText(parsed.get_payload(), "plain", encoding))
for part in parts:
msg.attach(part)
return msg
示例4: format
def format(self, events, encoding="utf-8"):
from email import message_from_string
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.charset import Charset, QP
from email.utils import formatdate, make_msgid
parts = list()
data = templates.Template.format(self, parts, events)
parsed = message_from_string(data.encode(encoding))
charset = Charset(encoding)
charset.header_encoding = QP
msg = MIMEMultipart()
msg.set_charset(charset)
for key, value in msg.items():
del parsed[key]
for key, value in parsed.items():
msg[key] = value
for encoded in ["Subject", "Comment"]:
if encoded not in msg:
continue
value = charset.header_encode(msg[encoded])
del msg[encoded]
msg[encoded] = value
del msg['Content-Transfer-Encoding']
msg['Content-Transfer-Encoding'] = '7bit'
msg.attach(MIMEText(parsed.get_payload(), "plain", encoding))
for part in parts:
msg.attach(part)
return msg
示例5: send
def send(self, subject, recipients, sender=None, attach=None,
html=None, text=None, template=None, **kwargs):
"""
Отправка самосборного письма.
Ссылки на картинке в статике превращаются в аттачменты. Текст правильно кодируется, чтобы
избежать багов с переносом строки в Flask-Mail
recipients - список
attach - вложения, словарь имя-путь
template - можно указать имя шаблона без расширения
"""
sender = sender or self.default_sender
if template:
html, text = render_email(template, **kwargs)
recipients_str = self._contact_list(recipients)
charset = Charset(input_charset='utf-8')
msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = charset.header_encode(subject)
msgRoot['From'] = self._contact(sender)
msgRoot['To'] = recipients_str
msgRoot.preamble = 'This is a multi-part message in MIME format.'
msgRoot.set_charset('utf-8')
msgAlternative = MIMEMultipart(_subtype='alternative')
msgAlternative.set_charset("utf-8")
msgRoot.attach(msgAlternative)
msgText = MIMEText(_text=text, _subtype='plain', _charset='utf-8')
msgAlternative.attach(msgText)
html, images = self._extract_statics(html)
self._attach_images(msgRoot, images)
if attach:
self._attach_images(msgRoot, attach)
msgHtml = MIMEText(_text=html, _subtype='html', _charset='utf-8')
msgAlternative.attach(msgHtml)
if self.mail_enabled:
with smtplib.SMTP(host=self.mail_server, port=self.mail_port) as smtp:
smtp.sendmail(
self._address(sender),
[self._address(r) for r in recipients],
msgRoot.as_string()
)
示例6: write_patch_file
def write_patch_file(filename, commit_info, diff):
"""Write patch file"""
if not diff:
gbp.log.debug("I won't generate empty diff %s" % filename)
return None
try:
with open(filename, 'wb') as patch:
msg = Message()
charset = Charset('utf-8')
charset.body_encoding = None
charset.header_encoding = QP
# Write headers
name = commit_info['author']['name']
email = commit_info['author']['email']
# Git compat: put name in quotes if special characters found
if re.search(r'[,[email protected]()\[\]\\\:;]', name):
name = '"%s"' % name
from_header = Header(header_name='from')
try:
from_header.append(name, 'us-ascii')
except UnicodeDecodeError:
from_header.append(name, charset)
from_header.append('<%s>' % email)
msg['From'] = from_header
date = commit_info['author'].datetime
datestr = date.strftime('%a, %-d %b %Y %H:%M:%S %z')
msg['Date'] = Header(datestr, 'us-ascii', 'date')
subject_header = Header(header_name='subject')
try:
subject_header.append(commit_info['subject'], 'us-ascii')
except UnicodeDecodeError:
subject_header.append(commit_info['subject'], charset)
msg['Subject'] = subject_header
# Write message body
if commit_info['body']:
# Strip extra linefeeds
body = commit_info['body'].rstrip() + '\n'
try:
msg.set_payload(body.encode('us-ascii'))
except (UnicodeEncodeError):
msg.set_payload(body, charset)
policy = Compat32(max_line_length=77)
patch.write(msg.as_bytes(unixfrom=False, policy=policy))
# Write diff
patch.write(b'---\n')
patch.write(diff)
except IOError as err:
raise GbpError('Unable to create patch file: %s' % err)
return filename
示例7: formataddr
def formataddr(pair, charset='utf-8'):
(name, address) = pair
address.encode('ascii')
if name:
try:
name.encode('ascii')
except UnicodeEncodeError:
if isinstance(charset, str):
charset = Charset(charset)
encoded_name = charset.header_encode(name)
return '%s <%s>' % (encoded_name, address)
quotes = ''
if specialsre.search(name):
quotes = '"'
name = escapesre.sub('\\\\\\g<0>', name)
return '%s%s%s <%s>' % (quotes, name, quotes, address)
return address
示例8: _mail
def _mail(self, fromaddr, to, subject, payload):
# prepare
charset = Charset("utf-8")
charset.header_encoding = QP
charset.body_encoding = QP
# create method and set headers
msg = Message()
msg.set_payload(payload.encode("utf8"))
msg.set_charset(charset)
msg['Subject'] = Header(subject, "utf8")
msg['From'] = fromaddr
msg['To'] = to
self.server.connect()
self.server.sendmail(fromaddr, [to], msg.as_string())
self.server.quit()
示例9: write_patch_file
def write_patch_file(filename, commit_info, diff):
"""Write patch file"""
if not diff:
gbp.log.debug("I won't generate empty diff %s" % filename)
return None
try:
with open(filename, "w") as patch:
msg = Message()
charset = Charset("utf-8")
charset.body_encoding = None
charset.header_encoding = QP
# Write headers
name = commit_info["author"]["name"]
email = commit_info["author"]["email"]
# Git compat: put name in quotes if special characters found
if re.search("[,[email protected]()\[\]\\\:;]", name):
name = '"%s"' % name
from_header = Header(unicode(name, "utf-8"), charset, 77, "from")
from_header.append(unicode("<%s>" % email))
msg["From"] = from_header
date = commit_info["author"].datetime
datestr = date.strftime("%a, %-d %b %Y %H:%M:%S %z")
msg["Date"] = Header(unicode(datestr, "utf-8"), charset, 77, "date")
msg["Subject"] = Header(unicode(commit_info["subject"], "utf-8"), charset, 77, "subject")
# Write message body
if commit_info["body"]:
# Strip extra linefeeds
body = commit_info["body"].rstrip() + "\n"
try:
msg.set_payload(body.encode("ascii"))
except UnicodeDecodeError:
msg.set_payload(body, charset)
patch.write(msg.as_string(unixfrom=False))
# Write diff
patch.write("---\n")
patch.write(diff)
except IOError as err:
raise GbpError("Unable to create patch file: %s" % err)
return filename
示例10: get_emails_header
def get_emails_header(self, attr):
c = Charset(self.charset)
c.header_encoding = QP
c.body_encoding = 0
r = Charset(self.charset)
r.header_encoding = 0
r.body_encoding = 0
h = Header()
self.normalize_email_list(attr)
emails = self.__getattribute__(attr)
for i in range(len(emails)):
name, email = emails[i]
if i:
h.append(',', r)
if name:
name = name.encode(self.charset, 'xmlcharrefreplace')
h.append(name, r if is7bit(name) else c)
h.append('<%s>' % email, r)
else:
h.append(email, r)
return h
示例11: __init__
def __init__(self, msg):
'''
Create a message that is fully utf-8 encoded.
msg is the original message.
'''
if not isinstance(msg, email.message.Message):
raise TypeError('msg is not a Message')
self._msg = msg
charset = msg.get_content_charset() or 'utf-8'
self._body_charset = Charset(input_charset=charset)
assert self._body_charset.header_encoding in [None, QP]
assert self._body_charset.body_encoding in [None, QP]
if not self._msg.has_key('Subject'):
self._msg.add_header('Subject', '')
示例12: set_charset
def set_charset(self, charset):
"""Set the charset of the payload to a given character set.
charset can be a Charset instance, a string naming a character set, or
None. If it is a string it will be converted to a Charset instance.
If charset is None, the charset parameter will be removed from the
Content-Type field. Anything else will generate a TypeError.
The message will be assumed to be of type text/* encoded with
charset.input_charset. It will be converted to charset.output_charset
and encoded properly, if needed, when generating the plain text
representation of the message. MIME headers (MIME-Version,
Content-Type, Content-Transfer-Encoding) will be added as needed.
"""
if charset is None:
self.del_param('charset')
self._charset = None
return
if not isinstance(charset, Charset):
charset = Charset(charset)
self._charset = charset
if 'MIME-Version' not in self:
self.add_header('MIME-Version', '1.0')
if 'Content-Type' not in self:
self.add_header('Content-Type', 'text/plain',
charset=charset.get_output_charset())
else:
self.set_param('charset', charset.get_output_charset())
if charset != charset.get_output_charset():
self._payload = charset.body_encode(self._payload)
if 'Content-Transfer-Encoding' not in self:
cte = charset.get_body_encoding()
try:
cte(self)
except TypeError:
self._payload = charset.body_encode(self._payload)
self.add_header('Content-Transfer-Encoding', cte)
示例13: __init__
def __init__(self, payload, charset='utf-8'):
MIMENonMultipart.__init__(self, 'text', 'plain', charset=charset)
utf8qp = Charset(charset)
utf8qp.body_encoding = QP
self.set_payload(payload, charset=utf8qp)
示例14: Copyright
# Functions for sending email
#
# Copyright (c) 2009 UK Citizens Online Democracy. All rights reserved.
# Email: [email protected]; WWW: http://www.mysociety.org/
#
# $Id: sendemail.py,v 1.5 2009/12/17 17:31:04 francis dead $
#
import re, smtplib
from minimock import mock, Mock
from email.message import Message
from email.header import Header
from email.utils import formataddr, make_msgid, formatdate
from email.charset import Charset, QP
charset = Charset('utf-8')
charset.body_encoding = QP
def send_email(sender, to, message, headers={}):
"""Sends MESSAGE from SENDER to TO, with HEADERS
Returns True if successful, False if not
>>> mock('smtplib.SMTP', returns=Mock('smtp_connection'))
>>> send_email("[email protected]", "[email protected]", "Hello, this is a message!", {
... 'Subject': 'Mapumental message',
... 'From': ("[email protected]", "Ms. A"),
... 'To': "[email protected]"
... }) # doctest:+ELLIPSIS
Called smtplib.SMTP('localhost')
Called smtp_connection.sendmail(
'[email protected]',
示例15: create_charset
def create_charset(mime_encoding):
"""Create an appropriate email charset for the given encoding.
Valid options are 'base64' for Base64 encoding, 'qp' for
Quoted-Printable, and 'none' for no encoding, in which case mails will
be sent as 7bit if the content is all ASCII, or 8bit otherwise.
"""
charset = Charset()
charset.input_charset = 'utf-8'
charset.output_charset = 'utf-8'
charset.input_codec = 'utf-8'
charset.output_codec = 'utf-8'
pref = mime_encoding.lower()
if pref == 'base64':
charset.header_encoding = BASE64
charset.body_encoding = BASE64
elif pref in ('qp', 'quoted-printable'):
charset.header_encoding = QP
charset.body_encoding = QP
elif pref == 'none':
charset.header_encoding = SHORTEST
charset.body_encoding = None
else:
raise TracError(_("Invalid email encoding setting: %(mime_encoding)s",
mime_encoding=mime_encoding))
return charset