JAVA邮件发送的简单实现
经过简单的学习,总结出java mail的发送分为以下几个步骤:
1:创建一个javax.mail.Authenticator的子类,并重写里面的getPasswordAuthentication()方法,次方法用于邮箱授权校验(当然,如果需要校验的话)。
2:创建一个properties文件,其中存方一些连接smtp邮件服务器的连接属性。
3:利用Authenticator和properties来创建一个Session,用于和smtp服务器进行交互。
4:创建javax.mail.internet.MimeMessage对象表示一封邮件,其中设置邮件的基本信息。
5:使用javax.mail.Transport来发送邮件。
以下是简单的实现代码:
package javamail.test;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class MyAuthenticator extends Authenticator {
private String userName;
private String passWord;
public MyAuthenticator(String userName, String passWord){
this.userName = userName;
this.passWord = passWord;
}
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(userName, passWord);
}
}
package javamail.test;
import java.util.Properties;
public class MailInfo {
// 邮件服务器ip
private String serverHost;
// 邮件服务器端口
private String serverPort = "25";
// 发送者地址
private String fromAddress;
// 接收者地址
private String toAddress;
// 登录名
private String userName;
// 密码
private String passWord;
// 是否需要身份验证
private boolean validate = false;
// 主题
private String subject;
// 内容
private String content;
private MailInfo(MailInfoBuilder builder){
this.serverHost = builder.serverHost;
this.serverPort = builder.serverPort;
this.fromAddress = builder.fromAddress;
this.toAddress = builder.toAddress;
this.userName = builder.userName;
this.passWord = builder.passWord;
this.validate = builder.validate;
this.subject = builder.subject;
this.content = builder.content;
}
/**
* 生成Properties
* @return
*/
public Properties getProperties(){
Properties pro = new Properties();
pro.put("mail.smtp.host", this.serverHost);
pro.put("mail.smtp.port", this.serverPort);
pro.put("mail.smtp.auth", validate ? "true" : "false");
return pro;
}
public String getServerHost() {
return serverHost;
}
public String getServerPort() {
return serverPort;
}
public String getFromAddress() {
return fromAddress;
}
public String getToAddress() {
return toAddress;
}
public String getUserName() {
return userName;
}
public String getPassWord() {
return passWord;
}
public boolean isValidate() {
return validate;
}
public String getSubject() {
return subject;
}
public String getContent() {
return content;
}
public static class MailInfoBuilder{
private String serverHost;
private String serverPort;
private String fromAddress;
private String toAddress;
private String userName;
private String passWord;
private boolean validate = false;
private String subject;
private String content;
public MailInfoBuilder setServerHost(String serverHost) {
this.serverHost = serverHost;
return this;
}
public MailInfoBuilder setServerPort(String serverPort) {
this.serverPort = serverPort;
return this;
}
public MailInfoBuilder setFromAddress(String fromAddress) {
this.fromAddress = fromAddress;
return this;
}
public MailInfoBuilder setToAddress(String toAddress) {
this.toAddress = toAddress;
return this;
}
public MailInfoBuilder setUserName(String userName) {
this.userName = userName;
return this;
}
public MailInfoBuilder setPassWord(String passWord) {
this.passWord = passWord;
return this;
}
public MailInfoBuilder setValidate(boolean validate) {
this.validate = validate;
return this;
}
public MailInfoBuilder setSubject(String subject) {
this.subject = subject;
return this;
}
public MailInfoBuilder setContent(String content) {
this.content = content;
return this;
}
public MailInfo build(){
return new MailInfo(this);
}
}
}
package javamail.test;
import java.util.Date;
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Message;
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;
public class MailSender {
/**
* text格式发送
*
* @param mailInfo
* @return
*/
public boolean sendTextMail(MailInfo mailInfo) {
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
if (mailInfo.isValidate()) {
// 如果需要身份认证,则创建一个密码验证器
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassWord());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
try {
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 设置邮件的发送人
mailMessage.setFrom(new InternetAddress(mailInfo.getFromAddress()));
// 设置邮件的接收人
mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(mailInfo.getToAddress()));
// 设置邮件的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件发送的时间
mailMessage.setSentDate(new Date());
// 设置邮件的内容
mailMessage.setText(mailInfo.getContent());
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (MessagingException e) {
e.printStackTrace();
}
return false;
}
/**
* html格式发送
*
* @param mailInfo
* @return
*/
public boolean sendTHtmlMail(MailInfo mailInfo) {
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties pro = mailInfo.getProperties();
if (mailInfo.isValidate()) {
// 如果需要身份认证,则创建一个密码验证器
authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassWord());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
try {
// 根据session创建一个邮件消息
Message mailMessage = new MimeMessage(sendMailSession);
// 设置邮件的发送人
mailMessage.setFrom(new InternetAddress(mailInfo.getFromAddress()));
// 设置邮件的接收人
mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(mailInfo.getToAddress()));
// 设置邮件的主题
mailMessage.setSubject(mailInfo.getSubject());
// 设置邮件发送的时间
mailMessage.setSentDate(new Date());
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart body = new MimeBodyPart();
// 设置HTML内容
body.setContent(mailInfo.getContent(), "text/html; charset=GBK");
mainPart.addBodyPart(body);
// 将MiniMultipart对象设置为邮件内容
mailMessage.setContent(mainPart);
// 设置邮件的内容
mailMessage.setText(mailInfo.getContent());
// 发送邮件
Transport.send(mailMessage);
return true;
} catch (MessagingException e) {
e.printStackTrace();
}
return false;
}
}
package javamail.test;
public class DoSend {
public static void main(String[] args) {
MailInfo mailInfo = new MailInfo.MailInfoBuilder()
.setServerHost("*******.com")
.setServerPort("25")
.setValidate(false)
.setFromAddress("***@**.com")
.setUserName("")
.setPassWord("")
.setToAddress("***@**.com")
.setSubject("邮件测试")
.setContent("你好!").build();
MailSender sender = new MailSender();
sender.sendTHtmlMail(mailInfo);
}
}