前文:
java利用javamail发送邮件,利用SMTP网络邮件传输协议。首先需要引入两个jar包:
<!-- email -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
需要邮箱的四个配置信息:host地址,port端口,account账号,password授权码(密码)。
账号需要开启smtp服务,qq邮箱和163邮箱都在账号设置那里开启,开启后验证后去授权码。有的邮箱服务商授权码就是密码,host地址一般而言是(smtp.xxx.cn),端口一般是25和465。
提供两种发送邮件的工具类(当第一种方法与邮箱服务器建立不了连接的话,使用第二种ssl的方式建立连接):
先给你一个后台java正则验证邮箱是否合法的方法:
public static boolean isEmail(String email) {
if (email == null)
return false;
String regEx1 = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
Pattern p;
Matcher m;
p = Pattern.compile(regEx1);
m = p.matcher(email);
if (m.matches())
return true;
else
return false;
}
第一种:
private static final String HOST= "";
private static final String ACCOUNT= "";
private static final String PASSWORD= "";
private static final Integer PROT= "";
/**
与邮件服务器建立连接
*/
public static JavaMailSenderImpl createJavaMailSender(){
JavaMailSenderImpl sender=new JavaMailSenderImpl();
sender.setDefaultEncoding("utf-8");
//设置邮件服务器的host地址
sender.setHost(HOST);
//设置账号
sender.setUsername(account);
//设置密码,,授权码
sender.setPassword(PASSWORD);
//设置端口号,可以不设置,默认是25
sender.setPort(PROT);
Properties pro=new Properties();
pro.setProperty("mail.smtp.auth", "true");
pro.setProperty("mail.smtp.timeout", "40000");
sender.setJavaMailProperties(pro);
return sender;
}
/**
* 发送html邮件。邮件内容可以包含html标签和css样式
* 传两个参数,一个是收件人账号,一个是发送的内容
* @throws MessagingException
*/
public static boolean sendHtmlMail(String to,String html,String theme) throws MessagingException{
if (StringUtils.isBlank(to)) {
return false;
}
//创建邮件服务器
JavaMailSenderImpl sender=createJavaMailSender();
try {
//创建邮件消息模版
MimeMessage mess=sender.createMimeMessage();
//创建消息模板帮助类,当后面加上true的时候,代表当前类可以支持发送附件
MimeMessageHelper helper=new MimeMessageHelper(mess, true);
//设置发件人,注意要和登陆人账号保持一致
helper.setFrom(ACCOUNT);
//设置收件人,支持发送多个
helper.setTo(to);
//设置抄送名称,即头标题.主题
helper.setSubject(theme);
//设置邮件内容,当后面为true的时候可以发送html内容
helper.setText(html,true);
//设置附件,附件路径有本地和网路路径之分new UrlResource(filepath)处理网络文件的
//MimeUtility.encodeWord解决中文名称乱码问题
// helper.addAttachment("图片.jpg", new FileDataSource("D:/image/a0.jpg"));
sender.send(mess);
return true;
} catch (Exception e) {
try {
Thread.sleep(1000 * 1000);
sendHtmlMail(to, html,theme);
} catch (InterruptedException e1) {
system.out.prinln("第二次报错:"+e.getMessage());
return false;
}
system.out.prinln("第一次报错:"+e.getMessage());
}
return false;
}
/**
测试方法
*/
public static void main(String[] args) {
String content = "我们轻易的去吧";
endHtmlMail("1274832887@qq.com", content, "主題");
}
第二种(用ssl的方式与邮件服务器建立连接):
private static final String HOST= "";
private static final String ACCOUNT= "";
private static final String PASSWORD= "";
private static final Integer PROT= "";
/**
* 发送邮件(灵活度高,通用版)
* @param from 发件人
* @param to 收件人, 多个Email以英文逗号分隔
* @param subject 主题
* @param content 内容
* @return
*/
public static boolean sendHtmlMail(String to, String content,String subject){
if (StringUtils.isBlank(to)) {
return false;
}
try {
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
final Properties p = System.getProperties() ;
p.setProperty("mail.smtp.host", Global.getConfig("email.host"));
p.setProperty("mail.smtp.auth", "true");
p.setProperty("mail.smtp.user", Global.getConfig("email.account"));
p.setProperty("mail.smtp.pass", Global.getConfig("email.password"));
p.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
p.setProperty("mail.smtp.socketFactory.fallback", "false");
//邮箱发送服务器端口,这里设置为465端口
p.setProperty("mail.smtp.port", "465");
p.setProperty("mail.smtp.socketFactory.port", "465");
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session session = Session.getInstance(p, new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(p.getProperty("mail.smtp.user"),p.getProperty("mail.smtp.pass"));
}
});
session.setDebug(true);
Message message = new MimeMessage(session);
//消息发送的主题
message.setSubject(subject);
//接受消息的人
message.setReplyTo(InternetAddress.parse(Global.getConfig("email.account")));
//消息的发送者
message.setFrom(new InternetAddress(p.getProperty("mail.smtp.user"),"开易样品"));
// 创建邮件的接收者地址,并设置到邮件消息中
String[] split = to.split(",");
InternetAddress []tos = new InternetAddress[split.length];
for (int i = 0; i < split.length; i++) {
tos[i]=new InternetAddress(split[i]);
}
message.setRecipients(Message.RecipientType.TO, tos);
// 消息发送的时间
message.setSentDate(new Date());
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
// 设置HTML内容
html.setContent(content, "text/html; charset=utf-8");
mainPart.addBodyPart(html);
// 将MiniMultipart对象设置为邮件内容
message.setContent(mainPart);
message.setContent(mainPart);
message.saveChanges();
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
return false;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
测试方法
*/
public static void main(String[] args) {
String content = "我们轻易的去吧";
endHtmlMail("992336338@qq.com", content, "主題");
}