Android 发送邮件消息

用途:发送验证码,通过邮箱找回密码

不需要调用客户端直接使用代码进行发送

本项目使用到的jar包–本文结尾会附带下载链接

  1. activation.jar
  2. additionnal.jar
  3. mail.jar

主Activity代码:

具体页面结构:一个按钮,点击按钮发送邮件到指定的邮箱

按钮的点击事件逻辑

记得链接网络必须在子线程中

  1. /**
  2. * 发送邮件
  3. * 我这里是用的163邮箱发送到QQ邮箱
  4. * 所以设置的MailServerHost为smtp.163.com
  5. * 如果是QQ邮箱进行发送的话为smtp.qq.com
  6. * 端口号请自行查阅是否为25
  7. * 邮箱密码在后面有具体的说明,请看一下
  8. */
  9. private void sendEmail() {
  10. try {
  11. MailSenderInfo mailInfo = new MailSenderInfo();
  12. mailInfo.setMailServerHost("smtp.163.com");
  13. mailInfo.setMailServerPort("25");
  14. mailInfo.setValidate(true);
  15. mailInfo.setUserName("你的邮箱地址"); //你的邮箱地址
  16. mailInfo.setPassword("您的邮箱密码");//您的邮箱密码
  17. mailInfo.setFromAddress("你的邮箱地址");//和上面username的邮箱地址一致
  18. mailInfo.setToAddress("接收方的邮件地址");
  19. mailInfo.setSubject("邮件主题");
  20. mailInfo.setContent("邮件内容");
  21. //这个类主要来发送邮件
  22. SimpleMailSender sms = new SimpleMailSender();
  23. boolean b = sms.sendTextMail(mailInfo);//发送文体格式,返回是否发送成功的boolean类型
  24. Log.e("MainActivity", "MainActivity sendEmail()"+b);//sms.sendHtmlMail(mailInfo);//发送html格式
  25. } catch (Exception e) {
  26. Log.e("SendMail", e.getMessage(), e);
  27. }
  28. }

关于邮箱密码的说明

由于是android端发送邮件,属于客户端进行发送邮件,所以直接用邮件的登录密码进行发送是不可以的,需要在PC网页端进行设置自己的邮箱:开启POP3/SMTP/IMAP服务

QQ邮箱和163邮箱的设置方法

163邮箱设置方法-你的感冒清

QQ邮箱设置方法-你的感冒清

邮件的实体类代码


  1. public class MailSenderInfo {
  2. // 发送邮件的服务器的IP和端口
  3. private String mailServerHost;
  4. private String mailServerPort = "25";
  5. // 邮件发送者的地址
  6. private String fromAddress;
  7. // 邮件接收者的地址
  8. private String toAddress;
  9. // 登陆邮件发送服务器的用户名和密码
  10. private String userName;
  11. private String password;
  12. // 是否需要身份验证
  13. private boolean validate = true;
  14. // 邮件主题
  15. private String subject;
  16. // 邮件的文本内容
  17. private String content;
  18. // 邮件附件的文件名
  19. private String[] attachFileNames;
  20. /**
  21. * 获得邮件会话属性
  22. */
  23. public Properties getProperties() {
  24. Properties p = new Properties();
  25. p.put("mail.smtp.host", this.mailServerHost);
  26. p.put("mail.smtp.port", this.mailServerPort);
  27. p.put("mail.smtp.auth", validate ? "true" : "false");
  28. return p;
  29. }
  30. public String getMailServerHost() {
  31. return mailServerHost;
  32. }
  33. public void setMailServerHost(String mailServerHost) {
  34. this.mailServerHost = mailServerHost;
  35. }
  36. public String getMailServerPort() {
  37. return mailServerPort;
  38. }
  39. public void setMailServerPort(String mailServerPort) {
  40. this.mailServerPort = mailServerPort;
  41. }
  42. public boolean isValidate() {
  43. return validate;
  44. }
  45. public void setValidate(boolean validate) {
  46. this.validate = validate;
  47. }
  48. public String[] getAttachFileNames() {
  49. return attachFileNames;
  50. }
  51. public void setAttachFileNames(String[] fileNames) {
  52. this.attachFileNames = fileNames;
  53. }
  54. public String getFromAddress() {
  55. return fromAddress;
  56. }
  57. public void setFromAddress(String fromAddress) {
  58. this.fromAddress = fromAddress;
  59. }
  60. public String getPassword() {
  61. return password;
  62. }
  63. public void setPassword(String password) {
  64. this.password = password;
  65. }
  66. public String getToAddress() {
  67. return toAddress;
  68. }
  69. public void setToAddress(String toAddress) {
  70. this.toAddress = toAddress;
  71. }
  72. public String getUserName() {
  73. return userName;
  74. }
  75. public void setUserName(String userName) {
  76. this.userName = userName;
  77. }
  78. public String getSubject() {
  79. return subject;
  80. }
  81. public void setSubject(String subject) {
  82. this.subject = subject;
  83. }
  84. public String getContent() {
  85. return content;
  86. }
  87. public void setContent(String textContent) {
  88. this.content = textContent;
  89. }
  90. }

简单邮件(不带附件的邮件)发送器 代码


  1. /**
  2. * 简单邮件(不带附件的邮件)发送器
  3. */
  4. public class SimpleMailSender {
  5. /**
  6. * 以文本格式发送邮件
  7. *
  8. * @param mailInfo 待发送的邮件的信息
  9. */
  10. public boolean sendTextMail(MailSenderInfo mailInfo) {
  11. // 判断是否需要身份认证
  12. MyAuthenticator authenticator = null;
  13. Properties pro = mailInfo.getProperties();
  14. if (mailInfo.isValidate()) {
  15. // 如果需要身份认证,则创建一个密码验证器
  16. authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
  17. }
  18. // 根据邮件会话属性和密码验证器构造一个发送邮件的session
  19. Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
  20. try {
  21. // 根据session创建一个邮件消息
  22. Message mailMessage = new MimeMessage(sendMailSession);
  23. // 创建邮件发送者地址
  24. Address from = new InternetAddress(mailInfo.getFromAddress());
  25. // 设置邮件消息的发送者
  26. mailMessage.setFrom(from);
  27. // 创建邮件的接收者地址,并设置到邮件消息中
  28. Address to = new InternetAddress(mailInfo.getToAddress());
  29. mailMessage.setRecipient(Message.RecipientType.TO, to);
  30. // 设置邮件消息的主题
  31. mailMessage.setSubject(mailInfo.getSubject());
  32. // 设置邮件消息发送的时间
  33. mailMessage.setSentDate(new Date());
  34. // 设置邮件消息的主要内容
  35. String mailContent = mailInfo.getContent();
  36. mailMessage.setText(mailContent);
  37. // 发送邮件
  38. Transport.send(mailMessage);
  39. return true;
  40. } catch (MessagingException ex) {
  41. ex.printStackTrace();
  42. }
  43. return false;
  44. }
  45. /**
  46. * 以HTML格式发送邮件
  47. *
  48. * @param mailInfo 待发送的邮件信息
  49. */
  50. public static boolean sendHtmlMail(MailSenderInfo mailInfo) {
  51. // 判断是否需要身份认证
  52. MyAuthenticator authenticator = null;
  53. Properties pro = mailInfo.getProperties();
  54. //如果需要身份认证,则创建一个密码验证器
  55. if (mailInfo.isValidate()) {
  56. authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
  57. }
  58. // 根据邮件会话属性和密码验证器构造一个发送邮件的session
  59. Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
  60. try {
  61. // 根据session创建一个邮件消息
  62. Message mailMessage = new MimeMessage(sendMailSession);
  63. // 创建邮件发送者地址
  64. Address from = new InternetAddress(mailInfo.getFromAddress());
  65. // 设置邮件消息的发送者
  66. mailMessage.setFrom(from);
  67. // 创建邮件的接收者地址,并设置到邮件消息中
  68. Address to = new InternetAddress(mailInfo.getToAddress());
  69. // Message.RecipientType.TO属性表示接收者的类型为TO
  70. mailMessage.setRecipient(Message.RecipientType.TO, to);
  71. // 设置邮件消息的主题
  72. mailMessage.setSubject(mailInfo.getSubject());
  73. // 设置邮件消息发送的时间
  74. mailMessage.setSentDate(new Date());
  75. // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
  76. Multipart mainPart = new MimeMultipart();
  77. // 创建一个包含HTML内容的MimeBodyPart
  78. BodyPart html = new MimeBodyPart();
  79. // 设置HTML内容
  80. html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
  81. mainPart.addBodyPart(html);
  82. // 将MiniMultipart对象设置为邮件内容
  83. mailMessage.setContent(mainPart);
  84. // 发送邮件
  85. Transport.send(mailMessage);
  86. return true;
  87. } catch (MessagingException ex) {
  88. ex.printStackTrace();
  89. }
  90. return false;
  91. }
  92. }

辅助类


  1. public class MyAuthenticator extends Authenticator {
  2. String userName = null;
  3. String password = null;
  4. public MyAuthenticator() {
  5. }
  6. public MyAuthenticator(String username, String password) {
  7. this.userName = username;
  8. this.password = password;
  9. }
  10. protected PasswordAuthentication getPasswordAuthentication() {
  11. return new PasswordAuthentication(userName, password);
  12. }
  13. }

相关jar包下载

相关jar包一键打包下载

中间可能会遇到的问题

可能会出现的问题-你的感冒清

笔者QQ:你的感冒清(337081267)

android 发送邮件--实现 send email for android的更多相关文章

  1. Android App Crash, send email to author

    http://www.iriphon.com/2011/06/23/how-do-i-get-android-crash-logs/

  2. Python自动发送邮件-smtplib和email库

    ''' 一.先导入smtplib模块 导入MIMEText库用来做纯文本的邮件模板 二.发邮件几个相关的参数,每个邮箱的发件服务器不一样,以163为例子百度搜索服务器是 smtp.163.com 三. ...

  3. android发送邮件

    众所周知,在Android中调用其他程序进行相关处理,几乎都是使用的Intent,所以,Email也不例外. 在Android中,调用Email有三种类型的Intent:     Intent.ACT ...

  4. I.MX6 Android Linux UART send receive with multi-thread and multi-mode demo

    /******************************************************************************************* * I.MX6 ...

  5. Android入门(六):Android控件布局属性全解

    第一类:属性值为true或falseandroid:layout_centerHrizontal 水平居中 (Hrizontal表示水平)android:layout_centerVertical 垂 ...

  6. Try to write a script to send e-mail but failed

    #-*-coding: utf-8 -*- '''使用Python去发送邮件但是不成功,运行后,等待一段时间, 返回[Errno 10060] A connection attempt failed ...

  7. Android测试:Testing Apps on Android

    原文:https://developer.android.com/training/testing/index.html 测试你的App是开发过程中的重要组成部分.通过对应用程序持续的运行测试,你可以 ...

  8. android 数据存储<一>----android短信发送器之文件的读写(手机+SD卡)

    本文实践知识点有有三: 1.布局文件,android布局有相对布局.线性布局,绝对布局.表格布局.标签布局等,各个布局能够嵌套的. 本文的布局文件就是线性布局的嵌套 <LinearLayout ...

  9. 【Android开发精要笔记】Android组件模型解析

    Android组件模型解析 Android中的Mashup 将应用切分成不同类别的组件,通过统一的定位模型和接口标准将他们整合在一起,来共同完成某项任务.在Android的Mashup模式下,每个组件 ...

随机推荐

  1. git + gerrit push 代码问题

    关于refs/for 和 refs/heads: 1.     这个不是git的规则,而是gerrit的规则, 2.     Branches, remote-tracking branches, a ...

  2. layui打印表格自定义函数

    函数如下 function print (tablelayid) { var v = document.createElement("div"); var f = ["& ...

  3. Delphi驱动开发研究第一篇--实现原理

    Delphi能不能开发Windows的驱动程序(这里的驱动程序当然不是指VxD了^_^)一直是广大Delphi fans关注的问题.姑且先不说能或者不能,我们先来看看用Delphi开发驱动程序需要解决 ...

  4. 关于Qt 5-MSVC 2015 64位在 win7 64位系统debug程序崩溃的问题

     关于Qt 5-MSVC 2015 64位在 win7 64位系统debug程序崩溃的问题 在win7 64位系统安装VC2015的编译器,并安装了 Qt 5.6 -5.7 VC2015 64位版本测 ...

  5. 解释一下,知乎上关于C语言奇技淫巧最火的回答。

    前几天逛知乎,碰巧发现一个很火的问题. “C 语言有什么奇技淫巧?”虽然问题本身没有什么特殊的地方,但是网友的回答却是非常幽默. 下面就让我们一起来分析一下,被赞最多的答案“C 语言运算符 趋向于‘- ...

  6. uni-app $refs的基本用法

    $refs的基本用法 一个对象(Object),持有注册过 ref 特性 的所有 DOM 元素和组件实例. <template> <view class="containe ...

  7. 使用熔断器仪表盘监控(hystrix)

    概述 在 Ribbon 和 Feign 项目增加 Hystrix 仪表盘功能,两个项目的改造方式相同. 在 pom.xml 中增加依赖 <dependency> <groupId&g ...

  8. 面试官:你了解过Redis对象底层实现吗

    上一章我们讲了Redis的底层数据结构,不了解的人可能会有疑问:这个和平时用的五大对象有啥关系呢?这一章我们就主要解释他们所建立的联系. 看这个文件之前,如果对ziplist.skiplist.int ...

  9. 移动IM开发指南2:心跳指令详解

    <移动IM开发指南>系列文章将会介绍一个IM APP的方方面面,包括技术选型.登陆优化等.此外,本文作者会结合他在网易云信多年iOS IM SDK开发的经验,深度分析实际开发中的各种常见问 ...

  10. 【】input中 type=number 去掉箭头

    css中设置: input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: non ...