一、下载jar包并导入项目中
使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 JavaMail API 和Java Activation Framework (JAF) 。
- 您可以从 Java 网站下载最新版本的 JavaMail,打开网页右侧有个 Downloads 链接,点击它下载。
- 您可以从 Java 网站下载最新版本的 JAF(版本 1.1.1)。
- JavaMail mail.jar 1.4.5
- JAF(版本 1.1.1) activation.jar
二、示例
1、发送简单的邮件
package com.zhouzy.base.t10;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.junit.Test;
public class MailTest {
@Test
public void sendMail(){
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.transport.protocol", "smtp");
Session session = Session.getInstance(props);
try {
//邮件内容部分
Message msg = new MimeMessage(session);
msg.setSubject("邮件主体测试");
StringBuilder builder = new StringBuilder();
builder.append("欢迎大家来学习java入门课程,地址:https://blog.csdn.net/wwwzhouzy/category_11249888.html");
builder.append("\n");
builder.append("欢迎关注我,后续会有更多精彩分享!" );
msg.setText(builder.toString());
//邮件发送者
msg.setFrom(new InternetAddress("test@163.com"));
//发送邮件
Transport transport = session.getTransport();
transport.connect("smtp.163.com", "你的邮箱", "邮箱发送授权码");
transport.sendMessage(msg, new Address[]{ new InternetAddress("接收者邮箱1","接收者邮箱2") });
transport.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
结果:
Transport transport设置你的服务器邮箱地址和邮箱授权码,登录163邮箱,开启服务
开启之后会给你一个授权码,保存下来!
2、发送附件(支持html)
package com.zhouzy.base.t10;
import java.io.File;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
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.junit.Test;
public class MailTest {
@Test
public void sendMail(){
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.transport.protocol", "smtp");
Session session = Session.getInstance(props);
try {
//邮件内容部分
Message msg = new MimeMessage(session);
msg.setSubject("邮件主体测试");
StringBuilder builder = new StringBuilder();
//简单文本
/*builder.append("欢迎大家来学习java入门课程,地址:https://blog.csdn.net/wwwzhouzy/category_11249888.html");
builder.append("\n");
builder.append("欢迎关注我,后续会有更多精彩分享!" );
msg.setText(builder.toString());*/
//支持html的邮件
//String data = "<b>欢迎大家来学习java入门课程</b>,地址:<a href='https://blog.csdn.net/wwwzhouzy/category_11249888.html'>java入门</a>";
//msg.setContent(data, "text/html;charset=utf8");
//附件
//实例化一个bodypart用于封装内容
File file = new File("E://test.txt");
Multipart multipart = new MimeMultipart();
BodyPart bodyPart = new MimeBodyPart();
bodyPart.setContent("<font color='red'>这个是带有附件的HTML内容</font>","text/html;charset=utf8");
//添加bodypart到multipart
multipart.addBodyPart(bodyPart);
//每一个部分实例化一个bodypart,故每个附件也需要实例化一个bodypart
bodyPart = new MimeBodyPart();
//实例化DataSource(来自jaf),参数为文件的地址
DataSource dataSource = new FileDataSource(file.getAbsolutePath());
//使用datasource实例化datahandler
DataHandler dataHandler = new DataHandler(dataSource);
bodyPart.setDataHandler(dataHandler);
//设置附件标题,使用MimeUtility进行名字转码,否则接收到的是乱码
bodyPart.setFileName(javax.mail.internet.MimeUtility.encodeText(file.getName()));
multipart.addBodyPart(bodyPart);
msg.setContent(multipart);
//邮件发送者
msg.setFrom(new InternetAddress("发送者邮箱地址"));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress("接收者邮箱1","接收者邮箱2") );
//发送邮件
Transport transport = session.getTransport();
transport.connect("smtp.163.com", "发送服务器邮箱地址", "授权码");
transport.sendMessage(msg,msg.getAllRecipients());
transport.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
结果: