下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,好在昨晚终于走通代码成功以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. 0909 a newbeginning

    操作系统无意是所有计算机系各专业的基础,如果不懂这门课程的知识,大学四年计算机可以说是白读了. 这学期很荣幸能上MISSDU的操作系统,我也希望能学到关于操作系统的知识,以至于丰富自己的专业知识. 下 ...

  2. collections系列

    一.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 c = Counter('abcdeabcdabcaba') prin ...

  3. JAVA Web day02--- Android小白的第二天学习笔记

    CSS(美工部分知识,了解) 1. CSS概述 1.1.CSS是什么? * CSS 指层叠样式表 样式表:存储样式的地方 层叠:一层一层叠加 高大富有帅气人 1.2.CSS有什么作用? *CSS就是用 ...

  4. JS中也可以使用JSTL和EL标签

    //往上滑是调用分页 function Ajax(currPage, pageSize) { // ajax后台交互String currPage,String pageSize var el, Pl ...

  5. linux压缩解压文件

    首先进入文件夹 cd /home/ftp2/1520/web 压缩方法一:压缩web下的888.com网站 zip -r 888.com.zip888.com 压缩方法二:将当前目录下的所有文件和文件 ...

  6. HDU 5446 中国剩余定理+lucas

    Unknown Treasure Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  7. js 事件冒泡

    一. 什么是事件的冒泡:      在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个程序,如果没有定义此事件处理程序或者事件返回true ...

  8. C语言数据结构之 简单选择排序

    算法:设所排序序列的记录个数为n.i取1,2,-,n-1,从所有n-i+1个记录(Ri,Ri+1,-,Rn)中找出排序码最小的记录,与第i个记录交换.执行n-1趟 后就完成了记录序列的排序. 编译器: ...

  9. 根据url地址单个或批量下载图片

    我们在java开发的时候会遇到通过url地址下载图片的情况.方便起见,我把通过url地址下载图片封装了tool工具类,方便以后使用 1.根据如:http://abc.com/hotels/a.jpg  ...

  10. Oracle数据库导入导出命令总结

    Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中.利用 ...