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

    windows: 需要别人的机器也安装jmeter 在别人的机器上运行jmeter-server.bat 修改jmeter.properties文件,查找remote_hosts 原始:remote_ ...

  2. Caffe 源碼閱讀(六) data_layer.cpp

    >>>>>>>>>>>>>>>>>>>>>>>>> ...

  3. SELF, self in CORE DATA

    Predicate SELF Represents the object being evaluated. CORE DATA Retrieving Specific Objects If your ...

  4. 百川sdk----自己的WebViewClient不被执行

    我在百川sdk的旺旺群中,追问这个问题N多次,一直没有人答复,哎,凡事都要靠自己..... 1.先查看下百川sdk中,是怎么处理咱们传递过去的 WebViewClient public class l ...

  5. c#小小总结(设计模式)

    前言 对于设计模式,知道一些(当然有些仅限于知道而已) 内容 1.单例模式 2.建造者模式 把单个模块通过不同的搭配方式创造出不同的产品 3.观察者模式 一对多的行为 当“一”改变的时候  “多”的每 ...

  6. php判断post数据是否存在(or 为空)的方法

    最近开发的php项目用到了表单 所以需要响应post请求 而在实际使用中 有些请求只需判断是否存在 百度了不少资料 发现都比较繁杂 然后想起了  count()函数 — 计算数组中的单元数目或对象中的 ...

  7. Matlab 2013b 在El Capitan 中无法使用问题解决

    更新了mac的操作系统到El capitan, 结果发现Matlab打不开了,每次都弹出一个Java error的窗口.现实如下内容 java.lang.NullPointerException at ...

  8. 判断App运行是否在前台

    转自:http://notes.stay4it.com/2016/02/26/check-if-app-is-running-forground/ 在一些场景中,经常会需要判断App是否在后台运行,比 ...

  9. Elasticsearch Network Settings

    网络设置 Elasticsearch 缺省情况下是绑定 localhost.对于本地开发服务是足够的(如果你在相同机子上启动多个节点,它还可以形成一个集群),但是你需要配置基本的网络设置,为了能够在实 ...

  10. 2. Transcribing DNA into RNA

    Problem An RNA string is a string formed from the alphabet containing 'A', 'C', 'G', and 'U'. Given ...