文档章节

Android中使用apache commons-net发送后台邮件的方法

since1986
 since1986
发布于 2014/04/24 10:52
字数 433
阅读 571
收藏 6
点赞 0
评论 0

上一篇文章中我介绍了使用Javamail-android在android中发送后台邮件的方法,但是,这个Javamail-android并不是一个靠谱的开源组织发布的,而且是修改过的Javaee,总觉得用起来别扭,所以我就一直搜寻一种更靠谱的解决方案。总算功夫不负有心人,看到了这两篇文章:Sending email without user interaction in AndroidSending a mail in Java (and Android) with Apache Commons Net SMTP : STARTTLS, SSL,在这两篇文章中介绍了使用 apache commons-net 来发送邮件的方法。这个就很对路了,apache出品,正规大厂,质量信得过产品,呵呵。

核心代码片段:

// 建立发送邮件任务
new AsyncTask<String, Integer, Boolean>() {

		@Override
		protected Boolean doInBackground(String... params) {
			
			//使用commons-net中的AuthenticatingSMTPClient
			AuthenticatingSMTPClient client = new AuthenticatingSMTPClient("TLS", true);
			try {
				client.connect("smtp.gmail.com", 465);
				client.ehlo("localhost"); //需要ehlo一下
				client.sendCommand("AUTH XOAUTH2 " + Base64.encodeBase64URLSafeString(
						String.format("user=%s\1auth=Bearer %s\1\1", me.name, oauthToken).getBytes())
						); //发送Google的XOAUTH2命令
				client.setSender(me.name);
				
				//处理多个收件人
				String[] recipientsArray = null;
				if(recipients.toString().contains(",")) {
					recipientsArray = recipients.toString().trim().split(",");
					for( String recipient : recipientsArray ) {
						client.addRecipient(recipient);
					}
				}else {
					recipientsArray = new String[]{recipients.toString()};
					client.addRecipient(recipients.toString());
				}
				
				//处理邮件主题与正文
				Writer writer = client.sendMessageData();
				if(null != writer) {
					
					//使用apache mime4j中的EncoderUtil来处理中文乱码的问题
					String encodedSubject = EncoderUtil.encodeIfNecessary(subject, Usage.TEXT_TOKEN, 0); //使用apache mime4j中的EncoderUtil来编码邮件主题
					String encodedBody = EncoderUtil.encodeB(body.getBytes()); //使用apache mime4j中的EncoderUtil来编码邮件正文
					
					Log.i(SMSBroadcastReceiver.class.getName(), "encodedSubject: " + encodedSubject);
					Log.i(SMSBroadcastReceiver.class.getName(), "encodedBody: " + encodedBody);
					
					SimpleSMTPHeader header = new SimpleSMTPHeader(me.name, recipientsArray[0], encodedSubject);
					header.addHeaderField("Content-Type", "text/plain; charset=UTF-8");
					header.addHeaderField("Content-Transfer-Encoding", "base64");
					for (int i = 0; i < recipientsArray.length; i++) {
						if(0 == i) continue;
						header.addCC(recipientsArray[i]);
					}
					writer.write(header.toString());
					writer.write(encodedBody);
					writer.close();
				}
				return true;
			} catch (Exception e) {
				return false;
			} finally {
				try {
					client.disconnect();
				} catch (IOException e) {
				}
			}
		}

	}.execute();


© 著作权归作者所有

共有 人打赏支持
since1986
粉丝 7
博文 60
码字总数 10510
作品 1
石家庄
程序员
刚刚学习到的Android使用Javamail通过XOauth调用Gmail API发送邮件的方法

前景知识:OAuth,Javamail-android,Javamail api in android using XOauth 我的一个App项目需要在Service中自动发送邮件的功能,因为是后台自动发送邮件,不能出现邮件UI所以需要使用Javam...

since1986
2014/04/12
0
0
Android task和back stack详解一:概述

一个应用往往包含很多activities.每个activity都应围绕着用户可执行的特定动作来设计,并且可以启动其它activitie.例如,一个email应用可能可能有一个显示新邮件列表的activity.当用户选择...

晨曦之光
2012/03/12
0
0
Play2 + ReactiveMongo 实现一个活动报名应用

Play 2: ReactiveMongo: 代码在: http://git.oschina.net/socialcredits/social-credits-activity-service 公司要做一些活动,需要一个线上的活动报名应用。想着前几天刚好看了下 ,觉得这个...

羊八井
2015/08/12
0
4
Android任务和返回栈完全解析,细数那些你所不知道的细节(最详细的解说了)

本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文。 http://developer.android.com/guide/components/tasks-and-back-stack.html 任务和返回栈 ...

新年
2015/05/27
0
0
Android下无界面后台发送彩信代码

如果想调用系统彩信界面,然后发送彩信,经测试下面的代码就可以实现 Intent intent = new Intent(Intent.ACTION_SEND); 如果想不出现系统的彩信界面,直接从后台发送,可以联系我们 本公司通...

suifeng99
2011/07/11
0
0
Android解析ActivityManagerService(二)ActivityTask和Activity栈管理

相关文章 Android系统启动流程系列 Android应用进程系列 Android深入四大组件系列 Android深入解析AMS系列 前言 关于AMS,原计划是只写一篇文章来介绍,但是AMS功能繁多,一篇文章的篇幅远远...

刘望舒
2017/09/03
0
0
Intent中的四个重要属性——Action、Data、Category、Extras

Intent作为联系各Activity之间的纽带,其作用并不仅仅只限于简单的数据传递。通过其自带的属性,其实可以方便的完成很多较为复杂的操作。例如直接调用拨号功能、直接自动调用合适的程序打开不...

亭子happy
2015/02/08
0
1
Intent中的四个重要属性——Action、Data、Category、Extras

原文地址 http://www.cnblogs.com/wisekingokok/archive/2011/08/22/2149847.html   Intent作为联系各Activity之间的纽带,其作用并不仅仅只限于简单的数据传递。通过其自带的属性,其实可...

截图
2014/10/22
0
0
Android:onNewIntent()触发机制及注意事项

一、onNewIntent() 在IntentActivity中重写下列方法:onCreate onStart onRestart onResume onPause onStop onDestroy onNewIntent 1、其他应用发Intent,执行下列方法: onCreate onStart o......

Xushao
2013/06/18
0
3
android activity详解一:概述

概述 Activities 是一个程序的组件之一。它的主要功能是提供界面。 一个程序一般由多个Activity组成,各activities之间关系很松散,它们之间没有直接的关联。必须有一个activity被指定为主a...

晨曦之光
2012/03/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

回想过往,分析当下,着眼未来

好久没有真正的在纸质笔记本上写过东西了,感觉都快不会写字了,笔画都不知道怎么写了。接下来就说说咱们的正事。 2018年7月22日,我做了一个决定,那就是去参加安全培训(可能是我职业生涯中...

yeahlife
42分钟前
4
0
关于工作中的人际交往

关于工作中的人际交往 Intro 写了篇发泄情绪的博客,但不会发布出来。 大概就是,要么忍,要么滚。 以及一些不那么符合社会主义核心价值观,不满于大资本家与小资本家剥削的废话。

uniqptr
47分钟前
0
0
springMVC的流程

1.用户发送请求至前端控制器DispatcherServlet 2.DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(...

JavaSon712
今天
0
0
大数据教程(3.2):Linux系统软件安装之自动化脚本

博主前面文章有介绍过软件的安装,可以帮助IT人员顺利的完成功能软件安装;但是,对于我们运维人员或者需要管理软件安装的项目经理来说,有些应用一次行需要搭建很多台相同的软件环境(如tom...

em_aaron
今天
0
1
Spring Boot 2.0.3 JDBC整合Oracle 12

整合步骤 1. Oracle驱动引入 Oracle驱动一般不能通过maven仓库直接下载得到,需自行下载并导入到项目的lib目录下,建议通过如下pom依赖引入下载的Oracle驱动 <!-- Oracle 驱动 -->...

OSC_fly
今天
0
0
java 8 并行流 - 1

下面创建一个并行流,与顺序流 //顺序流Stream.iterate(0L, i -> i + 1) .limit(Integer.MAX_VALUE) .reduce(0L, Long::sum);//并行流Stream.iterate(0L, i -> i......

Canaan_
今天
0
0
数据结构与算法5

二分法采用向下取整的方法 使用有序数组的好处是查找的速度比无序数组快的多,不好的方面是因为要将所有靠后的数据移开,所以速度较慢,有序数组和无序数组的删除操作都很慢。 有序数组在查找...

沉迷于编程的小菜菜
昨天
1
1
SpringBoot | 第十一章:Redis的集成和简单使用

前言 上几节讲了利用Mybatis-Plus这个第三方的ORM框架进行数据库访问,在实际工作中,在存储一些非结构化或者缓存一些临时数据及热点数据时,一般上都会用上mongodb和redis进行这方面的需求。...

oKong
昨天
5
0
对基于深度神经网络的Auto Encoder用于异常检测的一些思考

一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景。举几个场景:网络流量是正常流量还是攻击流量、视频中的人的...

冷血狂魔
昨天
0
0
并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部