第一步、添加依赖包 <!-- email依赖包 --> <dependency > <groupId >javax.mail </groupId > <artifactId >mail </artifactId > <version >1.4.5 </version > </dependency > <dependency > <groupId >com.sun.mail </groupId > <artifactId >javax.mail </artifactId > <version >1.5.4 </version > </dependency >
第二步编写实现业务代码
package MailSendBean; import com.sun.mail.util.MailSSLSocketFactory; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.URLDataSource; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.*; import java.net.URL; import java.util.LinkedList; import java.util.List; import java.util.Properties; /** * @作者 亮哥 * @创建时间 2019/3/2 * @描述: 邮件发送工具类 */ public class MailUtil {
/** * 消息发送 * @param smtp 邮件服务器端口 * @param username 发件者用户名 * @param authPassword 发件者密码 * @param sendEmail 发件者邮箱 * @param recipient 接收者 * @param subject 主题 * @param content 邮件内容 * @param files 附件地址(文件服务器附件地址) * @throws Exception */ public static void send(String smtp,String username,String authPassword,String sendEmail,String recipient,String subject,String content,List<String> files) throws Exception { //跟smtp服务器建立一个连接 Properties p = new Properties(); // 开启debug调试,以便在控制台查看 p.setProperty("mail.debug", "false"); p.setProperty("mail.host", smtp);//指定邮件服务器,默认端口 25 p.setProperty("mail.smtp.auth", "true");//要采用指定用户名密码的方式去认证 // 发送邮件协议名称 p.setProperty("mail.transport.protocol", "smtp"); // 开启SSL加密,否则会失败 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); p.put("mail.smtp.ssl.enable", "true"); p.put("mail.smtp.ssl.socketFactory", sf); // 创建session Session session = Session.getInstance(p); // 通过session得到transport对象 Transport ts = session.getTransport(); // 连接邮件服务器:邮箱类型,帐号,授权码代替密码(更安全) ts.connect(smtp, username, authPassword); // 后面的字符是授权码,不能用qq密码 //声明一个Message对象(代表一封邮件),从session中创建 MimeMessage msg = new MimeMessage(session); //邮件信息封装 //1发件人 msg.setFrom( new InternetAddress(sendEmail) ); //2收件人 msg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(recipient) ); //3邮件内容:主题、内容 msg.setSubject(subject); //添加附件部分 //邮件内容部分1---文本内容 MimeBodyPart contentBody = new MimeBodyPart(); //邮件中的文字部分 contentBody.setContent(content,"text/html;charset=utf-8"); //把文字部分和附件部分组装在一起,设置到msg中 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(contentBody); if (files != null && !files.equals("")) { for (String file : files) { int lastIndexOf = file.lastIndexOf(":"); MimeBodyPart fileBody = new MimeBodyPart(); //附件1 URL url = new URL(file.substring(0, lastIndexOf)); DataSource dataSource=new URLDataSource(url); DataHandler dataHandler=new DataHandler(dataSource); fileBody.setDataHandler(dataHandler); fileBody.setContentID("testi"); fileBody.setFileName( MimeUtility.encodeText(file.substring(lastIndexOf+1)) );//中文附件名,解决乱码 mm.addBodyPart(fileBody); } } msg.setContent(mm); // 发送邮件 ts.sendMessage(msg,msg.getAllRecipients()); ts.close(); } public static void main(String[] args) { List<String> files=new LinkedList<>(); String content ="<p><br></p><p>hello world!!!</p><p><br></p><p> asg </p>"; try { send("smtp.imovie.cn", "chencl@xxx.cn", "CCll@520", "chencl@xxx.cn", "chencl@xxx.cn", "这是主题", content, files); } catch (Exception e) { e.printStackTrace(); } } }