android mail发送邮件(包含163邮箱及qq邮箱,使用mail.jar,activation.jar,additionnal.jar)
最近项目里有个发邮件的功能,不能调系统发邮件,也不能调用第三方的客户端,还必须可以发网易163邮箱,也可以发QQ邮箱。这让我想起来,当年初学java时自己写了个发送邮件的小demo,就是发给网易邮箱的,用的java 的mail.jar等实现的。
而android这个估计应该也是一样的吧,于是我就开始实现了。
首先导入三个jar包,mail.jar,activation.jar,additionnal.jar。由于当时对其他jar包印象不是很深,只导入了mail.jar,结果包了如下错误
java.lang.NoClassDefFoundError: javax.activation.DataHandler
后来导入相关jar包就可以了,也就是这三个包配齐就可以了。
一开始,我先从网易邮箱入手了,代码如下:
毕竟demo吗,大家就不要追求其他啥了,首先布局,很简单,就一个按钮
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/bt_send_mail"android:layout_width="match_parent"android:layout_height="50dp"android:text="发送邮件"/>
</LinearLayout>
接下来发送邮件的核心代码:
private void send() {try {Properties props = new Properties();// 开启debug调试props.setProperty("mail.debug", "true");// 发送服务器需要身份验证props.setProperty("mail.smtp.auth", "true");//设置邮件服务器主机名props.setProperty("mail.host", "smtp.163.com");// 设置邮件服务器主机名
// props.setProperty("mail.host", "smtp.qq.com");// 发送邮件协议名称props.setProperty("mail.transport.protocol", "smtp");// 设置环境信息Session session = Session.getInstance(props);// 创建邮件对象Message msg = new MimeMessage(session);msg.setSubject("AndroidMail测试");// 设置邮件内容msg.setText("这是一封由大当家发送的邮件!");// 设置发件人msg.setFrom(new InternetAddress("---发件人邮箱---"));Transport transport = session.getTransport();// 连接邮件服务器transport.connect("---发件人邮箱账号---", "---发件人邮箱密码---");// 发送邮件transport.sendMessage(msg, new Address[]{new InternetAddress("收件人邮箱")});// 关闭连接transport.close();} catch (MessagingException e) {e.printStackTrace();}}
然后在Activity中的具体使用:
public class FeedBackActivity extends BaseActivity {@BindView(R.id.bt_send_mail)Button btSendMail;private MyMailTask myMailTask;@Overrideprotected int getContentViewId() {return R.layout.activity_feed_back;}@Overrideprotected void initData(Bundle savedInstanceState) {}@OnClick(R.id.bt_send_mail)public void onViewClicked() {myMailTask=new MyMailTask();myMailTask.execute();}private void send() {try {Properties props = new Properties();// 开启debug调试props.setProperty("mail.debug", "true");// 发送服务器需要身份验证props.setProperty("mail.smtp.auth", "true");//设置邮件服务器主机名props.setProperty("mail.host", "smtp.163.com");// 设置邮件服务器主机名
// props.setProperty("mail.host", "smtp.qq.com");// 发送邮件协议名称props.setProperty("mail.transport.protocol", "smtp");// 设置环境信息Session session = Session.getInstance(props);// 创建邮件对象Message msg = new MimeMessage(session);msg.setSubject("AndroidMail测试");// 设置邮件内容msg.setText("这是一封由大当家发送的邮件!");// 设置发件人msg.setFrom(new InternetAddress("---发件人邮箱---"));Transport transport = session.getTransport();// 连接邮件服务器transport.connect("---发件人邮箱账号---", "---发件人邮箱密码---");// 发送邮件transport.sendMessage(msg, new Address[]{new InternetAddress("收件人邮箱")});// 关闭连接transport.close();} catch (MessagingException e) {e.printStackTrace();}}private class MyMailTask extends AsyncTask<Void, Void, Void> {@Overrideprotected void onPreExecute() {super.onPreExecute();btSendMail.setText("正在发送中...");}@Overrideprotected Void doInBackground(Void... voids) {send();return null;}@Overrideprotected void onPostExecute(Void aVoid) {super.onPostExecute(aVoid);btSendMail.setText("发送成功");}@Overrideprotected void onCancelled() {super.onCancelled();}}
}
因为连接邮箱服务器,发邮件都是耗时操作,所以别放主线程里执行了,我这里用的AsyncTask,你用什么都行,奏是这么简单。来,我们看看有没有收到邮件
哈哈,收到了。好,一鼓作气,来实现qq邮箱。将代码里
props.setProperty("mail.host", "smtp.163.com");
改为
props.setProperty("mail.host", "smtp.qq.com");
不就可以了吗,然后发件人,收件人邮箱换qq的。但,我是万万没想到啊,没喝大力果然不行,报错了
这是什么鬼,为什么还有链接,不管了,点下看看。原来QQ邮箱还需要SSL加密,网易的不需要,所以报错了,网上还有说用什么企业邮箱服务器,smtp.exmail.qq.com
,我实在懒得试,而且我这个就不行了吗。然后加密就加密呗,加入了如下代码
MailSSLSocketFactory msf = new MailSSLSocketFactory();msf.setTrustAllHosts(true);props.put("mail.smtp.ssl.enable", "true");props.put("mail.smtp.ssl.socketFactory", msf);
但运行又报错,又发链接,这次点开,原来是授权码。为了QQ安全,改使用授权码替代邮箱密码进行验证登录。
授权码 QQ邮箱授权码介绍 这里有相关介绍和使用我就不多说了,自己看,说的很清楚
所以QQ邮箱发送,整个代码如下:
public class FeedBackActivity extends BaseActivity {@BindView(R.id.bt_send_mail)Button btSendMail;private MyMailTask myMailTask;@Overrideprotected int getContentViewId() {return R.layout.activity_feed_back;}@Overrideprotected void initData(Bundle savedInstanceState) {}@OnClick(R.id.bt_send_mail)public void onViewClicked() {myMailTask=new MyMailTask();myMailTask.execute();}private void send() {try {Properties props = new Properties();// 开启debug调试props.setProperty("mail.debug", "true");// 发送服务器需要身份验证props.setProperty("mail.smtp.auth", "true");// 设置邮件服务器主机名
// props.setProperty("mail.host", "smtp.163.com");// 设置邮件服务器主机名props.setProperty("mail.host", "smtp.qq.com");// 发送邮件协议名称props.setProperty("mail.transport.protocol", "smtp");MailSSLSocketFactory msf = new MailSSLSocketFactory();msf.setTrustAllHosts(true);props.put("mail.smtp.ssl.enable", "true");props.put("mail.smtp.ssl.socketFactory", msf);// 设置环境信息Session session = Session.getInstance(props);// 创建邮件对象Message msg = new MimeMessage(session);msg.setSubject("AndroidMail测试");// 设置邮件内容msg.setText("这是一封由大当家发送的邮件!");// 设置发件人msg.setFrom(new InternetAddress("752231513@qq.com"));Transport transport = session.getTransport();// 连接邮件服务器transport.connect("752231513@qq.com", "授权码(非密码)");// 发送邮件transport.sendMessage(msg, new Address[]{new InternetAddress("收件人邮箱")});// 关闭连接transport.close();} catch (MessagingException e) {e.printStackTrace();} catch (GeneralSecurityException e) {e.printStackTrace();}}private class MyMailTask extends AsyncTask<Void, Void, Void> {@Overrideprotected void onPreExecute() {super.onPreExecute();btSendMail.setText("正在发送中...");}@Overrideprotected Void doInBackground(Void... voids) {send();return null;}@Overrideprotected void onPostExecute(Void aVoid) {super.onPostExecute(aVoid);btSendMail.setText("发送成功");}@Overrideprotected void onCancelled() {super.onCancelled();}}
}
哈哈,大功告成,刚点击了按钮,桌面右下角就出现了
好了,到此发送163和QQ邮箱已经完成,希望能帮助到你们!
三个jar包的下载地址:http://download.csdn.net/download/qq_30548105/9989228
本人个人原创,如有雷同,纯属巧合,或者与本人联系,做改动。请转载或者CV组合标明出处,谢谢!(如有疑问或错误欢迎指出,本人QQ:752231513)
android mail发送邮件(包含163邮箱及qq邮箱,使用mail.jar,activation.jar,additionnal.jar)相关推荐
- java mail 554_javaMail 163 邮箱发 qq 邮箱 总是报 554 DT:SPM 163 smtp11
163 邮箱发 qq 邮箱 总是报 554 DT:SPM 163 smtp11 554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件.请检查是否有用户发送病毒或者垃圾邮件: ...
- SpringBoot发送邮件(网易邮箱,QQ邮箱,139邮箱)
添加依赖 <!-- 邮件服务 --> <dependency><groupId>org.springframework.boot</groupId>&l ...
- spring-boot邮件发送功能演示(163邮箱与QQ邮箱互发)
背景:使用 Spring Boot 发送邮件,演示的邮箱为 163邮箱与QQ邮箱,两者可以实现互发邮件. 问题:自己可以实现一下 QQ邮箱 发 QQ邮箱,163发163,是什么样的. 演示 :163 ...
- Outlook登录163邮箱,qq邮箱以及企业邮箱等邮箱
我用的是outlook2013版本 首先打开文件 选择添加账户 手动设置或其他服务器类型 选择POP或IMAP,点下一步 下面以163邮箱为例,qq邮箱和企业邮箱都类似(163邮箱和qq邮箱的pop怎 ...
- 使用java发送邮件的 application.yml的配置(阿里邮箱和QQ邮箱的配置)
下面列出 阿里个人邮箱的配置 mail:host: smtp.aliyun.comusername: xxxxx@aliyun.compassword: "xxxx登录密码"por ...
- Apple邮箱配置QQ邮箱,163邮箱,edu邮箱,gmail邮箱,获取gmail日历
Apple邮箱配置QQ邮箱,163邮箱,edu邮箱,gmail邮箱,获取gmail日历 基本思路可以照着这个教程来: 03 如何充分使用iOS自带的"邮件"?--iPhone宝藏A ...
- 网易163vip邮箱、163.net邮箱、新浪vip邮箱、QQ邮箱,哪款更符合商务邮件的需求
在现代商务沟通中,邮箱成为职场人士沟通交流的工具,那究竟哪种邮箱更符合商务往来的需求,TOM小编做了一个测评,将网易163vip邮箱,163.net邮箱,新浪vip邮箱,QQ邮箱等市面上常见的邮箱作对 ...
- 如何开启outlook邮箱的pop3和smtp_怎么在电子邮件客户端上登录腾讯邮箱(QQ邮箱 )?
常见的电子邮箱客户端:Foxmail.网易邮箱大师.Thunderbird.Outlook.Dreammail(DM Pro),这些客户端皆可添加腾讯邮箱(QQ邮箱 ). 本文以为畅邮(DM Pro) ...
- koa发送验证码至邮箱,QQ邮箱发送
提示:koa发送验证码至邮箱,QQ邮箱发送 文章目录 前言 一.依赖和邮箱设置 二.使用步骤 1.vue中Login.vue 2.vue中axios.js 3.koa中routes.js 4.koa中 ...
最新文章
- CVPR 2019论文阅读:Libra R-CNN如何解决不平衡对检测性能的影响?
- 如何通过DICOM的tag来判断3D图像的方向
- 怎么从github上下载一个vue项目在本地运行
- jsp文件通常用common_JSP使用commons-fileupload实现文件上传实例
- 新型序列化类库MessagePack,比JSON更快、更小的格式
- 【spring boot】 禁用/关闭数据源/DataSource
- VS2017 15.8第二个预览版本提升了对CPU Profiling和F#的支持
- 管理员账号_MaxCompute项目子账号做超级管理员
- sending data mysql_MySQL查询中Sending data占用大量时间的问题处理
- java 获取对象的大小限制_Java - 如何获取对象大小
- [转载]Magento 店铺多语言设置
- 微信内下载APK 微信浏览器apk下载的解决方案
- 代码动态改变view的大小
- 前端笔记05 - js
- java is alphabetic_\p{IsAlphabetic}
- 计算机nemurt.dll,DDD~领域事件中使用分布式事务
- JAVA Spring Security对接QQ快速登录(web应用)
- 五组数据告诉你倒闭企业的“死亡画像”
- 4 个 Python 编程游戏网站,玩嗨了~
- 解决Navicat连接mysql闪退问题
热门文章
- 编程之法-C语言应用开发与工程实践-C语言概述
- IE浏览器退役,终究还是被市场淘汰!
- 苏州大学计算机论文多少字,苏州大学本科论文格式
- win10升级工具_win10系统易升的卸载技巧
- com.google.common.base.Stopwatch 应用
- python画猪猪侠_猪猪侠简笔画怎么画
- iOS 图片编辑——涂鸦——随手指移动随意画线
- 字符串 转义 反转义
- 幂律分布(python)
- java职业发展路线图_从程序员到CTO的Java技术路线图 JAVA职业规划 JAVA职业发展路线图 系统后台框架图、前端工程师技能图 B2C电子商务基础系统架构解析...