diff --git a/emails/testsuite/transformer/test_transformer.py b/emails/testsuite/transformer/test_transformer.py
index 5e82202..be3c4dd 100644
--- a/emails/testsuite/transformer/test_transformer.py
+++ b/emails/testsuite/transformer/test_transformer.py
@@ -66,6 +66,32 @@ def test_tag_attribute():
assert m3.attachments['1.jpg'].content_disposition == "inline"
+def test_data_uri_preserved():
+ DATA_URI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
+
+ # data URIs in img src should be left untouched
+ html = '
' % DATA_URI
+ m = emails.loader.from_string(html=html)
+ assert len(m.attachments.keys()) == 0
+ assert DATA_URI in m.html
+
+ # data URIs in css url() should be left untouched
+ html = '
x
' % DATA_URI
+ m = emails.loader.from_string(html=html)
+ assert len(m.attachments.keys()) == 0
+
+ # data URIs in background attribute should be left untouched
+ html = '' % DATA_URI
+ m = emails.loader.from_string(html=html)
+ assert len(m.attachments.keys()) == 0
+
+ # mixed-case scheme should also be preserved
+ mixed = DATA_URI.replace('data:', 'Data:')
+ html = '
' % mixed
+ m = emails.loader.from_string(html=html)
+ assert len(m.attachments.keys()) == 0
+
+
ROOT = os.path.dirname(__file__)
def test_local_premailer():
diff --git a/emails/transformer.py b/emails/transformer.py
index 3e1c299..21d6e20 100644
--- a/emails/transformer.py
+++ b/emails/transformer.py
@@ -242,6 +242,9 @@ def _load_attachment_func(self, uri, element=None, callback=None, **kw):
# Return local uri
#
+ if uri[:5].lower() == 'data:':
+ return uri
+
if callback is None:
# Default callback: skip images with data-emails="ignore" attribute
callback = lambda _, hints: hints['attrib'] != 'ignore'