简介

sun公司开源的邮件发送工具。

依赖

    implementation 'com.sun.mail:android-mail:1.6.0'
implementation 'com.sun.mail:android-activation:1.6.0'

一个简单的Demo演示:

import java.util.Date;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; public class MailSender {
private static final String userName = "181****991@163.com";
private static final String userPassword = "*******73"; public void send(){
new Thread(new Runnable() {//发送邮件一定要在子线程里
@Override
public void run() {
mail();
}
}).start();
} public void mail(){
// MyAuthenticator myAuthenticator = new MyAuthenticator(userName,userPassword);//身份认证继承重写也可以
Authenticator authenticator = new Authenticator() {//身份认证直接重写也没有问题
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName,userPassword);
}
};
try {
Properties properties = new Properties();// 邮件相关配置
properties.put("mail.smtp.host", "smtp.163.com");//邮箱服务地址
properties.put("mail.smtp.port", 25);//邮箱端口,QQ和163应该都是25端口
properties.put("mail.smtp.auth","true");//身份认证
Session session = Session.getDefaultInstance(properties,authenticator);// 根根配置以及验证器构造一个发送邮件的session
Message message = new MimeMessage(session);
Address from = new InternetAddress("181****991@163.com");//发送者地址
message.setFrom(from);
Address to = new InternetAddress("34*****05@qq.com");
message.setRecipient(Message.RecipientType.TO,to);//接收者地址
message.setSubject("这是一份测试邮件标题");//标题
message.setSentDate(new Date());
message.setText("这是一份测试邮件内容");
Transport.send(message);//发送邮件
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
// public class MyAuthenticator extends Authenticator{
// private String userName;
// private String userPassword;
// public MyAuthenticator(String userName,String userPassword){
// this.userName = userName;
// this.userPassword = userPassword;
// }
//
// @Override
// protected PasswordAuthentication getPasswordAuthentication() {
// return new PasswordAuthentication(userName,userPassword);
// }
// }
}

带附件发:

package com.test;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties; import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart; import org.apache.log4j.Logger;
import com.test.MailAuthenticator; public class SendMail { // 日志记录
private static Logger logger = Logger.getLogger(SendMail.class); public static MailAuthenticator authenticator;
private MimeMessage message;
private Session session;
private Transport transport;
private Properties properties = new Properties(); private String mailHost = null;
private String sender_username = null;
private String sender_password = null; /**
* 构造方法
*/
public SendMail() {
super();
} /**
* 供外界调用的发送邮件接口
*/
public boolean sendEmail(String title, String content, List<String> receivers, List<File> fileList) {
try {
// 初始化smtp发送邮件所需参数
initSmtpParams(); // 发送邮件
doSendHtmlEmail(title, content, receivers, fileList); } catch (Exception e) {
logger.error(e);
}
return true;
} /**
* 初始化smtp发送邮件所需参数
*/
private boolean initSmtpParams() { mailHost = "邮箱smtp服务器"; // 邮箱类型不同值也会不同
sender_username = "发件人邮箱";
sender_password = "发件人邮箱密码"; properties.put("mail.smtp.host", mailHost);// mail.envisioncitrix.com
properties.put("mail.smtp.auth", "true");
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.ssl.checkserveridentity", "false");
properties.put("mail.smtp.ssl.trust", mailHost); authenticator = new MailAuthenticator(sender_username, sender_password);
session = Session.getInstance(properties, authenticator);
session.setDebug(false);// 开启后有调试信息
message = new MimeMessage(session); return true;
} /**
* 发送邮件
*/
private boolean doSendHtmlEmail(String title, String htmlContent, List<String> receivers, List<File> fileList) {
try {
// 发件人
InternetAddress from = new InternetAddress(sender_username);
message.setFrom(from); // 收件人(多个)
InternetAddress[] sendTo = new InternetAddress[receivers.size()];
for (int i = 0; i < receivers.size(); i++) {
sendTo[i] = new InternetAddress(receivers.get(i));
}
message.setRecipients(MimeMessage.RecipientType.TO, sendTo); // 邮件主题
message.setSubject(title); // 添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart(); // 添加邮件正文
BodyPart contentPart = new MimeBodyPart();
contentPart.setContent(htmlContent, "text/html;charset=UTF-8");
multipart.addBodyPart(contentPart); // 遍历添加附件
if (fileList != null && fileList.size() > 0) {
for (File file : fileList) {
BodyPart attachmentBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(file);
attachmentBodyPart.setDataHandler(new DataHandler(source));
attachmentBodyPart.setFileName(file.getName());
multipart.addBodyPart(attachmentBodyPart);
}
} // 将多媒体对象放到message中
message.setContent(multipart); // 保存邮件
message.saveChanges(); // SMTP验证,就是你用来发邮件的邮箱用户名密码
transport = session.getTransport("smtp");
transport.connect(mailHost, sender_username, sender_password); // 发送邮件
transport.sendMessage(message, message.getAllRecipients()); System.out.println(title + " Email send success!");
} catch (Exception e) {
logger.error(e);
} finally {
if (transport != null) {
try {
transport.close();
} catch (MessagingException e) {
logger.error(e);
}
}
}
return true;
} /**
* 测试main
*/
public static void main(String[] args) {
// 邮件主题
String title = "邮件主题"; // 邮件正文
String htmlContent = "邮件内容"; // 收件人
List<String> receivers = new ArrayList<String>();
receivers.add("收件人邮箱1");
receivers.add("收件人邮箱2"); // 附件
String fileName1 = "附件路径1";
File file1 = new File(fileName1);
String fileName2 = "附件路径2";
File file2 = new File(fileName2);
List<File> fileList = new ArrayList<File>();
fileList.add(file1);
fileList.add(file2); // 执行发送
new SendMail().sendEmail(title, htmlContent, receivers, fileList);
} }

Android 开发 使用javax.mail发送邮件。的更多相关文章

  1. 使用Javax.mail 发送邮件

    使用Javax.mail 发送邮件 详细说明都在代码中: 引入依赖  <!--sun定义的一套接收.发送电子邮件的API-->    <dependency>      < ...

  2. javax.mail 发送邮件异常

    一.运行过程抛出异常 1.Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/ ...

  3. javax.mail 发送邮件 , greenMail 测试 , spring

    发送邮件接口: package com.manxu.archetype.account.email; import javax.security.auth.login.AccountException ...

  4. 1.使用javax.mail, spring的JavaMailSender,springboot发送邮件

    一.java发邮件 电子邮件服务器:这些邮件服务器就类似于邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中,按功能划分有两种类型 SMTP邮件服务器:用户替用户发送邮件和接 ...

  5. Android开发之发送邮件功能的实现(源代码分享)

    Android开发中可能会碰到如何发送邮件的困扰,之前我也查了相关的文档,博友们也分享了不少的发送邮件的办法,总共有3种把,我仔细阅读了下,发现有的讲的太过复杂跟麻烦,不够清晰,我今天就来分享下我认为 ...

  6. Java使用javax.mail.jar发送邮件并同意发送附件

    因为Java在开发网页上占有绝大优势.所以作为web端的领军人物,譬如发送短信和发送邮件这些就成了必定,网络安全一再安全我们须要把账号的安全级别提到更高.因此这些对于开发者也就成了必须掌握的技能!我一 ...

  7. Android开发之发送邮件功能的实现(源码分享)

    Android开发中可能会碰到怎样发送邮件的困扰,之前我也查了相关的文档,博友们也分享了不少的发送邮件的办法.总共同拥有3种把,我细致阅读了下,发现有的讲的太过复杂跟麻烦,不够清晰.我今天就来分享下我 ...

  8. Android开发中怎样调用系统Email发送邮件(多种调用方式)

    在Android中调用其他程序进行相关处理,几乎都是使用的Intent,所以,Email也不例外,所谓的调用Email,只是说Email可以接收Intent并做这些事情 我们都知道,在Android中 ...

  9. javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specified?

    javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specifie ...

随机推荐

  1. 腾讯广告联盟 Android SDK(广点通)demo的使用方式

    1. 下载示例文件. 2. 解压之后的目录: 3. 使用android studio,选择import project,导入如图所示文件夹: 4. 重点来了,由于官方demo的上传时间很久远(大概是上 ...

  2. 2018.5.4 Unix的五种IO模型

    阻塞非阻塞和异步同步 同步和异步关注的是消息通信机制,关注两个对象之间的调用关系. 阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态,关注单一程序. Unix的五种IO模型 以下基于Li ...

  3. ubuntu18安装navicat

    1.登陆 http://www.navicat.com.cn/download/navicat-for-mysql 页面下载navicat安装包,务必选位置1-64bit ps: 中文版乱码问题严重, ...

  4. SDL播放YUV——循环

    #include "SDL.h" #include "as_lesson_log.h" #define PATH_YUV420 "/sdcard/ou ...

  5. 用雷达统计成绩单、numpy、matplotlib的使用

    #e19.1DrawRadar import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.rcPa ...

  6. Ubuntu18.04下make menuconfig缺少ncurses库

    kent@hu:~/work/03-kernel/linux-4.15.1$ make menuconfig *** Unable to find the ncurses libraries or t ...

  7. ansible常用模块入门

    常用模块有以下几个 command copy shell crond yum service setup 1.command模块 ansible george -m command -a " ...

  8. 2-Add Two Numbers @LeetCode

    2-Add Two Numbers @LeetCode 题目 思路 题目中得到的信息有: 这是两个非负数,每位分别保存在链表的一个结点上: 逆序保存,从低位到高位依次. 一般整数的相加都是从低往高进行 ...

  9. Thing in java 第5章,初始化和清理,练习题答案

    /** * Created by Sandy.Liu on 2018/7/28. * Thinking in java version 4, chapter 5, practice 2 * Creat ...

  10. Jquery 一个页面单个倒计时 实现

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...