博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android使用JavaMail开发邮箱APP
阅读量:3975 次
发布时间:2019-05-24

本文共 1611 字,大约阅读时间需要 5 分钟。

JavaMail是大名鼎鼎的Oracle公司开发的电子邮件开发框架,如果使用JAVA语言开发邮箱应用基本都绕不开它。在Android端开发邮箱APP的过程中,我遇到了不少问题并一一解决,这里列举了一些做为备忘录,后续开发差不多了我会把源码全部放在github上,以便一起学习讨论。

1、邮箱服务器连接失败

2、获取邮件内容乱码

3、附件名称乱码

4、附件下载速度慢

5、邮件正文包含图片时,对图片的处理(重点难点)

6、对正文图片和附件的拆分(难点)(可根据Content-ID参数判断)

7、对邮件正文html的解析和封装,包括收件箱和发件箱(借助正则表达式和richeditor开源框架)

8、附件的添加

9、与IOS客户端的联调(主要是对Part的封装)

10、不同邮箱服务器所发邮件格式的适配

关于第5点说一下,因为邮箱内容一般都用html格式,在Android自然就用WebView去加载,面对一张下载下来的图片时,WebView要如何去加载呢?注意,WebView无法直接访问Android本地的图片,也不要试图转换成base64,那会很容易就发生OOM,正确的方式是重写shouldInterceptRequest方法,这里简单贴下代码:

@Override    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {      FileInputStream input;      String url = request.getUrl().toString();      try {        url = URLDecoder.decode(url, "UTF-8");      } catch (Exception e) {        e.printStackTrace();      }      /*如果请求包含约定的字段 说明是要拿本地的图片*/      if (url.contains(IMG_HEADER)) {        String imgPath = url.replace(IMG_HEADER, "");        try {          /*重新构造WebResourceResponse  将数据以流的方式传入*/          input = new FileInputStream(new File(imgPath.trim()));          /*返回WebResourceResponse*/          return new WebResourceResponse("image/jpg", "UTF-8", input);        } catch (FileNotFoundException e) {          e.printStackTrace();        }      }      return super.shouldInterceptRequest(view, request);    }

关于最后一点,真想吐槽下新浪邮箱,对邮件正文图片的命名极其随意,默认为“附件1.jpg”,导致如果正文插入了一张图片,同时附件又添加了一张叫做“附件1.jpg”的图片,在个别邮箱当中会显示错误,如QQ邮箱,这一点我在自己的APP里面也进行改正了。

 

2021-3-4 基本开发完毕,github地址是:,如果需要使用,请自行在MailContants.java类当中修改邮箱登录地址和密码。另外请注意,本项目大部分代码是用kotlin写的,不会kotlin的建议可以买本郭神的《第一行代码》(第三版)先学习一下,这本书写的非常浅显易懂。

下面放几张效果图:

 

 

 

 

 

 

 

转载地址:http://korki.baihongyu.com/

你可能感兴趣的文章
常见Oracle HINT的用法
查看>>
JAVA中各类CACHE机制实现的比较 [转]
查看>>
PL/SQL Developer技巧
查看>>
3-python之PyCharm如何新建项目
查看>>
15-python之while循环嵌套应用场景
查看>>
17-python之for循环
查看>>
18-python之while循环,for循环与else的配合
查看>>
19-python之字符串简单介绍
查看>>
20-python之切片详细介绍
查看>>
P24-c++类继承-01详细的例子演示继承的好处
查看>>
P8-c++对象和类-01默认构造函数详解
查看>>
P1-c++函数详解-01函数的默认参数
查看>>
P3-c++函数详解-03函数模板详细介绍
查看>>
P4-c++函数详解-04函数重载,函数模板和函数模板重载,编译器选择使用哪个函数版本?
查看>>
P5-c++内存模型和名称空间-01头文件相关
查看>>
P6-c++内存模型和名称空间-02存储连续性、作用域和链接性
查看>>
P9-c++对象和类-02构造函数和析构函数总结
查看>>
P10-c++对象和类-03this指针详细介绍,详细的例子演示
查看>>
ksh 命令分隔符
查看>>
sed 精萃
查看>>