下文来自:
http://blog.csdn.net/lichaoandy/archive/2010/06/05/5649163.aspx
--------------------------------------
在android里进行邮件客户端开发可以有两种方式:
在邮件客户端的设计中,可以采用两种方法。
l
一种是调用android
系统自带的邮件服务
优点:这种方法比较简单易用
缺点:发送邮件的账号必须是gmail
账号
l
令一种方法是采用javamail
功能包
优点:可以设置邮件服务器地址,不必局限于gmail
邮箱
缺点:用法比较复杂
下面依次介绍这两种方式:
先看应用android自带邮件系统的关键代码
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
-
-
Intentintent=new
Intent();
-
-
intent.setAction(Intent.ACTION_SEND);
-
-
intent.putExtra(Intent.EXTRA_EMAIL,new
String[]
-
{"abc@com.cn"
,
"edf@com.cn"
});
-
-
intent.putExtra(Intent.EXTRA_SUBJECT,"test"
);
-
-
intent.putExtra(Intent.EXTRA_TEXT,"testmail"
);
-
启动一个新的ACTIVITY,"Sendingmail..."
是在启动这个
-
ACTIVITY的等待时间时所显示的文字
-
startActivity(Intent.createChooser(intent,"Sending
-
mail..."));
只有上面的代码有可能还会出现异常,你运行的时候会提示一个错误:no application can perform this
action会有这个错误提示,是由于你没有在模拟器上配置gmail邮箱,输入自己的gmail账号和密码,默认使用的是你的gmail账号发信。
使用javamail实现的代码
在android里使用javamail需要依赖3个包,activation.jar,additionnal.jar,mail.jar
同时还要注意一个最重要的地方那就是开启你访问互联网的权限不然你一点用没有。。。。
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
-
<uses-permissionandroid:name=
"android.permission.INTERNET"
></uses-permission>
对于
JavaMail
,最基础的功能就是邮件的发送和接收,在这里,我先讲一讲邮件的发送。
在写具体的程序前,先讲一些概念。
1.
邮件的发送:如果你的邮件地址是
a@host.com
,而你要用这个邮箱发送一封邮件到
to@tohost.com
,这个发送过程是怎样的呢,你以为是先连接到
tohost.com
这服务器上,然后把邮件发送出去吗?其实不然。最初,你需要连接到服务器
host.com
上,当然这个连接可能需要认证,然后是发送邮件到服务器
host.com
上,关闭连接。在
host.com
上,你所发送的邮件进入发送队列中,轮到你要发送的邮件时,
host.com
主机再联系
tohost.com
,将邮件传输到服务器
tohost.com
上。
2.
一些垃圾邮件的发送:在垃圾邮件中,可能大部分的发件人的地址都是假的,这是怎么回事呢?实际上在发送这些垃圾邮件的时候,这里的
host.com
有些特别,可能
host.com
不需要对用户进行认证,也可能发送垃圾邮件的人本来就控制着服务器
host.com
,然后控制着
host.com
向其他服务器,如
tohost.com
,发送邮件,而发送邮件的内容可以被控制,发件人的地址就可以随便填写。
发送邮件主要包括
3
个部分:创建连接,创建邮件体,发送邮件
JavaMail
中,是使用会话
(Session)
来管理连接的。创建一个连接,就需要创建一个会话。在会话中,有两个重要的因素,一是会话的属性,二是会话的认证。在我们使用
Hotmail
等邮件工具的时候,就要设置
”SMTP
服务器身份验证
”
,也就是这里的会话的认证。
首先,创建一个连接属性。
Properties props = new Properties();
props.put("mail.smtp.host","smtp.126.com");
//
设置
smtp
的服务器地址是
smtp.126.com
props.put("mail.smtp.auth","true");
//
设置
smtp
服务器要身份验证。
在创建一个身份验证。身份验证稍微复杂一点,要创建一个
Authenticator
的子类,并重载
getPasswordAuthentication
()方法
,
代码如下:
class PopupAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
String username = "cqhcp"; //126
邮箱登录帐号
String pwd = "12345"; //
登录密码
return new PasswordAuthentication(username, pwd);
}
}
创建身份验证的实例
:
PopupAuthenticator auth = new PopupAuthenticator();
创建会话
:
关于会话的创建,有两种方法,具体请参看后续的文章
,
这里只简单使用一种。
Session session = Session.getInstance(props, auth);
定义邮件地址
:
//
发送人地址
Address addressFrom = new InternetAddress("cqhcp@126.com", "George Bush");
//
收件人地址
Address addressTo = new InternetAddress("webmaster@javazy.com", "George Bush");
//
抄送地址
Address addressCopy = new InternetAddress("haocongping@gmail.com", "George Bush");
创建邮件体
:
message.setContent("Hello", "text/plain");//
或者使用
message.setText("Hello");
更详细的信息请参看后续文章
.
message.setSubject("Title");
message.setFrom(addressFrom);
message.addRecipient(Message.RecipientType.TO,addressTo);
message.addRecipient(Message.RecipientType.CC,addressCopy);
message.saveChanges();
发送邮件的过程
:
Transport transport = session.getTransport("smtp");//
创建连接
transport.connect("smtp.126.com", "cqhcp", "12345");//
连接服务器
transport.send(message);//
发送信息
transport.close();//
关闭连接
整体程序的代码如下
:
class PopupAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
String username = "cqhcp"; //163
邮箱登录帐号
String pwd = "12345"; //
登录密码
return new PasswordAuthentication(username, pwd);
}
}
Properties props = new Properties();
props.put("mail.smtp.host","smtp.126.com");
props.put("mail.smtp.auth","true");
PopupAuthenticator auth = new PopupAuthenticator();
Session session = Session.getInstance(props, auth);
MimeMessage message = new MimeMessage(session);
Address addressFrom = new InternetAddress("cqhcp@126.com", "George Bush");
Address addressTo = new InternetAddress("webmaster@javazy.com", "George Bush");
Address addressCopy = new InternetAddress("haocongping@gmail.com", "George Bush");
message.setContent("Hello", "text/plain");//
或者使用
message.setText("Hello");
message.setSubject("Title");
message.setFrom(addressFrom);
message.addRecipient(Message.RecipientType.TO,addressTo);
message.addRecipient(Message.RecipientType.CC,addressCopy);
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect("smtp.126.com", "cqhcp", "12345");
transport.send(message);
transport.close();
若想在登录时判断输入的用户名和密码是否正确,正确时登录,不正确时提示出错而不登录,只需像下面这样实现:
try {
session.setDebug(true);
Transport trans = session.getTransport("smtp");
trans.connect("smtp.126.com",account, password);
} catch (AuthenticationFailedException ae) {
ae.printStackTrace();
DisplayToast("用户名或者密码错误!");//其中DisplayToast是我自己写的一个Toast
} catch (MessagingException mex) {
mex.printStackTrace();
Exception ex = null;
if ((ex = mex.getNextException()) != null) {
ex.printStackTrace();
}
}
以下几篇文章有更加完整的实现,非常好,可以参考。
http://www.javaeye.com/topic/352753
http://www.cnblogs.com/love2009/archive/2009/02/24/1397201.html
http://www.blogjava.net/TrampEagle/archive/2006/05/26/48326.html
相关推荐
NULL 博文链接:https://wcf1987.iteye.com/blog/1292509
Android之发送短信的两种方式 1、调用系统短信接口直接发送短信 2、调起系统发短信功能 (并设置发送状态的监听)
android后台发送mail的jar包
Android高级应用源码-Android调用谷歌STMP发送邮件 MailDemo.zip
android使用javamail发送邮件jar包,可以直接导入到Android studio使用
Android访问网络数据的几种方式Demo
Android使用activation.jar,additionnal.jar,mail.jar实现后台发送邮件. 代码编写能过,QQ邮件测试通过,百分百可用
android发送AT命令代码 发送AT命令获取想要的信息,或者做一些其他事
Android发送邮件mail.jar+activation.jar+additionnal.jar三件套
android-mail.jar包 压缩包中包含activation.jar,additionnal.jar,mail.jar android发送邮件所需要的jar包。一套即可。
Android中WebView的JS交互的几种方式
Android Mail发送邮件依赖的包,代码示例可以参考:http://write.blog.csdn.net/postlist中响应博客
Android 模拟按键,实现按键发送消息
介绍android数据发送的例子,供新手练习和熟悉使用,高手备忘也凑合吧
1、用来测试Android手机为啥接收不到UDP广播报文。
【Android】Android彩信发送源码
在android平台上开发邮件功能,Android平台发送mail的3个jar包
android 向服务器发送多张图片 服务器端和android端代码,测试发送成功
Android使用javamail必须先下载3个JAR包并导入工程 activation.jar additonnal.jar mail.jar 导入方法为: project->properties->java build path->libraries->add external jars 然后在android项目中添加网络...
http://stackoverflow.com/questions/2020088/sending-email-in-android-using-javamail-api-without-using-the-default-android-app的源码,已实现可发送邮件。