下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,好在昨晚终于走通代码成功以163邮箱发送邮件到qq邮箱,以下是相关代码,具体解释可以参考代码中注释:

  1. package test;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.List;
  5. import java.util.Properties;
  6. import java.util.regex.Matcher;
  7. import java.util.regex.Pattern;
  8. import javax.mail.Address;
  9. import javax.mail.Authenticator;
  10. import javax.mail.BodyPart;
  11. import javax.mail.Message;
  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 com.sun.mail.util.MailSSLSocketFactory;
  20. ///**
  21. // *
  22. // * @author zengyuan
  23. // * @date  Jan 15, 2016 - 9:55:48 AM
  24. // * @Description 邮件发送测试类
  25. // */
  26. public class sendMailTest {
  27. public static void main(String[] args) throws Exception {
  28. // 配置信息
  29. Properties pro = new Properties();
  30. pro.put("mail.smtp.host", "smtp.163.com");
  31. pro.put("mail.smtp.auth", "true");
  32. // SSL加密
  33. MailSSLSocketFactory sf = null;
  34. sf = new MailSSLSocketFactory();
  35. // 设置信任所有的主机
  36. sf.setTrustAllHosts(true);
  37. pro.put("mail.smtp.ssl.enable", "true");
  38. pro.put("mail.smtp.ssl.socketFactory", sf);
  39. // 根据邮件的会话属性构造一个发送邮件的Session,这里需要注意的是用户名那里不能加后缀,否则便不是用户名了
  40. //还需要注意的是,这里的密码不是正常使用邮箱的登陆密码,而是客户端生成的另一个专门的授权码
  41. MailAuthenticator authenticator = new MailAuthenticator("tuzongxun123",
  42. "客户端授权码");
  43. Session session = Session.getInstance(pro, authenticator);
  44. // 根据Session 构建邮件信息
  45. Message message = new MimeMessage(session);
  46. // 创建邮件发送者地址
  47. Address from = new InternetAddress("tuzongxun123@163.com");
  48. // 设置邮件消息的发送者
  49. message.setFrom(from);
  50. // 验证收件人邮箱地址
  51. List<String> toAddressList = new ArrayList<>();
  52. toAddressList.add("1160569243@qq.com");
  53. StringBuffer buffer = new StringBuffer();
  54. if (!toAddressList.isEmpty()) {
  55. String regEx = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
  56. Pattern p = Pattern.compile(regEx);
  57. for (int i = 0; i < toAddressList.size(); i++) {
  58. Matcher match = p.matcher(toAddressList.get(i));
  59. if (match.matches()) {
  60. buffer.append(toAddressList.get(i));
  61. if (i < toAddressList.size() - 1) {
  62. buffer.append(",");
  63. }
  64. }
  65. }
  66. }
  67. String toAddress = buffer.toString();
  68. if (!toAddress.isEmpty()) {
  69. // 创建邮件的接收者地址
  70. Address[] to = InternetAddress.parse(toAddress);
  71. // 设置邮件接收人地址
  72. message.setRecipients(Message.RecipientType.TO, to);
  73. // 邮件主题
  74. // message.setSubject("java邮件测试");
  75. message.setSubject("为什么错了");
  76. // 邮件容器
  77. MimeMultipart mimeMultiPart = new MimeMultipart();
  78. // 设置HTML
  79. BodyPart bodyPart = new MimeBodyPart();
  80. // 邮件内容
  81. // String htmlText = "java邮件测试111";
  82. String htmlText = "为什么错了";
  83. bodyPart.setContent(htmlText, "text/html;charset=utf-8");
  84. mimeMultiPart.addBodyPart(bodyPart);
  85. // 添加附件
  86. List<String> fileAddressList = new ArrayList<String>();
  87. fileAddressList
  88. .add("C:\\Users\\tuzongxun123\\Desktop\\新建 Microsoft Office Word 文档.docx");
  89. if (fileAddressList != null) {
  90. BodyPart attchPart = null;
  91. for (int i = 0; i < fileAddressList.size(); i++) {
  92. if (!fileAddressList.get(i).isEmpty()) {
  93. attchPart = new MimeBodyPart();
  94. // 附件数据源
  95. DataSource source = new FileDataSource(
  96. fileAddressList.get(i));
  97. // 将附件数据源添加到邮件体
  98. attchPart.setDataHandler(new DataHandler(source));
  99. // 设置附件名称为原文件名
  100. attchPart.setFileName(MimeUtility.encodeText(source
  101. .getName()));
  102. mimeMultiPart.addBodyPart(attchPart);
  103. }
  104. }
  105. }
  106. message.setContent(mimeMultiPart);
  107. message.setSentDate(new Date());
  108. // 保存邮件
  109. message.saveChanges();
  110. // 发送邮件
  111. Transport.send(message);
  112. }
  113. }
  114. }
  115. class MailAuthenticator extends Authenticator {
  116. /**
  117. * 用户名
  118. */
  119. private String username;
  120. /**
  121. * 密码
  122. */
  123. private String password;
  124. /**
  125. * 创建一个新的实例 MailAuthenticator.
  126. *
  127. * @param username
  128. * @param password
  129. */
  130. public MailAuthenticator(String username, String password) {
  131. this.username = username;
  132. this.password = password;
  133. }
  134. public String getPassword() {
  135. return password;
  136. }
  137. @Override
  138. protected PasswordAuthentication getPasswordAuthentication() {
  139. return new PasswordAuthentication(username, password);
  140. }
  141. public String getUsername() {
  142. return username;
  143. }
  144. public void setPassword(String password) {
  145. this.password = password;
  146. }
  147. public void setUsername(String username) {
  148. this.username = username;
  149. }
  150. }

JAVA代码发送邮件示例和解释的更多相关文章

  1. JAVA代码发送邮件示例和解释(二)

    之前有使用过一次在程序中发邮件的功能,也写了一篇相关的笔记,当时使用的是163邮箱,经过测试多个163账号都是可行的.但是最近把账号换成中国移动@chinamobilesz.com这种结尾的时候,却一 ...

  2. demo1 spark streaming 接收 kafka 数据java代码WordCount示例

    1. 首先启动zookeeper windows上的安装见zk 02之 Windows安装和使用zookeeper 启动后见: 2. 启动kafka windows的安装kafka见Windows上搭 ...

  3. javaMail (java代码发送邮件)

    第一在邮件账户设置开启以下两个 需要发送短信获取  授权码. 代码如下: package com.hjb.javaMail; import javax.mail.*; import javax.mai ...

  4. spark streaming 接收 kafka 数据java代码WordCount示例

    http://www.cnblogs.com/gaopeng527/p/4959633.html

  5. 使用Java代码发送邮件

  6. 在Android源码中查找Java代码中native函数对应的C++实现

    Android源码中很多关键代码都是C++实现的,java通过jni来调用,经常会看到java中这样的代码: static native Thread currentThread(); 如何根据方法名 ...

  7. JMETER通过java代码通过代码/ JMETER API实现示例进行负载测试

    本教程试图解释Jmeter的基本设计,功能和用法,Jmeter是用于在应用程序上执行负载测试的优秀工具.通过使用jmeter GUI,我们可以根据我们的要求为请求创建测试样本并执行具有多个用户负载的样 ...

  8. 在Eclipse中运行JAVA代码远程操作HBase的示例

    在Eclipse中运行JAVA代码远程操作HBase的示例 分类: 大数据 2014-03-04 13:47 3762人阅读 评论(2) 收藏 举报 下面是一个在Windows的Eclipse中通过J ...

  9. 提高Java代码质量的Eclipse插件之Checkstyle的使用具体解释

    CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发者遵守某些编码规范的工具.它可以自己主动化代码规范检查过程.从而使得开发者从这项重要可是枯燥的任务中解脱出来. Ch ...

随机推荐

  1. oracle xmltype导入并解析Excel数据 (四)特别说明

    1.Excel导出,此处没有给出 2.错误原因在中间表,T_EXCEL_IMPORT_GENERATION,其中errormsg不为空的数据 3,中间表入库过程: 需要自己实现,为一个存储过程,存储过 ...

  2. GridView获取CheckBox的值及所在列的ID

    //根据GridView的列数进行循环 ; i < GridView1.Rows.Count; i++) { //检查是否有ID为CheckBox1的CheckBox控件,如果有就赋值给Chec ...

  3. Linux 路线 推荐

    1.<Linux程序设计>- 靠它来入门,然后装一个linux体系,练习shell(party)和linuxC,把基础打牢: 2. <深入理解Linux内核>和<Linu ...

  4. php正则,删除字符串中的中英文标点符号

    原理很简单,正则查找字符串,然后替换 英文标点符号,正则中有专用的模式来匹配.中文则需要一一列举 代码: <?php $str = "!@#$%^&*(中'文::﹑•中'文中' ...

  5. jsp内置对象浅谈

    jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...

  6. Uncaught TypeError: Cannot read property 'msie' of undefined

    因为图方便,抄了别人写的一个jquerry插件,运行时“var pos = ($.browser.msie && parseInt($.browser.version) <= 6 ...

  7. 《剑指offer》面试题12:打印1到最大的n位数

    面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...

  8. Ported my old SPH solver in Unity

    Here is the link to the web player version, http://www-scf.usc.edu/~taian/pages/sph/builds/12212014/ ...

  9. MySQL开启general_log跟踪sql执行记录

    # 设置general log保存路径 # 注意在Linux中只能设置到 /tmp 或 /var 文件夹下,设置其他路径出错 # 需要root用户才有访问此文件的权限 mysql>set glo ...

  10. mysqlbinlog 参数及用法说明

    mysqlbinlog用法说明 服务器生成的二进制日志文件写成二进制格式.要想检查这些文本格式的文件,应使用mysqlbinlog实用工具.应这样调用mysqlbinlog:shell> mys ...