1. package cn.bric.crm.util;
  2.  
  3. import java.util.Date;
  4. import java.util.Enumeration;
  5. import java.util.Properties;
  6. import java.util.Vector;
  7.  
  8. import javax.activation.*;
  9. import javax.mail.Authenticator;
  10. import javax.mail.Message;
  11. import javax.mail.Multipart;
  12. import javax.mail.PasswordAuthentication;
  13. import javax.mail.Session;
  14. import javax.mail.Transport;
  15. import javax.mail.internet.InternetAddress;
  16. import javax.mail.internet.MimeBodyPart;
  17. import javax.mail.internet.MimeMessage;
  18. import javax.mail.internet.MimeMultipart;
  19. import javax.mail.internet.MimeUtility;
  20.  
  21. import java.io.FileInputStream;
  22. import java.io.IOException;
  23. import java.text.ParseException;
  24. import java.util.ArrayList;
  25. import java.util.Date;
  26. import java.util.HashSet;
  27. import java.util.Iterator;
  28. import java.util.List;
  29. import java.util.Locale;
  30. import java.util.Set;
  31. import java.util.regex.Pattern;
  32.  
  33. /**
  34. * <p>
  35. * Title: 使用javamail发送邮件
  36. * </p>
  37. */
  38. public class MailUtils {
  39.  
  40. String to = "";// 收件人
  41. String from = "";// 发件人
  42. String host = "";// smtp主机
  43. String username = "";
  44. String password = "";
  45. String filename = "";// 附件文件名
  46. String subject = "";// 邮件主题
  47. String content = "";// 邮件正文
  48. Vector file = new Vector();// 附件文件集合
  49.  
  50. /**
  51. * <br>
  52. * 方法说明:默认构造器 <br>
  53. * 输入参数: <br>
  54. * 返回类型:
  55. */
  56. public MailUtils() {
  57. }
  58.  
  59. /**
  60. * <br>
  61. * 方法说明:构造器,提供直接的参数传入 <br>
  62. * 输入参数: <br>
  63. * 返回类型:
  64. */
  65. public MailUtils(String to, String from, String smtpServer,
  66. String username, String password, String subject, String content) {
  67. this.to = to;
  68. this.from = from;
  69. this.host = smtpServer;
  70. this.username = username;
  71. this.password = password;
  72. this.subject = subject;
  73. this.content = content;
  74. }
  75.  
  76. /**
  77. * <br>
  78. * 方法说明:设置邮件服务器地址 <br>
  79. * 输入参数:String host 邮件服务器地址名称 <br>
  80. * 返回类型:
  81. */
  82. public void setHost(String host) {
  83. this.host = host;
  84. }
  85.  
  86. /**
  87. * <br>
  88. * 方法说明:设置登录服务器校验密码 <br>
  89. * 输入参数: <br>
  90. * 返回类型:
  91. */
  92. public void setPassWord(String pwd) {
  93. this.password = pwd;
  94. }
  95.  
  96. /**
  97. * <br>
  98. * 方法说明:设置登录服务器校验用户 <br>
  99. * 输入参数: <br>
  100. * 返回类型:
  101. */
  102. public void setUserName(String usn) {
  103. this.username = usn;
  104. }
  105.  
  106. /**
  107. * <br>
  108. * 方法说明:设置邮件发送目的邮箱 <br>
  109. * 输入参数: <br>
  110. * 返回类型:
  111. */
  112. public void setTo(String to) {
  113. this.to = to;
  114. }
  115.  
  116. /**
  117. * <br>
  118. * 方法说明:设置邮件发送源邮箱 <br>
  119. * 输入参数: <br>
  120. * 返回类型:
  121. */
  122. public void setFrom(String from) {
  123. this.from = from;
  124. }
  125.  
  126. /**
  127. * <br>
  128. * 方法说明:设置邮件主题 <br>
  129. * 输入参数: <br>
  130. * 返回类型:
  131. */
  132. public void setSubject(String subject) {
  133. this.subject = subject;
  134. }
  135.  
  136. /**
  137. * <br>
  138. * 方法说明:设置邮件内容 <br>
  139. * 输入参数: <br>
  140. * 返回类型:
  141. */
  142. public void setContent(String content) {
  143. this.content = content;
  144. }
  145.  
  146. /**
  147. * <br>
  148. * 方法说明:把主题转换为中文 <br>
  149. * 输入参数:String strText <br>
  150. * 返回类型:
  151. */
  152. public String transferChinese(String strText) {
  153. try {
  154. strText = MimeUtility.encodeText(new String(strText.getBytes(),
  155. "GB2312"), "GB2312", "B");
  156. } catch (Exception e) {
  157. e.printStackTrace();
  158. }
  159. return strText;
  160. }
  161.  
  162. /**
  163. * <br>
  164. * 方法说明:往附件组合中添加附件 <br>
  165. * 输入参数: <br>
  166. * 返回类型:
  167. */
  168. public void attachfile(String fname) {
  169. file.addElement(fname);
  170. }
  171.  
  172. /**
  173. * <br>
  174. * 方法说明:发送邮件 <br>
  175. * 输入参数: <br>
  176. * 返回类型:boolean 成功为true,反之为false
  177. */
  178. public boolean sendMail() {
  179.  
  180. // 构造mail session
  181. Properties props = new Properties() ;
  182. props.put("mail.smtp.host", host);
  183. props.put("mail.smtp.auth", "true");
  184. Session session = Session.getDefaultInstance(props,
  185. new Authenticator() {
  186. public PasswordAuthentication getPasswordAuthentication() {
  187. return new PasswordAuthentication(username, password);
  188. }
  189. });
  190. //Session session = Session.getDefaultInstance(props);
  191. // Session session = Session.getDefaultInstance(props, null);
  192.  
  193. try {
  194. // 构造MimeMessage 并设定基本的值
  195. MimeMessage msg = new MimeMessage(session);
  196. //MimeMessage msg = new MimeMessage();
  197. msg.setFrom(new InternetAddress(from));
  198.  
  199. //msg.addRecipients(Message.RecipientType.TO, address); //这个只能是给一个人发送email
  200. msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(to)) ;
  201. subject = transferChinese(subject);
  202. msg.setSubject(subject);
  203.  
  204. // 构造Multipart
  205. Multipart mp = new MimeMultipart();
  206.  
  207. // 向Multipart添加正文
  208. MimeBodyPart mbpContent = new MimeBodyPart();
  209. mbpContent.setContent(content, "text/html;charset=gb2312");
  210.  
  211. // 向MimeMessage添加(Multipart代表正文)
  212. mp.addBodyPart(mbpContent);
  213.  
  214. // 向Multipart添加附件
  215. Enumeration efile = file.elements();
  216. while (efile.hasMoreElements()) {
  217.  
  218. MimeBodyPart mbpFile = new MimeBodyPart();
  219. filename = efile.nextElement().toString();
  220. FileDataSource fds = new FileDataSource(filename);
  221. mbpFile.setDataHandler(new DataHandler(fds));
  222. <span style="color: #ff0000;">//这个方法可以解决附件乱码问题。</span>
  223. String filename= new String(fds.getName().getBytes(),"ISO-8859-1");
  224.  
  225. mbpFile.setFileName(filename);
  226. // 向MimeMessage添加(Multipart代表附件)
  227. mp.addBodyPart(mbpFile);
  228.  
  229. }
  230.  
  231. file.removeAllElements();
  232. // 向Multipart添加MimeMessage
  233. msg.setContent(mp);
  234. msg.setSentDate(new Date());
  235. msg.saveChanges() ;
  236. // 发送邮件
  237.  
  238. Transport transport = session.getTransport("smtp");
  239. transport.connect(host, username, password);
  240. transport.sendMessage(msg, msg.getAllRecipients());
  241. transport.close();
  242. } catch (Exception mex) {
  243. mex.printStackTrace();
  244. // Exception ex = null;
  245. // if ((ex = mex.getNextException()) != null) {
  246. // ex.printStackTrace();
  247. // }
  248. return false;
  249. }
  250. return true;
  251. }
  252.  
  253. /**
  254. * <br>
  255. * 方法说明:主方法,用于测试 <br>
  256. * 输入参数: <br>
  257. * 返回类型:
  258. */
  259. public static void main(String[] args) {
  260. MailUtils sendmail = new MailUtils();
  261.  
  262. sendmail.setHost("smtp.qiye.163.com");
  263. sendmail.setUserName("service@accfutures.com");
  264. sendmail.setPassWord("XXXXXX");
  265. sendmail.setTo("EEEEEEE@accfutures.com,EEEEEE@qq.com,EEEEEEE@163.com");
  266. sendmail.setFrom("service@accfutures.com");
  267. sendmail.setSubject("你好,这是测试!");
  268. sendmail.setContent("你好这是一个带多附件的测试!");
  269. // Mail sendmail = new
  270. // Mail("dujiang@sricnet.com","du_jiang@sohu.com","smtp.sohu.com","du_jiang","31415926","你好","胃,你好吗?");
  271. sendmail.attachfile("d:\\news.rar");
  272. sendmail.attachfile("d:\\jhjl.rar");
  273.  
  274. System.out.println(sendmail.sendMail());
  275.  
  276. }
  277. }

原文:http://chengyue2007.iteye.com/blog/787151#comments

Java发邮件带附件测试通过的更多相关文章

  1. Java发邮件带附件(且重命名附件)

    环境:spring3.2.2+jquery 用户的附件管理要实现发送附件可以是单个也可以是多个.由于用户在上传附件的时候采用了重命名机制,所以存在服务器上的文件是重命名后的文件,如果用户要将文件以邮件 ...

  2. python 发邮件-带附件-文本-html

    #!/usr/bin/python # encoding=utf-8 # Filename: send_email.py from email.mime.image import MIMEImage ...

  3. kettle 发邮件带附件

    新建一个job,主要用到的组件有两个,如下图: 首先点击下图的文件,选择你要做为邮件附件的文件.选完后会在前辈的文件.目录中显示.然后点击增加,会下面文件列表中显示已经添加的文件(涂黄色的部分) 按下 ...

  4. 一个支持邮件带附件群发的java类

    import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.Date;import ...

  5. Java发邮件:Java Mail与Apache Mail

    作者:Vinkn 来自http://www.cnblogs.com/Vinkn/ 一.邮件简介 一封邮件由很多信息构成,主要的信息如下,其他的暂时不考虑,例如抄送等: 1.收件人:收件人的邮箱地址,例 ...

  6. Java 阿里云 邮件(带附件)发送

    简单的使用. 阿里云每天免费200封 1000封才2块钱..465端口 使用正常25 端口 不正常 package com.gwzx.framework.utils; import java.util ...

  7. java 发邮件

    //先从oracle 下载mail.jarpackage test; import javax.mail.BodyPart; import javax.mail.Message; import jav ...

  8. python smtp 发邮件 添加附件

    # -*- coding:utf-8 -*- # __author__ = 'justing' import os import smtplib from email.mime.multipart i ...

  9. python webdriver 登录163邮箱发邮件加附件, 外加数据和程序分离,配置文件的方式

    配置文件:UiObjectMapSendMap.ini用来存放配置信息 GetOptionSendMail.py 用来读取配信息 #encoding=utf-8from selenium.webdri ...

随机推荐

  1. Asp.net Vnext 调试源码

    概述 本文已经同步到<Asp.net Vnext 系列教程 >中] 如果想对 vnext深入了解,就目前为止太该只有调试源码了 实现 github上下载源码 选择对应的版本,版本错了是不行 ...

  2. 【Java】 int与String类型间的相互转化

    public class Test { public static void main(String[] args) { /* * int类型转String类型 */ int n1 = 9; //1. ...

  3. Bootstrap进阶五:Web开发中很实用的交互效果积累

    1.页面切换效果 我们已经在示例中罗列了一组动画,可以被应用到页面切换过程中,创造出很有趣的导航效果.  2.视差滚动(parallax-slider) 视差滚动(parallax-slider)已 ...

  4. js javascript 原型链详解

    看了许多大神的博文,才少许明白了js 中原型链的概念,下面给大家浅谈一下,顺便也是为了巩固自己 首先看原型链之前先来了解一下new关键字的作用,在许多高级语言中,new是必不可少的关键字,其作用是为了 ...

  5. java 将class打包成jar包

    一.进入到java jdk安装目录(用cmd命令进入) c:cd C:\Program Files\Java\jdk1.8.0_45\bin 二.运行打包命令(将D盘下com中的class 打包成xy ...

  6. Tensorflow学习:(一)tensorflow框架基本概念

    一.Tensorflow基本概念 1.使用图(graphs)来表示计算任务,用于搭建神经网络的计算过程,但其只搭建网络,不计算 2.在被称之为会话(Session)的上下文(context)中执行图 ...

  7. [leetcode sort]148. Sort List

    Sort a linked list in O(n log n) time using constant space complexity. 以时间复杂度O(n log n)排序一个链表. 归并排序, ...

  8. iOS WKWebview 网页开发适配指南

    iOS WKWebview 网页开发适配指南 微信iOS客户端将于2017年3月1日前逐步升级为WKWebview内核,需要网页开发者提前做好网站的兼容检查和适配.如有问题,可参考文末联系方式,向我们 ...

  9. 【Performance】chrome调试面板

    本篇文章以chrome版本67.0.3396.99为例,说明性能方面的调试.

  10. [ 原创 ]新手作品-我的第一款安卓自学作品---YY音乐诞生了

    YY音乐---我前前后后断断续续花了3个月时间,边从0基础开始学Android 和Java,边开始做自己的Android第一款软件,之间看了许多教学视频,许多博客,才算Android入了一点点门道,终 ...