一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 使用Java發(fā)送帶附件的附件的示例

使用Java發(fā)送帶附件的附件的示例

2020-03-03 18:24cuisuqiang JAVA教程

這篇文章主要介紹了使用Java發(fā)送帶附件的附件的方法,使用到了JavaMail這個API,需要的朋友可以參考下

這里使用的是JavaMail技術,前臺使用了fckeditor做郵件美化,由于只是示例,后臺發(fā)送時只是將郵件保存在本地,但是可以查看,如果需要實際發(fā)送,請參考我的其他博客文章,我寫了很多關于郵件發(fā)送的示例!

使用Java發(fā)送帶附件的附件的示例

JSP頁面頁面除了引用fckeditor外,要注意我們是需要發(fā)送附件的:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <base href="<%=basePath%>">
  <title>發(fā)送郵件</title>
  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">  
  <script type="text/javascript" src="fckeditor/fckeditor.js"></script>
  <script type="text/javascript">
  window.onload=function(){
    var oFCKeditor = new FCKeditor( 'content' ) ;
    //編譯器基本路徑
    oFCKeditor.BasePath = "/pro_04/fckeditor/";
    //高度
    oFCKeditor.Width=800;
    //寬度
    oFCKeditor.Height=300;
    //工具條集合名稱(Default,Basic或自己制定,關于FCK的使用,博客內有專門文章)
    //具體的配置可以將默認顯示出來然后到FCK目錄里的fckconfig.js里
    //FCKConfig.ToolbarSets["Default"]數(shù)組中去除不要的功能一共63個功能屬性
    //oFCKeditor.ToolbarSet="Basic";
    oFCKeditor.ReplaceTextarea() ;     
  }
  </script>
 </head>
 <body>
  <!-- 注意表單格式,這里需要上傳附件 -->
  <form action="SendMailServlet" method="post" enctype="multipart/form-data">
  <table>
    <tr>
      <td>收件人:</td>
       <td><input type="text" name="to" /></td>
    </tr>
    <tr>
      <td>抄送:</td>
       <td><input type="text" name="copy" /></td>
    </tr>
    <tr>
      <td>主題:</td>
       <td><input type="text" name="title" /></td>
    </tr>
    <tr>
      <td>信件內容:</td>
      <td><textarea rows="10" cols="20" name="content" id="content"></textarea></td>
    </tr>
    <tr>
      <td>附件:</td>
      <td><input type='file' name='ufile' /></td>
    </tr>
    <tr>
      <td>背景音樂:</td>
      <td><input type='file' name='umusic' /></td>
    </tr>
    <tr>
      <td>背景圖片:</td><!-- 背景圖片我們后臺自己準備 -->
      <td>
        <select name="bgimg">
          <option value="1">一號</option>
          <option value="2">二號</option>
        </select>
      </td>
    </tr>
    <tr align="right">
      <td colspan="2"><input type="submit" value="發(fā) 送"></td>
    </tr>
  </table>   
  </form>
 </body>
</html>

 
 
為了防止亂碼,會經(jīng)過一個過濾器:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package org.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
 * 過濾器防止亂碼
 * @說明
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
public class EncodingFilter implements Filter {
  public void destroy() {
  }
  public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    chain.doFilter(request, response);
  }
  public void init(FilterConfig arg0) throws ServletException {
  }
}

 

 

然后到Servlet處理附件和信息,這里就不做異常處理了,出錯直接報錯:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package org.servlet;
import java.io.*;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.entity.MailModel;
import org.mail.SendMail;
/**
 * 接收表單,處理附件,組裝郵件對象,并調用發(fā)送接口
 * @說明 在C盤創(chuàng)建臨時文件
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
@SuppressWarnings("serial")
public class SendMailServlet extends HttpServlet {
  @SuppressWarnings( { "unchecked", "deprecation" })
  @Override
  protected void service(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
    // 建立磁盤工廠
    FileItemFactory factory = new DiskFileItemFactory();
    // 表單域
    ServletFileUpload upload = new ServletFileUpload(factory);
    List<FileItem> items = null;
    String bgimg = "1"; // 默認是第一個背景圖片
    try {
      items = upload.parseRequest(request);
    } catch (FileUploadException e) {
      e.printStackTrace();
    }
    MailModel mail = new MailModel();
    InputStream is = null;
    for (FileItem item : items) {
      if (!item.isFormField()) { // 如果是附件
        if (item.getSize() > 0) {
          is = item.getInputStream();
          String filename = "";
          if (item.getName().indexOf("\\") == -1) {
            filename = "c:\\tmp\\" + item.getName();
          } else {
            filename = "c:\\tmp\\" + item.getName().substring(item.getName().lastIndexOf("\\"));
          }
          if (is.markSupported()) {
            System.out.println("沒有上傳文件或文件已經(jīng)刪除");
          } else {
            File file = new File(filename);
            FileOutputStream fos = new FileOutputStream(file); // 建立輸出流
            byte[] buffer = new byte[8192]; // 每次讀8K字節(jié),大文件上傳沒有問題
            int count = 0;
            while ((count = is.read(buffer)) > 0) { // 循環(huán)寫入到硬盤
              fos.write(buffer, 0, count);
            }
            fos.close(); // 關閉輸入輸出流
            is.close();
            if (item.getFieldName().equals("ufile")) {
              mail.setFilePath(filename);
            } else if (item.getFieldName().equals("umusic")) {
              mail.setMusicPath(filename);
            }
          }
        }
      } else { // 處理文本信息
        if (item.getFieldName().equals("title")) {
          mail.setTitle(item.getString("UTF-8"));
        } else if (item.getFieldName().equals("content")) {
          mail.setContext(item.getString("UTF-8"));
        } else if (item.getFieldName().equals("to")) {
          mail.setTo(item.getString("UTF-8"));
        } else if (item.getFieldName().equals("copy")) {
          mail.setCopy(item.getString("UTF-8"));
        } else if (item.getFieldName().equals("bgimg")) {
          bgimg = item.getString("UTF-8");
        }
      }
    }
    String bgPath = request.getRealPath("/") + "\\images\\bg" + bgimg + ".jpg";
    mail.setBgPath(bgPath);
    try {
      SendMail.sendMail(mail);
    } catch (Exception e) {
      e.printStackTrace();
    }
    response.sendRedirect(request.getContextPath() + "/sendmail.jsp");
  }
}

 
 
這里也沒有驗證,接收到信息后組裝一個郵件實體對象,傳遞到發(fā)送接口中發(fā)送:
實體,我就不寫get和set方法了:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package org.entity;
/**
 * 一封郵件的對象
 * @說明
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
public class MailModel {
  /**
   * 主鍵
   */
  private int id;
 
  /**
   * 郵件標題
   */
  private String title;
 
  /**
   * 發(fā)送給誰
   */
  private String to;
 
  /**
   * 背景圖片地址
   */
  private String bgPath;
 
  /**
   * 抄送給誰
   */
  private String copy;
 
  /**
   * 郵件內容
   */
  private String context;
 
  /**
   * 附件地址
   */
  private String filePath;
  /**
   * 背景音樂地址
   */
  private String musicPath;
}

 
 
然后我們來看看核心處理類:
 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package org.mail;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
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;
import org.entity.MailModel;
/**
 * 發(fā)送一封郵件
 * @說明 注意這里并沒有實際發(fā)送而是保存在了C盤臨時文件中,真是發(fā)送的話,請參考我的博客
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
public class SendMail {
  public static void sendMail(MailModel mail) throws Exception {
    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    Session session = Session.getInstance(props);
    Message message = new MimeMessage(session);
    InternetAddress from = new InternetAddress();
    from.setPersonal(MimeUtility.encodeText("風中落葉<[email protected]>"));
    message.setFrom(from);
    InternetAddress to = new InternetAddress(mail.getTo());
    message.setRecipient(Message.RecipientType.TO, to);
    // 是否抄送
    if (null != mail.getCopy() && !"".equals(mail.getCopy())) {
      InternetAddress copy = new InternetAddress(mail.getCopy());
      message.setRecipient(Message.RecipientType.CC, copy);
    }
    message.setSubject(MimeUtility.encodeText(mail.getTitle()));
    message.setSentDate(new Date());
    // 指定為混合關系
    MimeMultipart msgMultipart = new MimeMultipart("mixed");
    message.setContent(msgMultipart);
    MimeBodyPart content = new MimeBodyPart();
    msgMultipart.addBodyPart(content);
    // 依賴關系
    MimeMultipart bodyMultipart = new MimeMultipart("related");
    content.setContent(bodyMultipart);
    MimeBodyPart htmlPart = new MimeBodyPart();
    // 組裝的順序非常重要
    bodyMultipart.addBodyPart(htmlPart);
    MimeBodyPart in_bg = new MimeBodyPart();
    bodyMultipart.addBodyPart(in_bg);
 
    DataSource bgsou = new FileDataSource(mail.getBgPath());
    DataHandler bghd = new DataHandler(bgsou);
    in_bg.setDataHandler(bghd);
    in_bg.setHeader("Content-Location", "bg.jpg");
    // 是否使用了背景音樂
    if (null == mail.getMusicPath() || "".equals(mail.getMusicPath())) {
      String start = "<html><body background='bg.jpg'>";
      String end = "</body></html>";
      htmlPart.setContent(start + mail.getContext() + end,"text/html;charset=UTF-8");
    } else {
      MimeBodyPart in_Part = new MimeBodyPart();
      bodyMultipart.addBodyPart(in_Part);
      DataSource gifds = new FileDataSource(mail.getMusicPath());
      DataHandler gifdh = new DataHandler(gifds);
      in_Part.setDataHandler(gifdh);
      in_Part.setHeader("Content-Location", "bg.mp3");
      String start = "<html><head><bgsound src='bg.mp3' loop='-1'></head><body background='bg.jpg'>";
      String end = "</body></html>";
      htmlPart.setContent(start + mail.getContext() + end,"text/html;charset=UTF-8");
    }
    // 組裝附件
    if (null != mail.getFilePath() && !"".equals(mail.getFilePath())) {     
      MimeBodyPart file = new MimeBodyPart();
      FileDataSource file_datasource = new FileDataSource(mail
          .getFilePath());
      DataHandler dh = new DataHandler(file_datasource);
      file.setDataHandler(dh);
      file.setFileName(MimeUtility.encodeText(dh.getName()));
      msgMultipart.addBodyPart(file);
    }
    message.saveChanges();
    // 保存郵件
    OutputStream ips = new FileOutputStream("C:\\tmp\\test.eml");
    message.writeTo(ips);
    ips.close();
    System.out.println("------------發(fā)送完畢------------");
    // 刪除臨時文件
    if (null != mail.getMusicPath() && !"".equals(mail.getMusicPath())) {
      File file = new File(mail.getMusicPath());
      file.delete();
    }
    if (null != mail.getFilePath() && !"".equals(mail.getFilePath())) {
      File file = new File(mail.getFilePath());
      file.delete();
    }
  }
}

我們把郵件發(fā)送了C盤,可以到C盤查看,如果需要實際發(fā)送,可以參考我的其他博客,有專門說明!

使用Java發(fā)送帶附件的附件的示例

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费观看韩剧网站在线观看 | 2021国产麻豆剧传媒剧情最新 | 91久久精品视频 | 欧美视频在线一区二区三区 | 草大逼| 欧美成人日韩 | 国产一区二区三区丶四区 | 国产真实伦对白在线播放 | japonensis中国东北老人 | 亚洲精品国偷拍自产在线观看蜜臀 | 日韩欧美亚洲一区二区综合 | 出轨同学会2在线观看 | 色男人网| 日本xxxxx高清免费观看 | 日本一道高清不卡免费 | 免费视频一区 | 男女性潮高片无遮挡禁18 | 欧美一区二区三区四区在线观看 | 亚洲国产精品综合久久一线 | www毛片| 精品99一区二区三区麻豆 | 黄色aaa级片 | 日日操日日舔 | 日韩一区国产二区欧美三 | 舔到喷水 | 欧美综合国产精品日韩一 | 久久热r在线视频精品 | 3d动漫美女被吸乳羞羞视频 | 精品福利一区二区免费视频 | 变态 另类 国产 亚洲 | 国产午夜亚洲精品理论片不卡 | 母性本能在线观看 | 国产精品久久香蕉免费播放 | 天选之王漫画顾长歌免费阅读 | 成人精品一区二区三区 | 亚洲国产精品日本无码网站 | 91大神在线精品播放 | 精品久久成人免费第三区 | 久久久久久久99精品免费观看 | 日日爽 | 日日视频|