javamail邮件发送
第一步:maven引入javamail相关jar包
<!-- javamail邮件发送 --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.4</version> </dependency> <!-- javamail邮件发送 -->
第二步:工具类已测试(注意:发送人邮箱要开启smtp服务,使用授权码作为密码)
package com.hailian.modules.credit.utils;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.Random;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendMailUtil {
// //发件人地址
public static String SenderAddress = "******@qq.com";
// //发件人账户名
public static String SenderAccount = "*********8@qq.com";
// //发件人账户密码
public static String SenderPassword = "*********************";
//收件人地址
public String recipientAddress;
public String recipientAddressCC;
//邮件主题
public String title;
//邮件内容
public String content;
public SendMailUtil(String recipientAddress, String recipientAddressCC, String title, String content) {
super();
this.recipientAddress = recipientAddress;
this.recipientAddressCC = recipientAddressCC;
this.title = title;
this.content = content;
}
public void sendMail() throws Exception {
//1、连接邮件服务器的参数配置
Properties props = new Properties();
//设置用户的认证方式
props.setProperty("mail.smtp.auth", "true");
//设置传输协议
props.setProperty("mail.transport.protocol", "smtp");
//设置发件人的SMTP服务器地址
props.setProperty("mail.smtp.host", "smtp.qq.com");
//2、创建定义整个应用程序所需的环境信息的 Session 对象
Session session = Session.getInstance(props);
//设置调试信息在控制台打印出来
session.setDebug(true);
//3、创建邮件的实例对象
Message msg = getMimeMessage(session,title,content);
//4、根据session对象获取邮件传输对象Transport
Transport transport = session.getTransport();
//设置发件人的账户名和密码
transport.connect(SenderAccount, SenderPassword);
//发送邮件,并发送到所有收件人地址,message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
transport.sendMessage(msg,msg.getAllRecipients());
//如果只想发送给指定的人,可以如下写法
//transport.sendMessage(msg, new Address[]{new InternetAddress("xxx@qq.com")});
//5、关闭邮件连接
transport.close();
}
/**
* 获得创建一封邮件的实例对象
* @param session
* @return
* @throws MessagingException
* @throws AddressException
*/
public MimeMessage getMimeMessage(Session session,String title,String content) throws Exception{
//创建一封邮件的实例对象
MimeMessage msg = new MimeMessage(session);
//防止成为垃圾邮件,披上outlook的马甲
msg.addHeader("X-Mailer","Microsoft Outlook Express 6.00.2900.2869");
//设置发件人地址
msg.setFrom(new InternetAddress(SenderAddress));
/**
* 设置收件人地址(可以增加多个收件人、抄送、密送),即下面这一行代码书写多行
* MimeMessage.RecipientType.TO:发送
* MimeMessage.RecipientType.CC:抄送
* MimeMessage.RecipientType.BCC:密送
*/
// 设置邮件接收方
Address[] internetAddressTo = new InternetAddress().parse(recipientAddress);
// msg.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(recipientAddress));
msg.setRecipients(MimeMessage.RecipientType.TO,internetAddressTo);
msg.addRecipients(MimeMessage.RecipientType.CC, InternetAddress.parse(SenderAddress));
//设置邮件主题
msg.setSubject(title,"UTF-8");
StringBuffer messageText=new StringBuffer();//内容以html格式发送,防止被当成垃圾邮件
messageText.append(content);
//设置邮件正文
msg.setContent(messageText.toString(), "text/html;charset=UTF-8");
//设置邮件的发送时间,默认立即发送
msg.setSentDate(new Date());
return msg;
}
public static String sendMailCode(String recipientAddress) {
String title="这是一封验证码邮件";
String code=getCode();
String content="您的验证码是:"+code+"。如果不是本人操作请忽略。";
try {
new SendMailUtil(recipientAddress, recipientAddress, title, content).sendMail();
} catch (Exception e) {
e.printStackTrace();
return code;
}
return code;
}
public static void main(String[] args) throws Exception {
sendMailCode("15269274025@163.com");
}
/**
* 生成邮箱验证码
* @author doushuihai
* @date 2018年10月10日上午11:03:44
* @TODO
*/
public static String getCode(){
StringBuffer sb=new StringBuffer();
Random random=new Random();
for(int i=0;i<6;i++){
sb.append(random.nextInt(10));
}
return sb.toString();
}
}
调用方式:
public static String sendMailCode(String recipientAddress) {
String title="这是一封验证码邮件";
String code=getCode();
String content="您的验证码是:"+code+"。如果不是本人操作请忽略。";
try {
new SendMailUtil(recipientAddress, recipientAddress, title, content).sendMail();
} catch (Exception e) {
e.printStackTrace();
return code;
}
return code;
}
附加:随着项目的进行 ,根据开发要求希望根据网络url文档作为附件发送。这也是可以实现的
package com.hailian.modules.credit.utils; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.security.Security; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Random; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.NoSuchProviderException; import javax.mail.PasswordAuthentication; 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.util.ByteArrayDataSource; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility; public class SendMailUtil { // //发件人地址 // public static String SenderAddress = "2530644578@qq.com"; public static String SenderAddress = "international@inter-credit.net"; // //发件人账户名 // public static String SenderAccount = "2530644578@qq.com"; public static String SenderAccount = "international@inter-credit.net"; // //发件人账户密码 // public static String SenderPassword = "typwolfiqocrecaf"; public static String SenderPassword = "Chris777"; //收件人地址 public static String recipientAddress; public String recipientAddressCC; //邮件主题 public static String title; //邮件内容 public static String content; public static List<Map<String,String>> list; public SendMailUtil(String recipientAddress,String recipientAddressCC,String title, String content,List<Map<String,String>> list) { super(); this.recipientAddress = recipientAddress; this.recipientAddressCC = recipientAddressCC; this.title = title; this.content = content; this.list = list; } public boolean sendEmail() throws Exception { boolean result=false; try { Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); Properties props = new Properties(); props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.store.protocol", "smtp"); props.setProperty("mail.smtp.host", "smtp.inter-credit.net"); props.setProperty("mail.smtp.port", "465"); props.setProperty("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.auth", "true"); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(SenderAddress, SenderPassword); } }); Message msg = getMimeMessage(session,title,content,list); Transport.send(msg); result=true; return result; } catch (NoSuchProviderException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } return result; } public static InputStream downLoadFromUrl(String urlStr) throws IOException{ URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置超时间为3秒 conn.setConnectTimeout(3*1000); //防止屏蔽程序抓取而返回403错误 conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); //得到输入流 InputStream inputStream = conn.getInputStream(); return inputStream; } /** * 获得创建一封邮件的实例对象 * @param session * @return * @throws MessagingException * @throws AddressException */ public MimeMessage getMimeMessage(Session session,String title,String content,List<Map<String,String>> list) throws Exception{ //创建一封邮件的实例对象 MimeMessage msg = new MimeMessage(session); String nick=javax.mail.internet.MimeUtility.encodeText("Inter-Credit"); msg.setFrom(new InternetAddress(SenderAddress, nick)); msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientAddress, false)); msg.addRecipients(Message.RecipientType.CC, InternetAddress.parse(SenderAddress)); msg.addRecipients(Message.RecipientType.CC, InternetAddress.parse(recipientAddressCC)); msg.setSubject(title); msg.setSentDate(new Date()); MimeMultipart multipart = new MimeMultipart("mixed"); // 邮件内容,采用HTML格式 MimeBodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.removeHeader("Content-Type"); messageBodyPart.removeHeader("Content-Transfer-Encoding"); messageBodyPart.addHeader("Content-Type", "text/html; charset=gbk"); messageBodyPart.addHeader("Content-Transfer-Encoding", "base64"); messageBodyPart.setContent(content, "text/html;charset=GBK"); multipart.addBodyPart(messageBodyPart); //内嵌图片 try { //添加附件 // messageBodyPart=new MimeBodyPart(); // DataSource dataSource1=new FileDataSource("d:/aa.doc"); // dataHandler=new DataHandler(dataSource1); // messageBodyPart.setDataHandler(dataHandler); // messageBodyPart.setFileName(MimeUtility.encodeText(dataSource1.getName())); if(CollectionUtils.isNotEmpty(list) && list != null){ for(Map<String,String> map:list){ for(String name : map.keySet()){ String fileURL = map.get(name); messageBodyPart=new MimeBodyPart(); InputStream is=downLoadFromUrl(fileURL); //DataSource dataSource1=new FileDataSource("d:/aa.doc"); DataSource dataSource1=new ByteArrayDataSource(is, "application/png"); DataHandler dataHandler=new DataHandler(dataSource1); messageBodyPart.setDataHandler(dataHandler); String subStringB = fileURL.substring(fileURL.lastIndexOf("/")+1); // messageBodyPart.setFileName(MimeUtility.encodeText(subStringB)); messageBodyPart.setFileName(MimeUtility.encodeText(name)); multipart.addBodyPart(messageBodyPart); } } } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } msg.setContent(multipart); msg.saveChanges(); return msg; } public static void main(String[] args) throws Exception { // sendMailCode("dou_shai@163.com"); //new SendMailUtil("15269274025@163.com", "", "你好", "mycontent", "http://60.205.229.238:9980/zhengxin_File/2018-11-16/1a183ad043a64af0bde653aa718cd144.doc").sendEmail(); List<Map<String,String>> list=new ArrayList<Map<String,String>>(); Map<String,String> map=new HashMap<String, String>(); map.put("哈哈.doc", "http://60.205.229.238:9980/zhengxin_File/2018-11-16/1a183ad043a64af0bde653aa718cd144.doc"); list.add(map); new SendMailUtil("dou_shuihai@163.com", "", "你好", "mycontent", list).sendEmail(); System.out.println("ok"); } }