Android 开发 使用javax.mail发送邮件。
简介
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发送邮件。的更多相关文章
- 使用Javax.mail 发送邮件
使用Javax.mail 发送邮件 详细说明都在代码中: 引入依赖 <!--sun定义的一套接收.发送电子邮件的API--> <dependency> < ...
- javax.mail 发送邮件异常
一.运行过程抛出异常 1.Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/ ...
- javax.mail 发送邮件 , greenMail 测试 , spring
发送邮件接口: package com.manxu.archetype.account.email; import javax.security.auth.login.AccountException ...
- 1.使用javax.mail, spring的JavaMailSender,springboot发送邮件
一.java发邮件 电子邮件服务器:这些邮件服务器就类似于邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中,按功能划分有两种类型 SMTP邮件服务器:用户替用户发送邮件和接 ...
- Android开发之发送邮件功能的实现(源代码分享)
Android开发中可能会碰到如何发送邮件的困扰,之前我也查了相关的文档,博友们也分享了不少的发送邮件的办法,总共有3种把,我仔细阅读了下,发现有的讲的太过复杂跟麻烦,不够清晰,我今天就来分享下我认为 ...
- Java使用javax.mail.jar发送邮件并同意发送附件
因为Java在开发网页上占有绝大优势.所以作为web端的领军人物,譬如发送短信和发送邮件这些就成了必定,网络安全一再安全我们须要把账号的安全级别提到更高.因此这些对于开发者也就成了必须掌握的技能!我一 ...
- Android开发之发送邮件功能的实现(源码分享)
Android开发中可能会碰到怎样发送邮件的困扰,之前我也查了相关的文档,博友们也分享了不少的发送邮件的办法.总共同拥有3种把,我细致阅读了下,发现有的讲的太过复杂跟麻烦,不够清晰.我今天就来分享下我 ...
- Android开发中怎样调用系统Email发送邮件(多种调用方式)
在Android中调用其他程序进行相关处理,几乎都是使用的Intent,所以,Email也不例外,所谓的调用Email,只是说Email可以接收Intent并做这些事情 我们都知道,在Android中 ...
- javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specified?
javamail发送邮件及错误解决方法javax.mail.AuthenticationFailedException: failed to connect, no password specifie ...
随机推荐
- echart 百度地图实现效果
1 必须引入 echarts.js文件 以及 china.js 点文件才可以执行代码2 ehcart官方文档有点小恶心,看了半天,好多东西都不是很清楚,必须挨个实验才行,希望对一些初学者来说可以少走一 ...
- C# 切分图片
public void Slice() { // 图片路径 var file = "F;/aaa.png"; // 水平切分 ; // 纵向切分 ; ; i < horizo ...
- 2. Packet crafting tools (封包工具 6个)
2. Packet crafting tools (封包工具 6个) NetcatHping这个方便小巧的实用程序组装并发送定制的ICMP,UDP或TCP数据包,然后显示任何回复. 它受到ping命令 ...
- 最新版SEMCMS_PHP_3.5 过滤不严导致sql注入
一.漏洞分析 在分析过程中看到网上已经有人发现semcms V2.4存在过滤不严导致sql注入的漏洞,不知道咋还没改,而且最新版过滤的关键字更少了. 首先查看首页文件index.php的代码 < ...
- jQuery事件合成
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...
- MySQL Hardware--网络测试
使用Ping测试丢包 ## ping测试 ## -c 100表示100次 ping -c 100 192.168.1.2 输出结果: ping -c 100 192.168.1.2 PING 192. ...
- Python Faker的使用(1):基础使用方法与函数速查,生成随机数据
在软件需求.开发.测试过程中,有时候需要使用一些测试数据,针对这种情况,我们一般要么使用已有的系统数据,要么需要手动制造一些数据. 在手动制造数据的过程中,可能需要花费大量精力和工作量,现在好了,有一 ...
- [随笔][Java][总结][java 类型系统]
java 的类型系统大体分为两类,对象和基本类型.java使用静态类型检查来保证类型安全.每个变量在使用之前需要声明.非静态类型的语言不要求变量在使用之前进行声明. 基本数据类型 java的基本类型不 ...
- VS Code直接编辑下一行
ctrl + enter 可以直接跳转到下一行进行编辑,本行后面的字符不受影响. 这在书写html脚本时非常有用.
- Azure CosmosDB (7) 分区键Partition Key
<Windows Azure Platform 系列文章目录> Azure Cosmos DB使用分区键(Partition Key),来对数据进行水平缩放(Horizon Scale), ...