使用C#发送正文带图片邮件
最近有个地方用到正文带图片的邮件发送功能,由于发送邮件调用的是web service,要求正文必须是string,而接收方要能看到图片,还不能单纯的添加一个图片地址链接,查阅了很多资料,基本上都是从头写邮件发送类,以附件的形式上传图片然后替换这么个思路,不适合我目前的需求。思考了很久:不管是图片也好,文字也好还是其他的什么文件,在网路上传输肯定都是数据流,无非是到了目的地数据流每一段解析的方式不同而已,那么能不能将邮件发送数据看成是一个数据流,文字和图片都在里面呢?
使用OUTLOOK发送了一个带图片的邮件,收到之后另存MHT分析其代码:
发现带图片img标签的src属性后面是一大堆字符<img alt="" src="data:image/png;base64, SkZJRgABAQEAZA…" />,那这个"乱码"肯定就是图片了!
再次查阅了一些资料得知邮件在网路上传输一般都要通过base 64编码,然后直接赋给src
|
Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入。在上面的Data URI中,data表示取得数据的协定名称,image/png 是数据类型名称,base64 是数据的编码方法,逗号后面就是这个image/png文件base64编码后的数据。 |
这就好办了,先实现将图片转换为"字符串"替换到那个位置不就OK了?
base 64编码方法:
|
Bitmap bmp = new Bitmap(Imagefilename); MemoryStream ms = new MemoryStream(); String strbaser64 = Convert.ToBase64String(arr); |
Imagefilename是图片路径
strbaser64是编码后的字符串
然后写HTML邮件正文:
|
<BODY style="MARGIN: 10px"><DIV><IMG src="data:image/png;base64, SkZJRgABAQEAZA…"> </IMG></DIV></BODY> |
将转换成为字符串的图片放到这个位置:下图是我在163信箱做的实验(注意要切换到HTML源码试图下)

点击发送,然后过去收:

发现已经还原成为图片了,初步实验成功。
然后再试试使用代码发送,简单发送代码如下:
|
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("smtp.163.com"); client.UseDefaultCredentials = true;//设置为发送认证消息 client.Credentials = new System.Net.NetworkCredential("用户名", "密码");//认证消息 System.Net.Mail.MailMessage mess = new System.Net.Mail.MailMessage(); mess.From = new System.Net.Mail.MailAddress("shiyeping@163.com", "发信人的名称"); mess.To.Add(new System.Net.Mail.MailAddress("shiyeping@163.com", "收信人的名称")); mess.Subject = "主题"; mess.IsBodyHtml = true; mess.Body = "HTML格式的正文"; try { client.Send(mess); MessageBox.Show("发送成功完成"); } catch (Exception ex) { MessageBox.Show(ex.Message); } |
正文用变量表示如下:
|
string mailBody = "<BODY style=\"MARGIN: 10px\"><DIV><IMG src=\"data:image/png;base64,/9j/4AAQSkZ….WRN6iXizpJL//Z\"> </IMG></DIV></BODY> "; |
*注意转义
发送成功之后再去邮箱就可以看到图片已经正常显示出来了:

同样道理,如果要在邮件正文里面加一个视频?FLASH 动画?声音?…?
我没试,如果你有兴趣可以试试,我只是推理!
附测试代码下载:点击下载
使用C#发送正文带图片邮件的更多相关文章
- java发送内嵌图片邮件
前言: 博客系统中需要邮件服务的功能,以前写过类似的功能,不过功能太简单了,仅仅是发送文本内容,现在尝试一下发送内嵌图片邮件! 准备工作: 请参考:http://www.cnblogs.com/huj ...
- 邮件实现详解(四)------JavaMail 发送(带图片和附件)和接收邮件
好了,进入这个系列教程最主要的步骤了,前面邮件的理论知识我们都了解了,那么这篇博客我们将用代码完成邮件的发送.这在实际项目中应用的非常广泛,比如注册需要发送邮件进行账号激活,再比如OA项目中利用邮件进 ...
- delphi发送html带附件邮件
var html: TIdText; begin if not SMTP.Connected then SMTP.Disconnect(); try SMTP.Connect; try if SMTP ...
- 在Linux命令行下发送html格式的邮件
在Linux利用formail+sendmail来发送带图片的邮件 formail接收html格式的文件作为邮件的内容,这样就可以解决发送带图片邮件的问题了,因为html中可以插入图片,只要给出的im ...
- java带图片的邮件发送方法实现
package sendEmail; import java.util.Properties; import javax.activation.DataHandler; import javax.ac ...
- [Java] JavaMail 发送带图片的 html 格式的邮件
JavaMail 发送的邮件正文和附件是相互独立的,但是内置图片需要定位图片在正文中的位置,所以内置图片和邮件正文是互相依赖的. 发送带附件的邮件可参考JavaMail 发送 html 格式.带附件的 ...
- Django发送带图片和附件的邮件
最近需要做集团的SRC系统.暂无安全研发,所以只能找我这个小菜兼职开发.系统使用Django框架,在整个过程中,有许多奇特的需求.在某项需求中,需要给厂商用户发送富文本邮件,漏洞详情,这个折腾了一下, ...
- 接口测试基础——第3篇smtplib发送带图片的邮件
smtplib发送邮件最后一篇,发送带图片的邮件: 大家可以去廖雪峰的网站看一下,下面的代码就是我跟着博客写的,哈哈,大家即使不明白为什么,也要多写两遍,记在心里,如果有不明白的地方可以留言,船长会第 ...
- 带有附件及图片正文的JavaMail邮件发送
1 package javamail; 2 3 import java.io.UnsupportedEncodingException; 4 import java.util.Properties; ...
随机推荐
- HDU2204 Eddy's爱好(容斥原理)
题目问[1,n]有几个数是$m^k (k>1)$形式. 如果这样考虑,m已知k未知,对于每一个m统计其k的数量即$\lfloor log_mn \rfloor$个,再容斥,然而m太多了,完全不可 ...
- Week,Month, Year 日期区间辅助类
我们在做一些业务系统的时候,经常会用到一些获取时间段的情况.比如要统计某一周.某月.某年 这样一些时间区间内的一些业务数据.这时候我们就需要获取当前时间段内的一些起止日期.这里分享一个通用的日期辅助类 ...
- 【BZOJ】 1007: [HNOI2008]水平可见直线(凸壳)
http://www.lydsy.com/JudgeOnline/problem.php?id=1007 一开始我贪心的写了下,当然全wa了.. 这题看了题解感觉很简单. 首先什么情况才能看到呢? w ...
- HDU 4681 String(DP)
题目链接 枚举A和B中每一段含有C的段,A的前面 后面和B前面后面,求最长公共子序.观察发现,可以预处理最长公共子序. #include <iostream> #include <c ...
- java截取图片部分尺寸
package util; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; i ...
- 【C语言】01-C语言概述
说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.iOS开发不感兴趣,请忽略 为什么iOS开发要先学C语 ...
- hdu-acm stepsHumble Numbers
这是我做的第六道动态规划水题,对动态规划差不多有了一个大致的概念.动态规划有几个关键因素,第一是最优子结构,第二是状态和状态转移方程.整个过程都是以 最优 为中心的.因此在状态转移方程中常涉及到几 ...
- Html - 涟漪特效
这种效果稍加改造非常优雅.并且可以准确的实验触摸聚焦点.缺点是非常消耗内存.娱乐为主吧 js //╠═╬═╬═╬═╬═╬═╬═╬═╬═╬═╣ 涟漪特效 ╠═╬═╬═╬═╬═╬═╬═╬═╬═╬═╣ 涟漪 ...
- excel表中内容如何反排列
如题,我的意思是,比如excel表中有如下内容: 1.红色 2.黄色 3.蓝色 现在我需要一次性全部反向排列,变成 3.蓝色 2.黄色 1.红色 这不是纯数字排序,因为我序号不是自然数的等差数列,其中 ...
- redis pool config的配置参数
.获取jedis实例时,实际上可能有两类错误.一类是pool.getReource(),得不到可用的jedis实例:另一类是jedis.set/get时出错也会抛出异常:为了实现区分,所以根据inst ...