溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaWeb中怎么實現(xiàn)郵件發(fā)送功能

發(fā)布時間:2021-08-06 16:26:07 來源:億速云 閱讀:132 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關JavaWeb中怎么實現(xiàn)郵件發(fā)送功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據(jù)這篇文章可以有所收獲。

項目中遇到的問題:

1、在執(zhí)行到 File file = new File(“D:\Chat_Software\sky.JPG”);時出現(xiàn)錯誤,之前寫的時xlsx文件,測試期間可以對.xls,jpg,文本,.doc文件進行發(fā)送。發(fā)送xlsx文件時出現(xiàn)報錯。問題解決方案:.xls文件擴展名對應的是Microsoft Office EXCEL 2003及以前的版本。.xlsx文件擴展名對應的是Microsoft Office EXCEL 2007及后期的版本。有可能時你下載的mai不是1.6以上版本的,建議下載1.6以上版本的mail

2、在執(zhí)行到 message.saveChanges(); 方法報錯無法進行保存設置,也有可能時你的mail版本較低造成的。

在書寫 File file = new File(); 時注意修改正確的路徑,也可以寫在form表單里用file進行傳值,主題和內容也寫在了方法里因人而異如果其他需求可以需改參數(shù)進行傳值。

本次用到的主要jar包如下:

javax.mail-1.6.0.jar  activation.jar

代碼如下:

EmailSendController.java

package com.yang.controller;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import com.yang.util.Email_Send_Util;@Controller@RequestMapping("/email")public class EmailSendController { @RequestMapping(value = "/send.do") @ResponseBody public boolean impotr(HttpServletRequest request) { String toMail = request.getParameter("toMail"); String myMail = request.getParameter("myMail"); String userPwd = request.getParameter("userPwd"); System.out.println( toMail+myMail+userPwd); boolean bool=Email_Send_Util.send( toMail,myMail, userPwd); return bool ; }}

Authentication.java

package com.yang.util;import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;public class Authentication extends Authenticator { String username = null; String password = null; public Authentication() { } public Authentication(String username, String password) {  this.username = username; this.password = password; } protected PasswordAuthentication getPasswordAuthentication(){ PasswordAuthentication pa = new PasswordAuthentication(username, password); return pa; }}

CreateMimeMessage.java

package com.yang.util;import java.io.File;import java.util.Date;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Message.RecipientType;import javax.mail.Address;import javax.mail.Message;import javax.mail.Session;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;import javax.mail.internet.MimeUtility;/** * 創(chuàng)建一封復雜郵件(文本+圖片+附件) */public class CreateMimeMessage { public static MimeMessage createMimeMessage(Session session, String myMail, String toMail) throws Exception { // 1. 創(chuàng)建郵件對象 MimeMessage message = new MimeMessage(session); // 2. From: 發(fā)件人 message.setFrom(new InternetAddress(myMail, "我的測試郵件_發(fā)件人昵稱", "UTF-8")); // 3. To: 收件人(可以增加多個收件人、抄送、密送) message.addRecipient(RecipientType.TO, new InternetAddress(toMail, "我的測試郵件_收件人昵稱", "UTF-8")); // 4. Subject: 郵件主題 message.setSubject("TEST郵件主題(文本+圖片+附件)", "UTF-8"); // 抄送人 Address ccAddress = new InternetAddress("*********@qq.com", "我的測試郵件_抄送人昵稱", "UTF-8"); message.addRecipient(Message.RecipientType.CC, ccAddress); /* * 下面是郵件內容的創(chuàng)建: */ // 5. 創(chuàng)建圖片“節(jié)點” MimeBodyPart image = new MimeBodyPart(); File file = new File("D:\\Chat_Software\\sky.JPG"); DataHandler dh = new DataHandler(new FileDataSource(file)); // 讀取本地文件 image.setDataHandler(dh); // 將圖片數(shù)據(jù)添加到“節(jié)點” // image.setContentID("image_fairy_tail");// 為“節(jié)點”設置一個唯一編號(在文本“節(jié)點”將引用該ID) image.setFileName(MimeUtility.encodeText(file.getName()));  // 6. 創(chuàng)建文本“節(jié)點” MimeBodyPart text = new MimeBodyPart(); // text.setContent("這是一張圖片<br/>測試圖片<br/><img // src='cid:image_fairy_tail'/>", "text/html;charset=UTF-8"); text.setContent("這是一張圖片<br/>測試圖片", "text/html;charset=UTF-8"); // 7. (文本+圖片)設置 文本 和 圖片 “節(jié)點”的關系(將 文本 和 圖片 “節(jié)點”合成一個混合“節(jié)點”) MimeMultipart mm_text_image = new MimeMultipart(); mm_text_image.addBodyPart(text); mm_text_image.addBodyPart(image); mm_text_image.setSubType("related"); // 關聯(lián)關系 // 8. 將 文本+圖片 的混合“節(jié)點”封裝成一個普通“節(jié)點” // 最終添加到郵件的 Content 是由多個 BodyPart 組成的 Multipart, 所以我們需要的是 BodyPart, // 上面的 mm_text_image 并非 BodyPart, 所有要把 mm_text_image 封裝成一個 BodyPart MimeBodyPart text_image = new MimeBodyPart(); text_image.setContent(mm_text_image); // 9. 創(chuàng)建附件“節(jié)點” MimeBodyPart attachment = new MimeBodyPart(); File file2 = new File("E:\\boHaiBank\\Test\\test.xlsx"); DataHandler dh3 = new DataHandler(new FileDataSource(file2)); // 讀取本地文件 attachment.setDataHandler(dh3); // 將附件數(shù)據(jù)添加到“節(jié)點” attachment.setFileName(MimeUtility.encodeText(dh3.getName())); // 設置附件的文件名 // 10. 設置(文本+圖片)和 附件 的關系(合成一個大的混合“節(jié)點” / Multipart ) MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(text_image); mm.addBodyPart(attachment); // 如果有多個附件,可以創(chuàng)建多個多次添加 mm.setSubType("mixed"); // 混合關系 // 11. 設置整個郵件的關系(將最終的混合“節(jié)點”作為郵件的內容添加到郵件對象) message.setContent(mm); // 12. 設置發(fā)件時間 message.setSentDate(new Date()); // 13. 保存上面的所有設置 message.saveChanges(); return message; }}

Email_Send_Util.java

package com.yang.util;import java.util.Properties;import javax.mail.Authenticator;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.MimeMessage;public class Email_Send_Util { public static boolean send(String toMail,String myMail, String userPwd) { // QQ郵箱發(fā)件的服務器和端口 Properties props = new Properties(); props.put("mail.transport.protocol", "SMTP");// 設置發(fā)送郵件使用的協(xié)議 props.put("mail.smtp.host", "smtp.qq.com");// 指定郵件發(fā)送服務器服務器 "smtp.qq.com" props.put("mail.smtp.port", "25"); props.put("mail.smtp.auth", "true"); // 設置需要身份驗證(不驗證會不通過) Authenticator authentication = new Authentication(myMail, "你的郵箱授權碼"); Session session = Session.getDefaultInstance(props, authentication); MimeMessage message; try { message = CreateMimeMessage.createMimeMessage(session, myMail, toMail); // 獲取發(fā)送方對象 Transport transport = session.getTransport("smtp"); // 連接郵件服務器,鏈接您的QQ郵箱,用戶名(可以不用帶后綴)、密碼 transport.connect(myMail, userPwd); // 發(fā)送郵件 // 第一個參數(shù):郵件的消息體 // 第二個參數(shù):郵件所有的接收人/抄送人 transport.sendMessage(message, message.getAllRecipients()); transport.close(); return true; } catch (Exception e) { e.printStackTrace(); return false; } }}

測試發(fā)送郵箱的jsp頁面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>郵件發(fā)送</title><script type="text/javascript" src="js/jquery-1.10.2.js"></script><script type="text/javascript" src="js/jquery-2.1.1.min.js"></script></head><body> <p> <form id="login_form" method="post"> <table border="1px" width="750px" height="400px" align="center" cellpadding="0px" cellspacing="0px" bgcolor="white" > <tr height="40px"> <td colspan="2"> <font size="4">郵件發(fā)送</font> Email </td> </tr> <tr>  <td>收件人</td><td><input type="text" name="toMail" size="34px"/></td> </tr> <tr>  <td>郵件發(fā)送人</td><td><input type="text" name="myMail" size="34px"/></td> </tr> <tr>  <td>密碼</td><td><input type="text" name="userPwd" size="34px"/></td> </tr>   </table> <input type="button" onclick="emailsend()" value="發(fā)送"> </form> </p> <script type="text/javascript">  function emailsend() { $.ajax({ url : "email/send.do", type : "POST", data : $("#login_form").serialize(), beforeSend : function() {  console.log("正在進行,請稍候"); }, success : function(e) {  if (e == true) {  alert("發(fā)送成功");  } else {  alert("發(fā)送失敗");  } } }); } </script></body></html>

看完上述內容,你們對JavaWeb中怎么實現(xiàn)郵件發(fā)送功能有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI