java集成exchange邮箱
maven项目
原文为
https://blog.csdn.net/xiaoxiaosu_37/article/details/53385289
https://blog.csdn.net/zwqhehe/article/details/104171528
1.导入依赖
javax.mail
mail
1.5.0-b01
2.实体类生成
import java.util.Vector;
public class Exchange {
private String displayName;
private String to;
private String from;
private String smtpServer;
private String username;
private String password;
private String subject;
private String content;
private boolean isExchange;
private String domain;
private boolean ifAuth;
private String filename;
private Vector file = new Vector(); // 用于保存发送附件的文件名的集合
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getSmtpServer() {
return smtpServer;
}
public void setSmtpServer(String smtpServer) {
this.smtpServer = smtpServer;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public boolean isExchange() {
return isExchange;
}
public void setExchange(boolean exchange) {
isExchange = exchange;
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public boolean isIfAuth() {
return ifAuth;
}
public void setIfAuth(boolean ifAuth) {
this.ifAuth = ifAuth;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public Vector getFile() {
return file;
}
public void setFile(Vector file) {
this.file = file;
}
/**
* @param smtpServer 发送服务器地址
* @param from 发送人地址
* @param displayName 发送人发送名
* @param to 接收人
* @param subject 主题
* @param content 内容
* @param isExchange 是否验证
* @param domain 域名
* @param username 用户登录名
* @param password 密码
*/
public Exchange(String smtpServer, String from, String displayName, String to,
String subject, String content, boolean isExchange, String domain,
String username, String password) {
this.smtpServer = smtpServer;
this.from = from;
this.displayName = displayName;
this.ifAuth = true;
this.to = to;
this.subject = subject;
this.content = content;
this.isExchange = isExchange;
this.domain = domain;
this.username = username;
this.password = password;
}
}
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class MailAuthenticator extends Authenticator {
/**
* 用户名(登录邮箱)
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 初始化邮箱和密码
*
* @param username 邮箱
* @param password 密码
*/
public MailAuthenticator(String username, String password) {
this.username = username;
this.password = password;
}
String getPassword() {
return password;
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
String getUsername() {
return username;
}
public void setPassword(String password) {
this.password = password;
}
public void setUsername(String username) {
this.username = username;
}
}
2.工具类
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Properties;
public class ExchangeMail {
/**
* 发送邮件
*/
public static HashMap send(Exchange exchange) {
HashMap map = new HashMap<>();
map.put("state", "success");
String message = "邮件发送成功!";
Session session = null;
Properties props = System.getProperties();
props.put("mail.smtp.host", exchange.getSmtpServer());
if (exchange.isExchange()) {
if (exchange.getDomain() == null || exchange.getDomain().equals("")) {
throw new RuntimeException("domain is null");
}
props.setProperty("mail.smtp.auth.ntlm.domain", exchange.getDomain());
}
if (exchange.isIfAuth()) { // 服务器需要身份认证
props.put("mail.smtp.auth", "true");
MailAuthenticator smtpAuth = new MailAuthenticator(exchange.getUsername(), exchange.getPassword());
session = Session.getDefaultInstance(props, smtpAuth);
} else {
props.put("mail.smtp.auth", "false");
session = Session.getDefaultInstance(props, null);
}
session.setDebug(true);
Transport trans = null;
try {
Message msg = new MimeMessage(session);
try {
Address from_address = new InternetAddress(exchange.getFrom(), exchange.getDisplayName());
msg.setFrom(from_address);
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
InternetAddress[] address = {new InternetAddress(exchange.getTo())};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(exchange.getSubject());
//设置传输文件
Multipart mp = new MimeMultipart();
MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(exchange.getContent().toString(), "text/html;charset=gb2312");
mp.addBodyPart(mbp);
if (!exchange.getFile().isEmpty()) {// 有附件
Enumeration efile = exchange.getFile().elements();
while (efile.hasMoreElements()) {
mbp = new MimeBodyPart();
exchange.setFilename(efile.nextElement().toString()); // 选择出每一个附件名
FileDataSource fds = new FileDataSource(exchange.getFilename()); // 得到数据源
mbp.setDataHandler(new DataHandler(fds)); // 得到附件本身并至入BodyPart
mbp.setFileName(fds.getName()); // 得到文件名同样至入BodyPart
mp.addBodyPart(mbp);
}
exchange.getFile().removeAllElements();
}
msg.setContent(mp); // Multipart加入到信件
msg.setSentDate(new Date()); // 设置信件头的发送日期
// 发送信件
msg.saveChanges();
trans = session.getTransport("smtp");
trans.connect(exchange.getSmtpServer(), exchange.getUsername(), exchange.getPassword());
trans.sendMessage(msg, msg.getAllRecipients());
trans.close();
} catch (AuthenticationFailedException e) {
map.put("state", "failed");
message = "邮件发送失败!错误原因:\n" + "身份验证错误!";
e.printStackTrace();
} catch (MessagingException e) {
message = "邮件发送失败!错误原因:\n" + e.getMessage();
map.put("state", "failed");
e.printStackTrace();
Exception ex = null;
if ((ex = e.getNextException()) != null) {
System.out.println(ex.toString());
ex.printStackTrace();
}
}
// System.out.println("\n提示信息:"+message);
map.put("message", message);
return map;
}
3.测试类
-
- 使用qq邮箱进行发送
-
- smtp地址为 smtp.qq.com stmp地址输入建议使用要发送邮件的邮箱在foxmail中验证邮箱类型以及其他信息,防止信息错误造成连接失败等问题
-
- domain域为 mail.qq.com
-
- from为发送地址与username相同为自己的邮箱
public void test() {
//设置SMTP服务器地址
String smtpServer = "smtp.qq.com";
//设置发件人的地址
String from = "111111@qq.com";
String userName = "111111@qq.com";
String password = "111111";
String displayName = "exchange mail";
String to = "111111@163.com";
String domain = "mail.qq.com";
String subject = "主题";
String content = "内容";
Exchange exchange = new Exchange(smtpServer, from, displayName,
to, subject, content, true, domain,
userName, password);
ExchangeMail.send(exchange);
}