- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
邮件系统图片内嵌
邮件系统优化文档整理
学习目的:提高自身能力,增强解决问题的能力,养成独立思考的习惯
学习内容:学习邮件系统开发的基础知识并对现有的一个邮件系统优化,实现邮件发送图片时将图片资源内嵌到邮件内容中去
学习过程:
熟悉邮件系统的基础知识,了解邮件传输协议(SMTP协议、POP3协议等)
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)定义了邮件客户端软件与SMTP服务器之间以及两台SMTP服务器之间的通信规则。SMTP协议的通信双方采用一问一答的命令/响应形式进行对话。
POP3协议定义了邮件客户端程序与POP3服务器进行通信的具体规则和细节。用户要从邮件服务器提供商提供的电子邮箱来获取自己的电子邮件,需要通过邮件服务提供商的POP3邮件服务器来帮助完成。
了解电子邮件的工作原理(假设lyk@向lhl@163.com发送邮件)
lyk@的邮件客户端程序与对应的SMTP服务器建立网络连接,并以其用户名和密码登录后使用SMTP协议把邮件发送到sina的SMTP服务器
Sina的SMTP服务器收到lyk@提交的电子邮件后,首先根据收件人的得知后缀判断接收者的邮件地址是否属于该SMTP服务器的管辖范围,如果是就直接把邮件存储到收件人的邮箱中,否则sina的SMTP服务器想DNS服务器查询收件人的邮件地址后缀所表示的域名的MX记录,与163的SMTP服务器建立连接并采用SMTP协议吧邮件发送给163的SMTP服务器。
163的SMTP服务器收到sina的SMTP服务器发来的电子邮件后,也将根据收件人的地址判断该邮件是否属于该SMTP服务器的管辖范围,如果是就直接把邮件存储到收件人的邮箱中,否则163的SMTP服务器可能继续转发这封电子邮件,也可能丢弃这封电子邮件。
用户lhl@163.com通过邮件客户端与163的POP3/IMAP服务器建立网络连接,登录后就可以通过POP3或IMAP协议瞎看邮箱中是否有新邮件。如果有,则用POP3或IMAP协议读取邮箱中的邮件。
创建HTML格式的邮件
在发送邮件的过程中可能会发送图片,但是由于java自带的编辑器是纯文本框,无法插入图片,所以需要创建HTML格式的邮件。邮件正文用HTML文本表示时,可以使用HTML文件的特性来丰富邮件正文,加入一些图片和声音等。
包含内嵌图片的复杂邮件
如上所说,创建HTML格式的邮件能够添加图片等,在html页面中直接嵌入图片数据通常是在html页面中应用图片的链接,如:
img src=/logo.gif 但是,这样的前提是我们需要将图片先上传到指定的网站,然后获取外链。一方面 略麻烦,最主要的是存储图片的网站是否持续的支持外链引用。所以,将图片直接插入到html页面中。如img src=data:image/png;base64,.......
其中base64逗号之后的就是将图片经过base64编码后的数据。
如何实现图片的嵌入
实现邮件正文中图片的嵌入,其实就是从邮件的html文件中将图片的绝对URL解析出来再用base64编码,将所得编码以上诉的img src=data:image/png;base64,.......形式替换原来的img标签的src属性值
操作过程
由前面的学习可知实现邮件正文的图片嵌入,需要以img src=data:image/png;base64,.......形式插入图片。其中要将图片进行base64编码,base64方法如下:
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public static String GetImageStr()
{//将图片文件转化为字节数组字符串,并对其进行Base64编码处理
String imgFile = 111.jpg;//待处理的图片
//File f=new File(imgFile); f.length()
FileInputStream in = null;
byte[] data = null;
FileChannel fc= null;
//读取图片字节数组
try
{
in = new FileInputStream(imgFile);
fc=in.getChannel();
data = new byte[(int)fc.size()];//[in.available()];
文档评论(0)