Java發送郵件(含附件)
- 2020 年 1 月 21 日
- 筆記
前幾天寫了一個Java發送郵件的幫助類i,可以發送QQ和163的郵箱,也可以發送附件,寫個一個主要的方法,其他的可以自己封裝。代碼如下:
引入pom:
<dependency> <groupId>Javax.mail</groupId> <artifactId>Javax.mail-api</artifactId> <version>1.6.2</version> </dependency>
package com.pay.utils; import com.pay.utils.enums.MailType; import org.springframework.util.StringUtils; import Javax.activation.*; import Javax.mail.*; import Javax.mail.internet.*; import Javax.mail.util.ByteArrayDataSource; import Java.io.*; import Java.util.HashMap; import Java.util.Map; import Java.util.Properties; public class MailSender { private MailType mailType; private String userName; private String passWord; private Properties properties; public MailSender(MailType mailType, String userName, String passWord) { this.mailType = mailType; this.userName = userName; this.passWord = passWord; this.properties = getProperties(); } public boolean sender(String recivers, String cc, String mailTitle, String mailContent, boolean isHtml, Map<String, byte[]> mapFile) throws MessagingException, IOException { Session session = Session.getInstance(properties); //2.通過session獲取Transport對象(發送郵件的核心API) Transport ts = session.getTransport(); //3.通過郵件用戶名密碼鏈接 ts.connect(properties.getProperty("mail.host"), userName, this.passWord); //4.創建郵件 MimeMessage mm = new MimeMessage(session); //設置發件人 mm.setFrom(new InternetAddress(userName)); Address[] address = new InternetAddress().parse(recivers); mm.setRecipients(Message.RecipientType.TO, address); //設置抄送人 if (!StringUtils.isEmpty(cc)) { mm.setRecipient(Message.RecipientType.CC, new InternetAddress(cc)); } mm.setSubject(mailTitle); if (!isHtml) { mailContent = String.format("<pre>%s</pre>", mailContent); } // mm.setContent(mailContent, "text/html;charset=utf-8"); // 創建多重消息 Multipart multipart = new MimeMultipart(); BodyPart bodyPart = new MimeBodyPart(); bodyPart.setContent(mailContent, "text/html;charset=utf-8"); multipart.addBodyPart(bodyPart); if (mapFile != null) { MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); mc.addMailcap("text/html;; x-Java-content-handler=com.sun.mail.handlers.text_html"); mc.addMailcap("text/xml;; x-Java-content-handler=com.sun.mail.handlers.text_xml"); mc.addMailcap("text/plain;; x-Java-content-handler=com.sun.mail.handlers.text_plain"); mc.addMailcap("multipart/*;; x-Java-content-handler=com.sun.mail.handlers.multipart_mixed"); mc.addMailcap("message/rfc822;; x-Java-content-handler=com.sun.mail.handlers.message_rfc822"); CommandMap.setDefaultCommandMap(mc); for (Map.Entry<String, byte[]> map : mapFile.entrySet()) { BodyPart messageBodyPart = new MimeBodyPart(); InputStream inputStream = new ByteArrayInputStream(map.getValue()); DataSource source = new ByteArrayDataSource(inputStream, "application/txt"); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(MimeUtility.encodeText(map.getKey())); multipart.addBodyPart(messageBodyPart); } mm.setContent(multipart); } //5.發送電子郵件 ts.sendMessage(mm, mm.getAllRecipients()); return true; } private Properties getProperties() { if (this.mailType.equals(MailType.m163)) { Properties prop = new Properties(); prop.put("mail.host", "smtp.163.com"); prop.put("mail.transport.protocol", "smtp"); prop.put("mail.smtp.auth", true); return prop; } if (this.mailType.equals(MailType.qq)) { Properties prop = new Properties(); prop.setProperty("mail.host", "smtp.qq.com"); prop.setProperty("mail.transport.protocol", "smtp"); prop.setProperty("mail.smtp.auth", "true"); prop.setProperty("mail.smtp.socketFactory.class", "Javax.net.ssl.SSLSocketFactory"); prop.setProperty("mail.smtp.port", "465"); prop.setProperty("mail.smtp.socketFactory.port", "465"); return prop; } return null; } }
public enum MailType { m163, qq }