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,发送邮件,而发送邮件的内容可以被控制,发件人的地址就可以随便填写。
发送邮件主要包括3个部分:创建连接,创建邮件体,发送邮件
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; }
猜您可能还喜欢
- Android avax.net.ssl.SSLPeerUnverifiedException: No peer certificate 解决方法(httpClient支持HTTPS的访问方式)(2791)
- Android进阶(二)https请求No peer certificate的解决方法.(1547)
- Android进阶(一)几种网络请求方式详解(1129)
- Android几种邮件发送代码(993)
- AndRoid解决ArrayList的Add总是添加相同值的问题(966)
- Android Can't create handler inside thread that has not called Looper.prepare()错误解决方法(945)
- 响应式布局和自适应布局的区别(361)
评论列表
发表评论
文章分类
文章归档
阅读排行
- 1. Windows Server 2008 R2永久激活及Chew-WGA v0.9下载(12644)
- 2.Visual Studio 2017中安装visualSVN及使用详解(4838)
- 3.完美解决iis下JWplayer提示Error loading media: File could not be played错误(3702)
- 4.asp.net mvc+jquery easyui开发基础(一)模块首页及增加、修改、删除模块实现(2928)
- 5.Android avax.net.ssl.SSLPeerUnverifiedException: No peer certificate 解决方法(httpClient支持HTTPS的访问方式)(2791)
- 6..Net Mvc中使用Jquery EasyUI控件讲解(一)表格控件datagrid使用介绍(2636)
- 7.asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(三)登录模块开发(2577)
- 8.asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(七)权限管理模块之系统菜单动态生成(2541)
- 9. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(六)权限管理模块之初始数据准备(2191)
- 10.asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发(八)权限管理模块之权限管理实现(2158)