首页 技术 正文
技术 2022年11月15日
0 收藏 520 点赞 3,654 浏览 4016 个字

最近在做的APP涉及到发邮件,总结如下:

在android里进行邮件客户端开发可以有两种方式:

在邮件客户端的设计中,可以采用两种方法。

一种是调用android系统自带的邮件服务

优点:这种方法比较简单易用

缺点:发送邮件的账号必须是gmail账号

令一种方法是采用javamail功能包

优点:可以设置邮件服务器地址,不必局限于gmail邮箱

缺点:用法比较复杂

下面依次介绍这两种方式:

先看应用android自带邮件系统的关键代码

//建立Intent对象

Intent intent = 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, “test mail”);

//启动一个新的ACTIVITY,”Sending mail…”是在启动这个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,在编程中发现,其实additionnal.jar存在与否不影响结果。

同时还要注意一个最重要的地方那就是开启你访问互联网的权限不然你一点用没有。。。。

<uses-permission android: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,发送邮件,而发送邮件的内容可以被控制,发件人的地址就可以随便填写。

个部分:创建连接,创建邮件体,发送邮件

JavaMail中,是使用会话(Session)来管理连接的。创建一个连接,就需要创建一个会话。在会话中,有两个重要的因素,一是会话的属性,二是会话的认证。在我们使用Hotmail等邮件工具的时候,就要设置”SMTP服务器身份验证”,也就是这里的会话的认证。

//首先,创建一个连接属性

Properties props = new Properties();

//设置smtp的服务器地址是smtp.126.com

props.put(“mail.smtp.host”,”smtp.126.com”);

//设置smtp服务器要身份验证

props.put(“mail.smtp.auth”,”true”);

PopupAuthenticator auth = new PopupAuthenticator();

// 创建会话(JavaMail中,是使用会话(Session)来管理连接的)

Session session = Session.getInstance(prop, auth);

// 创建邮件体

Message message = createmessage(session, user);

// 发送邮件-创建连接

Transport ts = null;

// 校验客服邮箱

try {

session.setDebug(true);

ts = session.getTransport(“smtp”);

// 此处的邮件发送方邮箱密码可知无可厚非

ts.connect(ConstantValue.MAILHOST, ConstantValue.MAILADDRESS,

ConstantValue.MAILPWD);

flag = true;

} catch (AuthenticationFailedException ae) {

ae.printStackTrace();

flag = false;

System.out.println(“客服邮箱名或密码错误,请重新输入”);

return SUCCESS;

} catch (MessagingException mex) {

mex.printStackTrace();

Exception ex = null;

if ((ex = mex.getNextException()) != null) {

ex.printStackTrace();

}

flag = false;

System.out.println(“客服邮箱名或密码错误,请重新输入”);

return SUCCESS;

}

ts.send(message);

ts.close();

}

其中涉及到创建一个身份验证。身份验证稍微复杂一点,要创建一个Authenticator的子类,并重载getPasswordAuthentication()方法,代码如下:

public class PopupAuthenticator extends Authenticator {

public PasswordAuthentication getPasswordAuthentication() {

String username = ConstantValue.MAILADDRESS;

String pwd = ConstantValue.MAILPWD;

return new PasswordAuthentication(username, pwd);

}

}

其中的类ConstantValue 如下:

public class ConstantValue {

//邮件服务器

public static String MAILSENDER = “*秋亚”;

//邮件服务器

public static String MAILHOST = “smtp.163.com”;

//发送邮件地址

public static String MAILADDRESS = “sunhuaqiang2014”;

//发送邮件密码

public static String MAILPWD = “35****”;

}

其中涉及到的createmessage()方法如下:

public Message createmessage(Session session, User user)

throws AddressException, MessagingException, UnsupportedEncodingException {

MimeMessage message = new MimeMessage(session);

//发送人地址

message.setFrom(new InternetAddress(ConstantValue.MAILADDRESS + “@163.com”, ConstantValue.MAILSENDER));

//收件人地址

message.setRecipient(Message.RecipientType.TO,

new InternetAddress(user.getEmail()));

//设置邮件主题

message.setSubject(“彩票网密码找回”);

//设置邮件内容

String content = “恭喜您密码成功找回 您注册的用户名:” + user.getUsername() + “,您注册的密码是:”

+ user.getPassword() + “,请妥善保管!!”;

message.setContent(content, “text/html;charset=UTF-8”);

message.saveChanges();

return message;

}

以下几篇文章有更加完整的实现,非常好,可以参考。

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,021
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,513
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,359
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,142
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,773
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,851