邮件发送功能在企业及项目中用的比较多,前段时间项目中用到了邮件发送,这里就记载一下。本文只记载了JavaMail发送邮件。
一、java中邮件发送的方式:
1、javaMail发送邮件
2、结合Spring发送邮件的方式
可以参考另一篇博客:https://blog.csdn.net/fancheng614/article/details/86500678
二、开通邮箱的STMP
以QQ邮箱为例:
三、Javamail发送邮件
1、导入jar包,mail.jar和activation.jar。我这里使用的maven。
<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.activation/activation -->
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
2、发送邮件的方法:
package com.mfc.util;
import java.security.GeneralSecurityException;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
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 com.sun.mail.util.MailSSLSocketFactory;
/**
* @author 74790
* 发送邮件的工具类
*/
public class MailUtils {
/**
* @param recipientEmail 收件人邮箱
* @param subject 邮件主题
* @param text 邮件内容
* @param attachments 附件路径
* @throws GeneralSecurityException
*/
public static void sendMail(String[] recipientEmail, String subject, String text, List<String> attachments) throws GeneralSecurityException{
//发件人邮箱
String from = "XXX@qq.com";
//指定发送邮件的主机为localhost
String host = "smtp.qq.com";
//获取系统属性
Properties properties = System.getProperties();
//设置邮件服务器
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
// 关于QQ邮箱,还要设置SSL加密,加上以下代码即可
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", sf);
//设置默认session对象
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// TODO Auto-generated method stub
return new PasswordAuthentication("XXX@qq.com", "授权码");
}
});
try {
//创建默认的MimeMessage对象
MimeMessage message = new MimeMessage(session);
//Set From:头部头字段
message.setFrom(new InternetAddress(from));
Address[] address = new Address[recipientEmail.length];
for (int i = 0; i < recipientEmail.length; i++) {
address[i] = new InternetAddress(recipientEmail[i]);
}
message.addRecipients(Message.RecipientType.TO, address);
//Set Subject:头部头字段(消息标题)
message.setSubject(subject);
//创建消息部分
BodyPart messageBodyPart = new MimeBodyPart();
//设置消息体(消息内容)
messageBodyPart.setText(text);
//创建多重消息
Multipart multipart = new MimeMultipart();
//设置文本消息部分
multipart.addBodyPart(messageBodyPart);
//附件部分
if(attachments != null){
for (String attachment : attachments) {
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachment);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(attachment);
multipart.addBodyPart(messageBodyPart);
}
}
//发送完整消息
message.setContent(multipart);
//发送消息
Transport.send(message);
System.out.println("Sent message successfully...");
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3、在springmvc的Controller中调用:
@RequestMapping(value = "sendMail")
@ResponseBody
public Map<String, Object> sendMail(HttpSession session) throws GeneralSecurityException{
Map<String, Object> map = new HashMap<String, Object>();
map.put("flag", "false");
System.out.println(session.getServletContext().getRealPath("/")+"myResouce/images/testmail.jpg");
String[] recipientEmail = {"XXX@qq.com","XXX@qq.com"};
String subject = "邮件主题";
String text = "邮件内容aaaaaaaaaaaa";
List<String> attachments = new ArrayList<String>();
attachments.add(session.getServletContext().getRealPath("/")+"myResouce/images/testmail.jpg");
attachments.add(session.getServletContext().getRealPath("/")+"myResouce/images/ceshi.txt");
MailUtils.sendMail(recipientEmail, subject, text, attachments);
map.put("flag", "true");
return map;
}