我有以下功能(Django)发出邀请:
def send_invitation(self, request):
t = loader.get_template('email/invitation.html')
html_content = t.render(Context(context))
message = EmailMessage('Hi there', html_content, 'to@some.com',
[self.profile_email],
headers={'Reply-To': 'Online <online@online.nl>'})
message.content_subtype = 'html'
localize_html_email_images(message)
message.send()
我正在使用一个功能来替换本地提供的附加图像和附加图像。
def localize_html_email_images(message):
import re, os.path
from django.conf import settings
image_pattern = """<IMG\s*.*src=['"](?P<img_src>%s[^'"]*)['"].*\/>""" % settings.STATIC_URL
image_matches = re.findall(image_pattern, message.body)
added_images = {}
for image_match in image_matches:
if image_match not in added_images:
img_content_cid = id_generator()
on_disk_path = os.path.join(settings.STATIC_ROOT, image_match.replace(settings.STATIC_URL, ''))
img_data = open(on_disk_path, 'r').read()
img = MIMEImage(img_data)
img.add_header('Content-ID', '<%s>' % img_content_cid)
img.add_header('Content-Disposition', 'inline')
message.attach(img)
added_images[image_match] = img_content_cid
def repl(matchobj):
x = matchobj.group('img_src')
y = 'cid:%s' % str(added_images[matchobj.group('img_src')])
return matchobj.group(0).replace(x, y)
if added_images:
message.body = re.sub(image_pattern, repl, message.body)
一切都很完美。但不知何故,Gmail并没有立即显示图像,而Hotmail和Outlook也是如此。
当我检查电子邮件的来源时,它会添加正确的标题:
Content-Type: multipart/mixed; boundary="===============1839307569=="
#stuff
<IMG style="DISPLAY: block" border=0 alt="" src="cid:A023ZF" width=600 height=20 />
#stuff
Content-Type: image/jpeg
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-ID: <A023ZF>
Content-Disposition: inline
如果像打开Hotmail和Outlook一样打开电子邮件时,如何让Gmail立即显示图片?
PS。我查看了有关内联图片的所有主题,但它仍无法在Gmail中使用
答案 0 :(得分:1)
由于安全原因,Gmail不支持自动图片加载。旨在限制电子邮件中包含的图像数量,因为它们通常会导致spam-trapped
。
电子邮件客户端通常会允许显示图像(特别是如果它们像base-64那样编码)。对于像Gmail这样的浏览器端电子邮件,情况并非如此。如果您非常关心显示图像,可以使用base64
编码嵌入图像。这将大大增加电子邮件的文件大小(您按值而不是通过引用包含它)所以保守地使用它(或者您将被垃圾邮件捕获程序过滤)。
参考:http://docs.python.org/library/base64.html
享受并祝你好运!