-
[置顶]软件接口设计怎么做?前后端分离软件接口设计思路
本文关于软件接口设计怎么做?前后端分离软件接口设计思路。好的系统架构离不开好的接口设计,因此,真正懂接口设计的人往往是软件设计队伍中的稀缺型人才。为什么在接口制定标准中说:一流的企业做标准,二流的企业...
-
[置顶]接口管理如何做?接口实现版本管理的意义和最佳方法
本文关于接口管理如何做?接口实现版本管理的意义和最佳方法。API版本管理的重要性不言而喻,对于API的设计者和使用者而言,版本管理都有着非常重要的意义。下面会从WEB API 版本管理的角度提供几种常...
-
[置顶]实现API管理系统的关键
下面将通过几个关键词的形式说明API管理的重要性和未来的实现方式。1.生命周期管理在整个API生命周期中更深入地集成所有工具将进一步提高生命周期循环的速度,而且更重要的是提供满足消费者需求的API。这...
-
C# 数据操作系列 - 12 NHibernate的增删改查(长沙天气)
0. 前言上一篇《C# 数据操作系列 - 11 NHibernate 配置和结构介绍》 介绍了Nhibernate里的配置内容。这一篇将带领大家了解一下如何使用NHIbernate。之前提到NHibe...
-
"""
def create_image_eamil_contant(fp):
tpl = Template(EMAIL_IMAGE_TEMPLATE)
if not path.exists(fp):
sys.exit("要发送的本地图片不存在")
msg = MIMEMultipart("related")
image_name = "demo"
with open(fp, "rb") as rf:
mime_image = MIMEImage(rf.read())
# 注意: 一定需要<>括号
mime_image.add_header("Content-ID", "<%s>" % image_name)
msg.attach(mime_image)
# 渲染邮件文本内容
text = tpl.render(image_name=image_name)
msg_alternative = MIMEMultipart("alternative")
msg_alternative.attach(MIMEText(text, "html", "utf-8"))
msg.attach(msg_alternative)
return msg
如果你使用过python的web框架,你对文本的渲染一定不陌生,因为大多数web框架都支持文本渲染,这里使用的jinja2.
发送程序生成的照片
其实这里跟上面没什么区别的,唯一的区别就是是否保存在本地,既然能发送本地图片,我就先保存到本地然后再按照上面的方式不久可以了么? 首先这个方法是没有问题的,不过多了一次IO, 能在内存中解决的事为什么要放到本地呢?
这种情况主要是应对回去图片的方式是从其他接口获取到的,或者实时生成的时候。虽然很简单,但觉得说说也挺有意思的。
这里的模拟方式是假设在网上获取到了多张base64编码的图片,需要将其组合在一起,然后在不保存在本地情况下直接发送这张照片。
这个base64编码的图片已经保存在本地了,名字是demo_base64.txt
效果如下:
代码如下:
EMAIL_ONLINE_IMAGE_TEMPLATE = """
"""
def create_online_image_content():
from PIL import Image
tpl = Template(EMAIL_ONLINE_IMAGE_TEMPLATE)
fp = "demo_base64.txt"
if not path.exists(fp):
sys.exit("要发送的base64编码的图片不存在")
msg = MIMEMultipart("related")
image_name = "demo"
with open(fp, "rb") as rf:
base64_data = rf.read()
img_data = base64.b64decode(base64_data)
# 因为open方法需要一个file-like文件对象,而我们解码后的对象类型是bytes类型
# bytes类型没有文件对象的read, close方法,所以我们需要通过BytesIO对象包装一下,它会返回一个file-like文件对象
img = Image.open(BytesIO(img_data))
img_width, img_height = img.size
repeat_times = 5
# compose images
ret_img = Image.new(img.mode, (img_width, img_height * repeat_times))
for index in range(repeat_times):
ret_img.paste(img, box=(0, index * img_height))
# 因为MIMEImage需要一个bytes对象,所以们需要获取图片编码后的二进制数据而不是图片的array数据
img_bytes = BytesIO()
# 如果不指定图片格式,会因为没有文件名而报错
ret_img.save(img_bytes, "png" alt="用Python发一封图文并茂的邮件 荐(Python如何发邮件)" title="用Python发一封图文并茂的邮件 荐(Python如何发邮件)" width="200" height="150">
用Python发一封图文并茂的邮件 荐(Python如何发邮件)
环境虽说就发邮件这么个小事,很容易兼容Python2, Python3, 但是大家还是拥抱Python3吧, 我这里没有做python2的兼容写法,所以需要python3以上。很多人学习python,...
-
如何爬取动态网页的数据?Python实战案例(动态网页爬虫 python)
前言一、什么是动态网页所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代...
-
Python爬虫过程中验证码识别的三种解决方案(python爬虫验证码处理)
在Python爬虫过程中,有些网站需要验证码通过后方可进入网页,目的很简单,就是区分是人阅读访问还是机器爬虫。验证码问题看似简单,想做到准确率很高,也是一件不容易的事情。为了更好学习爬虫,后续推文中将...
-
C# 数据操作系列 - 13 SugarSql初探(cp是什么意思?)
0. 前言前言,暂时挥别NHibernate(虽然我突然发现这玩意还挺有意思的,不过看得人不多)。大步进入了有很多小伙伴向我安利的SQLSugar,嗯,我一直叫SugarSQL,好像是这个吧?这是一个...
-
[C#] 折腾海康威视的人体测温 模组([cu(nh3)4](oh)2怎么读)
最后,最后得到如下成果:一、所需的DLLHCCore.dll HCCoreDevCfg.dll 这玩意必须在运行目录 HCGeneralCfgMgr.dll 这鬼也必须在运行目录 HCNetSD...
-
C#作业调度Quartz.NET学习笔记(count)
一、简单介绍Quartz.NET是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于WinForm和ASP.NET应用中。它...
-
C# 数据操作系列 - 11 NHibernate 配置和结构介绍(cctv5在线直播观看)
0. 前言今天是NHibernate的第二篇内容,通过上一篇的内容,我们初步了解了NHibernate的创建和使用。这一篇,我继续探索NHibernate背后的秘密。嗯,就是这样。1. NHibern...
-
不干胶、热敏打印(不干胶热敏打印机)
仓储物流的过程中往往少不了一些使用热敏打印机或者碳带打印机打印一些条码、信息贴在实物或者包裹上最好的实现方式不过于直接使用热敏代码形成文本直接输出到打印机做打印但是热敏代码也是一门需要特殊的语言,需要...
-
C# 数据操作系列 - 9. EF Core 完结篇(cctv5在线直播观看)
0.前言《EF Core》实际上已经可以告一段落了,但是感觉还有一点点意犹未尽。所以决定分享一下,个人在实际开发中使用EF Core的一些经验和使用的扩展包。1. EF Core的异步操作正如这小节题...
