JSP: 使用網易郵箱傳送帶附件的電子郵件
阿新 • • 發佈:2018-12-13
JSP程式碼:使用javax.mail和activation傳送郵件
首先我們需要兩個jar包,javax.mail.jar和activation.jar,官方下載地址:
不管使用什麼郵箱傳送右鍵,我們都需要開啟SMTP服務,比如網易郵箱:
開啟服務之後,你就已經設定成功了一個授權碼。請記住:用JSP驗證郵箱登入的時候,使用者名稱為郵箱名,密碼為授權碼,而不是登入郵箱用的密碼。
完事具備,上程式碼:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*, java.text.*, java.time.*, java.io.*"%> <%@ page import="javax.mail.*, javax.mail.internet.*, javax.activation.*"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="author" content="趙利昂"> <title>E-mail something</title> </head> <body> <%-- 從網易郵箱向QQ郵箱傳送訊息 --%> <% String from = "
[email protected]"; // 發件人 String to = "652961[email protected]"; //收件人 String host = "smtp.163.com"; // 指定傳送郵件的主機 Properties props = System.getProperties(); // 獲取系統屬性 props.setProperty("mail.smtp.host", host); // 設定郵件伺服器 props.put("mail.smtp.auth", "true"); // 設定使用者認證方式 session.invalidate(); // 使預設session暫時失效,否則傳送訊息系統變為一次性 try { // 建立預設的 MimeMessage物件 MimeMessage message = new MimeMessage(Session.getDefaultInstance(props, new Authenticator() { @Override public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("[email protected]", "XXXXXXXX"); //發件人的使用者名稱和授權碼 } })); message.setFrom(new InternetAddress(from)); // 設定from欄位 message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 設定to欄位 message.setSubject("What's for dinner?"); // 設定郵件標題 BodyPart messageBodyPart = new MimeBodyPart(); // 建立訊息部分 messageBodyPart.setText("I'm thinking, two pizzas."); // 設定郵件訊息主體 Multipart multipart = new MimeMultipart(); // 建立多重訊息(總訊息) multipart.addBodyPart(messageBodyPart); // 新增訊息的文字部分 messageBodyPart = new MimeBodyPart(); // 重新新建物件,以便新增附件 DataSource source = new FileDataSource(new File("D:\\104.txt")); // 附件 messageBodyPart.setDataHandler(new DataHandler(source)); // 附件的處理器 messageBodyPart.setFileName("BirthdayCard"); // 附件重新命名 multipart.addBodyPart(messageBodyPart); // 新增附件至總訊息 message.setContent(multipart); // 將總訊息設定成要傳送的訊息 Transport.send(message); // 傳送總訊息 out.println("<h1>郵件傳送成功。</h1><br />"); } catch (MessagingException mex) { out.println("<h1>郵件傳送失敗。附加訊息:</h1>" + mex.getMessage() + "<br />"); mex.printStackTrace(); } %> </body> </html>