script updated

This commit is contained in:
Sergey Lavrinenko 2015-03-07 02:05:41 +03:00
parent 7cfd7321ba
commit 6ccade1d88
4 changed files with 43 additions and 25 deletions

View File

@ -22,10 +22,18 @@ class InvalidHtmlFile(LoadError):
pass
def from_html(html, source_filename=None, base_url=None, message_params=None, local_loader=None, **kwargs):
def from_html(html, text=None, base_url=None, message_params=None, local_loader=None,
template_cls=None, message_cls=None, source_filename=None, requests_params=None,
**kwargs):
if template_cls:
html = template_cls(html)
if template_cls and text:
text = template_cls(text)
message_params = message_params or {}
message = Message(html=html, **message_params)
message.create_transformer(requests_params=kwargs.pop('requests_params', None),
message = (message_cls or Message)(html=html, text=text, **message_params)
message.create_transformer(requests_params=requests_params,
base_url=base_url,
local_loader=local_loader)
if message.transformer.tree is None:

View File

@ -289,7 +289,6 @@ class MsgLoader(BaseLoader):
self._parsed = True
def get_file(self, name):
#print("MsgLoader.get_file", name)
self.parse()
if name.startswith('cid:'):
name = self._content_ids.get(name[4:])

View File

@ -17,7 +17,6 @@ from .backend.smtp import SMTPBackend
from .store import MemoryFileStore, BaseFile
from .signers import DKIMSigner
load_email_charsets() # sic!
@ -352,25 +351,23 @@ class MessageSendMixin(object):
class MessageTransformerMixin(object):
transformer_cls = None
_transformer = None
def create_transformer(self, **kw):
cls = self.transformer_cls
def create_transformer(self, transformer_cls=None, **kw):
cls = transformer_cls or self.transformer_cls
if cls is None:
from emails.transformer import MessageTransformer
from .transformer import MessageTransformer # avoid cyclic import
cls = MessageTransformer
self._transformer = cls(message=self, **kw)
return self._transformer
def destroy_transformer(self):
self._transformer = None
@property
def transformer(self):
t = getattr(self, '_transformer', None)
if t is None:
t = self.create_transformer()
return t
if self._transformer is None:
self.create_transformer()
return self._transformer
def set_html(self, **kw):
# When html set, remove old transformer
@ -378,7 +375,6 @@ class MessageTransformerMixin(object):
BaseMessage.set_html(self, **kw)
class MessageDKIMMixin(object):
dkim_cls = DKIMSigner

View File

@ -7,7 +7,9 @@ Simple utility that imports html from url ang print generated rfc822 message to
Example usage:
$ python make_rfc822.py --url=http://lavr.github.io/python-emails/tests/campaignmonitor-samples/sample-template/template-widgets.html \
$ python make_rfc822.py \
--url=http://lavr.github.io/python-emails/tests/campaignmonitor-samples/sample-template/template-widgets.html \
--inline-images \
--subject="Some subject" \
--from-name="Sergey Lavrinenko" \
--from-email=s@lavr.me \
@ -25,7 +27,6 @@ Copyright 2013 Sergey Lavrinenko <s@lavr.me>
import sys
import logging
import json
import argparse
import emails
@ -61,12 +62,24 @@ class MakeRFC822:
else:
message_id = None
message_params = dict(headers=self._headers_from_command_line(),
template_cls=T,
mail_from=(options.from_name, options.from_email),
subject=T(unicode(options.subject, 'utf-8')),
message_id=message_id)
message = emails.loader.from_url(url=options.url, images_inline=options.inline_images, message_params=message_params)
args = dict(images_inline=options.inline_images,
message_params=dict(headers=self._headers_from_command_line(),
mail_from=(options.from_name, options.from_email),
subject=T(unicode(options.subject, 'utf-8')),
message_id=message_id),
template_cls=T)
if options.url:
message = emails.loader.from_url(url=options.url, **args)
elif options.from_directory:
message = emails.loader.from_directory(options.from_directory, **args)
elif options.from_file:
message = emails.loader.from_file(options.from_file, **args)
elif options.from_zipfile:
message = emails.loader.from_zip(options.from_zipfile, **args)
else:
logging.error('No message source specified.')
sys.exit(1)
return message
def _send_test_email(self, message):
@ -108,7 +121,6 @@ class MakeRFC822:
except ValueError:
# If it is not json, we expect one word with '@' sign
assert len(l.split()) == 1
print l
login, domain = l.split('@') # ensure there is something email-like
yield {'to': l}
@ -144,7 +156,10 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser(
description='Imports html from url ang generate rfc822 message.')
parser.add_argument("-u", "--url", metavar="URL", dest="url", action="store", default=None, required=True)
parser.add_argument("-u", "--url", metavar="URL", dest="url", action="store", default=None)
parser.add_argument("--source-directory", dest="from_directory", action="store", default=None)
parser.add_argument("--source-file", dest="from_file", action="store", default=None)
parser.add_argument("--source-zipfile", dest="from_zipfile", action="store", default=None)
parser.add_argument("-f", "--from-email", metavar="EMAIL", dest="from_email", default=None, required=True)
parser.add_argument("-n", "--from-name", metavar="NAME", dest="from_name", default=None, required=True)