Java Web stmp發(fā)送帶附件郵件(附SSL版)
本文實(shí)例為大家分享了Java Web stmp發(fā)送帶附件郵件的具體代碼,供大家參考,具體內(nèi)容如下
public class MailFileSendUtils { private Properties props; //系統(tǒng)屬性 private Session session; //郵件會(huì)話對(duì)象 private MimeMessage mimeMsg; //MIME郵件對(duì)象 private Multipart mp; //Multipart對(duì)象,郵件內(nèi)容,標(biāo)題,附件等內(nèi)容均添加到其中后再生成MimeMessage對(duì)象 /** * Constructor * @param */ public MailFileSendUtils(){ props = System.getProperties(); props.put("mail.smtp.auth","false"); session = Session.getDefaultInstance(props, null); session.setDebug(true); mimeMsg = new MimeMessage(session); mp = new MimeMultipart(); } /** * Constructor * @param smtp 郵件發(fā)送服務(wù)器 */ public MailFileSendUtils(String smtp, String username, String password){ props = System.getProperties(); props.put("mail.smtp.auth","true"); props.put("mail.smtp.host", smtp); props.put("username", username); props.put("password", password); session = Session.getDefaultInstance(props, null); session.setDebug(true); mimeMsg = new MimeMessage(session); mp = new MimeMultipart(); } /** * 發(fā)送郵件 */ public boolean sendMail(String from, String[] to, String subject, String content, String filename) { try { //設(shè)置發(fā)信人 mimeMsg.setFrom(new InternetAddress(from)); //設(shè)置接收人 for (int i = 0; i < to.length; i++) { mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to[i])); } //設(shè)置抄送人 // for (int i = 0; i < copyto.length; i++) { // mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copyto[i])); // } //設(shè)置主題 mimeMsg.setSubject(subject); //設(shè)置正文 BodyPart bp = new MimeBodyPart(); bp.setContent(content, "text/html;charset=utf-8"); mp.addBodyPart(bp); //設(shè)置附件 bp = new MimeBodyPart(); FileDataSource fileds = new FileDataSource(filename); bp.setDataHandler(new DataHandler(fileds)); bp.setFileName(MimeUtility.encodeText(fileds.getName(),"UTF-8","B")); mp.addBodyPart(bp); mimeMsg.setContent(mp); mimeMsg.saveChanges(); //發(fā)送郵件 if(props.get("mail.smtp.auth").equals("true")){ Transport transport = session.getTransport("smtp"); transport.connect((String)props.get("mail.smtp.host"), (String)props.get("username"), (String)props.get("password")); transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO)); // transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC)); transport.close(); }else{ Transport.send(mimeMsg); } System.out.println("郵件發(fā)送成功"); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return true; } // public void toSendMail(SendMailParam sendMailParam){ // MailFileSendUtils email = new MailFileSendUtils(sendMailParam.getSmtp(), sendMailParam.getUsername(), sendMailParam.getPassword()); // email.sendMail(sendMailParam.getFrom(), sendMailParam.getTo(), sendMailParam.getSubject(), sendMailParam.getContent(), sendMailParam.getFilepath()); // } public static void main(String[] args) { String smtp = "smtp.exmail.qq.com"; String username = "發(fā)送的郵箱賬號(hào)"; String password = "發(fā)送的郵箱密碼"; String from = "發(fā)送的郵箱"; String[] to = {"接收郵件的郵箱"}; // String[] copyto = {"抄送的郵箱"}; String subject = "主題6"; String content = "郵件內(nèi)容6"; String filename = "附件的文件"; MailFileSendUtils email = new MailFileSendUtils(smtp, username, password); // email.sendMail(from, to, copyto, subject, content, filename); email.sendMail(from, to, subject, content, filename); } }
(附:SSL版)
public class MailFileSendUtils { private Properties props; //系統(tǒng)屬性 private Session session; //郵件會(huì)話對(duì)象 private MimeMessage mimeMsg; //MIME郵件對(duì)象 private Multipart mp; //Multipart對(duì)象,郵件內(nèi)容,標(biāo)題,附件等內(nèi)容均添加到其中后再生成MimeMessage對(duì)象 /** * Constructor * @param */ public MailFileSendUtils(){ props = System.getProperties(); props.put("mail.smtp.auth","false"); session = Session.getDefaultInstance(props, null); session.setDebug(true); mimeMsg = new MimeMessage(session); mp = new MimeMultipart(); } /** * Constructor * @param smtp 郵件發(fā)送服務(wù)器 */ public MailFileSendUtils(String smtp, String username, String password){ Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; props = System.getProperties(); MailSSLSocketFactory sf = null; try { sf = new MailSSLSocketFactory(); } catch (GeneralSecurityException e) { } sf.setTrustAllHosts(true); props.put("mail.smtp.auth","true"); props.put("mail.smtp.host", smtp); props.put("mail.smtp.socketFactory.class", SSL_FACTORY); props.put("mail.smtp.socketFactory.fallback", "false"); props.put("mail.smtp.ssl.enable", "true"); props.put("mail.smtp.port", "465"); props.put("mail.smtp.ssl.socketFactory", sf); // props.put("username", username); // props.put("password", password); session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); session.setDebug(true); mimeMsg = new MimeMessage(session); mp = new MimeMultipart(); } /** * 發(fā)送郵件 */ public boolean sendMail(String from, String[] to, String subject, String content, String filename) { try { //設(shè)置發(fā)信人 mimeMsg.setFrom(new InternetAddress(from)); //設(shè)置接收人 for (int i = 0; i < to.length; i++) { mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to[i])); } //設(shè)置抄送人 // for (int i = 0; i < copyto.length; i++) { // mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copyto[i])); // } //設(shè)置主題 mimeMsg.setSubject(subject); //設(shè)置正文 BodyPart bp = new MimeBodyPart(); bp.setContent(content, "text/html;charset=utf-8"); mp.addBodyPart(bp); //設(shè)置附件 bp = new MimeBodyPart(); FileDataSource fileds = new FileDataSource(filename); bp.setDataHandler(new DataHandler(fileds)); bp.setFileName(MimeUtility.encodeText(fileds.getName(),"UTF-8","B")); mp.addBodyPart(bp); mimeMsg.setContent(mp); mimeMsg.saveChanges(); //發(fā)送郵件 if(props.get("mail.smtp.auth").equals("true")){ Transport transport = session.getTransport("smtp"); transport.connect((String)props.get("mail.smtp.host"), (String)props.get("username"), (String)props.get("password")); transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO)); // transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC)); transport.close(); }else{ Transport.send(mimeMsg); } System.out.println("郵件發(fā)送成功"); } catch (MessagingException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return true; } public boolean toSendMail(SendMailParam sendMailParam){ MailFileSendUtils email = new MailFileSendUtils( sendMailParam.getSmtp(), sendMailParam.getUsername(), sendMailParam.getPassword()); email.sendMail( sendMailParam.getFrom(), sendMailParam.getTo(), sendMailParam.getSubject(), sendMailParam.getContent(), sendMailParam.getFilepath()); return true; } // public static void main(String[] args) { // String smtp = "smtp.mxhichina.com"; // String username = "郵箱"; // String password = "郵箱密碼"; // String from = "誰(shuí)去發(fā)"; // String[] to = {"發(fā)給誰(shuí)"}; //// String[] copyto = {"抄送的郵箱"}; // String subject = "huawei"; // String content = "郵件內(nèi)容6666"; // String filename = "gdt-3583118353-ad-20170823.xls"; // MailFileSendUtils email = new MailFileSendUtils(smtp, username, password); //// email.sendMail(from, to, copyto, subject, content, filename); // email.sendMail(from, to, subject, content, filename); // } }
在項(xiàng)目中使用這套工具,main方法我注釋掉,然后使用toSendMail(SendMailParam sendMailParam)。
這里定義的SendMailParam 為:
public class SendMailParam { private String smtp; private String username; private String password; private String from;//發(fā)送人 private String[] to;//接收人 // String[] copyto = {"909891736@qq.com"}; private String subject;//郵件主題 private String content;//郵件內(nèi)容 private String filepath;//文件拿到的路徑 public SendMailParam(){ this.smtp = "smtp.exmail.qq.com";//例子 this.username = "郵箱賬號(hào)"; this.password = "郵箱密碼"; this.from = "郵箱"; this.subject = ""; this.content = ""; this.filepath = ""; } public String getSmtp() { return smtp; } public void setSmtp(String smtp) { this.smtp = smtp; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public String[] getTo() { return to; } public void setTo(String[] to) { this.to = to; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getFilepath() { return filepath; } public void setFilepath(String filepath) { this.filepath = filepath; } }
maven依賴包
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>
gradle依賴包
compile "javax.mail:mail:1.4.7"
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot中spring.profiles.include的妙用分享
這篇文章主要介紹了springboot中spring.profiles.include的妙用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08idea導(dǎo)入項(xiàng)目框架的詳細(xì)操作方法
大家使用idea開發(fā)工具時(shí)經(jīng)常會(huì)需要導(dǎo)入項(xiàng)目框架,糾結(jié)該怎么操作呢,今天小編給大家分享一篇圖文教程,幫助大家解決idea導(dǎo)入項(xiàng)目框架的問(wèn)題,感興趣的朋友一起看看吧2021-05-05java虛擬機(jī)鉤子關(guān)閉函數(shù)addShutdownHook的操作
這篇文章主要介紹了java虛擬機(jī)鉤子關(guān)閉函數(shù)addShutdownHook的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02Mybatis-Plus同時(shí)使用邏輯刪除和唯一索引的問(wèn)題及解決辦法(報(bào)數(shù)據(jù)重復(fù)Duplicate entry的
在開發(fā)中,我們經(jīng)常會(huì)有邏輯刪除和唯一索引同時(shí)使用的情況,但當(dāng)使用mybatis plus時(shí),如果同時(shí)使用邏輯刪除和唯一索引,會(huì)報(bào)數(shù)據(jù)重復(fù)Duplicate entry的問(wèn)題,如何解決這個(gè)問(wèn)題呢,小編給大家分享Mybatis-Plus同時(shí)使用邏輯刪除和唯一索引的問(wèn)題及解決辦法,一起看看吧2023-11-11Java輕松實(shí)現(xiàn)在Excel中添加超鏈接功能
這篇文章主要為大家詳細(xì)介紹了Java如何輕松實(shí)現(xiàn)在Excel中添加超鏈接功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01SpringBoot集成Kafka 配置工具類的詳細(xì)代碼
spring-kafka 是基于 java版的 kafka client與spring的集成,提供了 KafkaTemplate,封裝了各種方法,方便操作,它封裝了apache的kafka-client,不需要再導(dǎo)入client依賴,這篇文章主要介紹了SpringBoot集成Kafka 配置工具類,需要的朋友可以參考下2022-09-09SpringBoot結(jié)合JSR303對(duì)前端數(shù)據(jù)進(jìn)行校驗(yàn)的示例代碼
這篇文章主要介紹了SpringBoot結(jié)合JSR303對(duì)前端數(shù)據(jù)進(jìn)行校驗(yàn)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09