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

    最近上传了一个app,由于是第一次上传,花费在这上面的时间不比做app的耗时短啊....说多了都是泪.下面为了不让大家掉坑里去,分享一些小经验: 1.使用别人的开发者账号上传完自己的app(本人暂无开 ...

  2. JDK1.7 安装配置

    JDK1.7 安装配置 1.下载jdk1.7安装包,下载地址为http://pan.baidu.com/s/1bnvWc5x: 2.安装jdk1.7,安装完成后可在安装目录下看到以下两个文件夹,如下图 ...

  3. 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...

  4. tcp之快速重传与恢复

    本文为原创,转载请注明:http://www.cnblogs.com/gistao/ Background 写网络程序的都知道,tcp的窗口控制分为慢启动阶段和拥塞避免阶段,重传机制有快速重传/恢复和 ...

  5. 备受SQL青睐的“1”

    写在前面:所用sql语句皆是在oracle 11g r1 数据库中实验. 在sql书写中,经常会用到数字1,例如 count(1),select 1, where 1=1等等,这样做有何好处呢?下面我 ...

  6. Qt MainWindow结构

    (图自:FinderCheng 的 Qt 学习之路(11): MainWindow)

  7. 【 D3.js 入门系列 --- 6 】 如何让图表动起来

    [5.1]节中制作了一个比较完善的图表,但它是静态的,想做出它的动态效果吗?在D3中只需要短短的几行代码即可. 这一节将涉及4个函数的使用. 1.transition() 启动转变效果只需要添加这个即 ...

  8. Repeater 根据某一列的值加颜色

    //排队中 protected void rptOrdersList_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterIt ...

  9. (转)iOS开发中邮箱,电话号码,身份证,密码,昵称正则表达式验证

    之前看到觉得不错 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 ...

  10. 浅谈Runloop

    RunLoop 是 iOS 和 OS X 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何 ...