记录一个java发送邮件代码,发送邮件需要三个java包链接:https://pan.baidu.com/s/14O2ExhQOAjhbGju2GjcyFg 密码:3hp5
package com.raying.abs.util.email;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
public class EmailSendUnit {
/**
* email地址正则表达式
*/
public static final String EMAIL_REG_EXP = "^(\\w)+(\\.\\w+)*@(\\w)+((\\.\\w+)+)$";//"^(\\w)+(.)*@(.)+$"
/**
* smtp服务器地址
*/
private String smtp;
/**
* 登录用户名
*/
private String userName;
/**
* 登录密码
*/
private String password;
/**
* 发件邮箱
*/
private String emailFrom;
/**
* 发件时是否身份验证,一般外部smtp服务器都要,否则发送不了
*/
private boolean auth = true;
public EmailSendUnit(String smtp, String userName, String password, String emailFrom, boolean auth) {
this.smtp = smtp;
this.userName = userName;
this.password = password;
this.emailFrom = emailFrom;
this.auth = auth;
}
public EmailSendUnit(String smtp, String userName, String password, String emailFrom) {
this.smtp = smtp;
this.userName = userName;
this.password = password;
this.emailFrom = emailFrom;
}
/**
* 发送邮件
*
* @param emailTos 收件email集
* @param title 标题
* @param text 正文
*/
public void send(String[] emailTos, String title, String text) throws Exception {
this.send(emailTos, null, null, title, text, null, true);
}
/**
* 发送邮件
*
* @param emailTos 收件email集
* @param title 标题
* @param text 正文
* @param isHtml
*/
public void send(String[] emailTos, String title, String text, Boolean isHtml) throws Exception {
this.send(emailTos, null, null, title, text, null, isHtml);
}
/**
* 发送邮件
*
* @param emailTos 收件email集
* @param emailCCTos 抄送email集
* @param title 标题
* @param text 正文
* @param isHtml
*/
public void send(String[] emailTos, String[] emailCCTos, String title, String text, Boolean isHtml) throws Exception {
this.send(emailTos, emailCCTos, null, title, text, null, isHtml);
}
/**
* 发送邮件
*
* @param emailTos 收件email集
* @param emailCCTos 抄送email集
* @param emailBCCTos 暗送email集
* @param title 标题
* @param text 正文
* @param attachments 附件集(本地文件地址)
* @param isHtml
*/
public void send(String[] emailTos, String[] emailCCTos, String[] emailBCCTos, String title, String text, String[] attachments, Boolean isHtml) {
try {
//====参数检查====
Address[] addrTos = this.castEmailAddress(emailTos);
if (addrTos == null || addrTos.length == 0) {
throw new RuntimeException("收件地址无效");
}
//====组装会话====
Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.host", smtp);
properties.put("mail.smtp.auth", String.valueOf(auth).toLowerCase());
Session session = Session.getInstance(properties);
//====组装邮件体====
MimeMessage message = new MimeMessage(session);//----最重要的,邮件体
MimeMultipart multipart = new MimeMultipart();
multipart.setSubType("related");
//----1:标题、正文、收件地址(多)、抄送地址(多)、暗送地址(多)
String titleStr = (title == null ? "" : title);
message.setSubject(titleStr);
message.setSentDate(new java.util.Date());
message.setFrom(new InternetAddress(emailFrom));
message.setRecipients(Message.RecipientType.TO, this.castEmailAddress(emailTos));
if (emailCCTos != null && emailCCTos.length > 0) {
Address[] addrCCs = this.castEmailAddress(emailCCTos);
if (addrCCs != null && addrCCs.length > 0) {
message.setRecipients(Message.RecipientType.CC, addrCCs);
}
}
if (emailBCCTos != null && emailBCCTos.length > 0) {
Address[] addrBCCs = this.castEmailAddress(emailBCCTos);
if (addrBCCs != null && addrBCCs.length > 0) {
message.setRecipients(Message.RecipientType.BCC, addrBCCs);
}
}
//----2:组装text/html格式的正文----
String textStr = text == null ? "" : text;
textStr = isHtml ? toHtml(textStr) : toText(textStr);
MimeBodyPart messageBodyText = new MimeBodyPart(); //正文的MimeBodyPart
messageBodyText.setContent(textStr, "text/html;charset=utf-8");
messageBodyText.setHeader("Content-ID ", "page ");
multipart.addBodyPart(messageBodyText);
// ----3:组装附件----
if (attachments != null && attachments.length > 0) {
for (int i = 0; i < attachments.length; i++) {
File attachFile = new File(attachments[i]);
if (!attachFile.exists() || !attachFile.isFile()) {
continue;
}
MimeBodyPart messageBodyAttach = new MimeBodyPart(); //附件的MimeBodyPart
messageBodyAttach.setDataHandler(new DataHandler(new FileDataSource(attachFile.getAbsolutePath())));
messageBodyAttach.setFileName(MimeUtility.encodeText(attachFile.getName(), "utf-8", null)); // 对附件名编码,防止乱码
multipart.addBodyPart(messageBodyAttach, i + 1); // index从1开始,0为邮件内容
}
}
message.setContent(multipart);
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(smtp, userName, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 组装邮件地址
*/
private Address[] castEmailAddress(String[] emailAddress) {
List<Address> adrList = new ArrayList<Address>();
if (emailAddress != null && emailAddress.length > 0) {
for (String e : emailAddress) {
Matcher m = Pattern.compile(EMAIL_REG_EXP).matcher(e);
if (m.find()) {
try {
adrList.add(new InternetAddress(e));
} catch (AddressException e1) {
}
}
}
}
return adrList.toArray(new Address[adrList.size()]);
}
/**
* html处理
*/
public String toHtml(String str) {
return str.replaceAll("\n", " ")
.replaceAll("\t", " ");
}
/**
* 转换目标文本,在网页上显示纯文本,无html效果(文本框中写的内容在网页上显的效果是一样的)
*/
public String toText(String str) {
return str.replaceAll("&", "&")
.replaceAll("<", "<")
.replaceAll(">", ">")
.replaceAll("\n", "<br>")
.replaceAll("\t", "	")
.replaceAll(" ", " ");
}
public static void main(String[] args) {
EmailSendUnit ems = new EmailSendUnit("smtp.exmail.qq.com", "madman@xxx.com", "xxxx", "madman@xxx.com");
String[] toEmail = {"1740963193@qq.com", "madman@xx.com"};
try {
ems.send(toEmail, "测试标题", "这是内容");
} catch (Exception e) {
e.printStackTrace();
}
}
}