最近项目里有个发邮件的功能,不能调系统发邮件,也不能调用第三方的客户端,还必须可以发网易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)相关推荐

  1. java mail 554_javaMail 163 邮箱发 qq 邮箱 总是报 554 DT:SPM 163 smtp11

    163 邮箱发 qq 邮箱 总是报 554 DT:SPM 163 smtp11 554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件.请检查是否有用户发送病毒或者垃圾邮件: ...

  2. SpringBoot发送邮件(网易邮箱,QQ邮箱,139邮箱)

    添加依赖 <!-- 邮件服务 --> <dependency><groupId>org.springframework.boot</groupId>&l ...

  3. spring-boot邮件发送功能演示(163邮箱与QQ邮箱互发)

    背景:使用 Spring Boot 发送邮件,演示的邮箱为 163邮箱与QQ邮箱,两者可以实现互发邮件. 问题:自己可以实现一下 QQ邮箱 发 QQ邮箱,163发163,是什么样的. 演示 :163 ...

  4. Outlook登录163邮箱,qq邮箱以及企业邮箱等邮箱

    我用的是outlook2013版本 首先打开文件 选择添加账户 手动设置或其他服务器类型 选择POP或IMAP,点下一步 下面以163邮箱为例,qq邮箱和企业邮箱都类似(163邮箱和qq邮箱的pop怎 ...

  5. 使用java发送邮件的 application.yml的配置(阿里邮箱和QQ邮箱的配置)

    下面列出 阿里个人邮箱的配置 mail:host: smtp.aliyun.comusername: xxxxx@aliyun.compassword: "xxxx登录密码"por ...

  6. Apple邮箱配置QQ邮箱,163邮箱,edu邮箱,gmail邮箱,获取gmail日历

    Apple邮箱配置QQ邮箱,163邮箱,edu邮箱,gmail邮箱,获取gmail日历 基本思路可以照着这个教程来: 03 如何充分使用iOS自带的"邮件"?--iPhone宝藏A ...

  7. 网易163vip邮箱、163.net邮箱、新浪vip邮箱、QQ邮箱,哪款更符合商务邮件的需求

    在现代商务沟通中,邮箱成为职场人士沟通交流的工具,那究竟哪种邮箱更符合商务往来的需求,TOM小编做了一个测评,将网易163vip邮箱,163.net邮箱,新浪vip邮箱,QQ邮箱等市面上常见的邮箱作对 ...

  8. 如何开启outlook邮箱的pop3和smtp_怎么在电子邮件客户端上登录腾讯邮箱(QQ邮箱 )?

    常见的电子邮箱客户端:Foxmail.网易邮箱大师.Thunderbird.Outlook.Dreammail(DM Pro),这些客户端皆可添加腾讯邮箱(QQ邮箱 ). 本文以为畅邮(DM Pro) ...

  9. koa发送验证码至邮箱,QQ邮箱发送

    提示:koa发送验证码至邮箱,QQ邮箱发送 文章目录 前言 一.依赖和邮箱设置 二.使用步骤 1.vue中Login.vue 2.vue中axios.js 3.koa中routes.js 4.koa中 ...

最新文章

  1. CVPR 2019论文阅读:Libra R-CNN如何解决不平衡对检测性能的影响?
  2. 如何通过DICOM的tag来判断3D图像的方向
  3. 怎么从github上下载一个vue项目在本地运行
  4. jsp文件通常用common_JSP使用commons-fileupload实现文件上传实例
  5. 新型序列化类库MessagePack,比JSON更快、更小的格式
  6. 【spring boot】 禁用/关闭数据源/DataSource
  7. VS2017 15.8第二个预览版本提升了对CPU Profiling和F#的支持
  8. 管理员账号_MaxCompute项目子账号做超级管理员
  9. sending data mysql_MySQL查询中Sending data占用大量时间的问题处理
  10. java 获取对象的大小限制_Java - 如何获取对象大小
  11. [转载]Magento 店铺多语言设置
  12. 微信内下载APK 微信浏览器apk下载的解决方案
  13. 代码动态改变view的大小
  14. 前端笔记05 - js
  15. java is alphabetic_\p{IsAlphabetic}
  16. 计算机nemurt.dll,DDD~领域事件中使用分布式事务
  17. JAVA Spring Security对接QQ快速登录(web应用)
  18. 五组数据告诉你倒闭企业的“死亡画像”
  19. 4 个 Python 编程游戏网站,玩嗨了~
  20. 解决Navicat连接mysql闪退问题

热门文章

  1. 编程之法-C语言应用开发与工程实践-C语言概述
  2. IE浏览器退役,终究还是被市场淘汰!
  3. 苏州大学计算机论文多少字,苏州大学本科论文格式
  4. win10升级工具_win10系统易升的卸载技巧
  5. com.google.common.base.Stopwatch 应用
  6. python画猪猪侠_猪猪侠简笔画怎么画
  7. iOS 图片编辑——涂鸦——随手指移动随意画线
  8. 字符串 转义 反转义
  9. 幂律分布(python)
  10. java职业发展路线图_从程序员到CTO的Java技术路线图 JAVA职业规划 JAVA职业发展路线图 系统后台框架图、前端工程师技能图 B2C电子商务基础系统架构解析...