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

    本文所有的分析内容都是基于Linux3.18.6内核,鉴于对应不同内核版本,系统调用的实现不相同.若需要分析其他版本内核的系统调用的实现过程,请谨慎参考. system_call函数的功能是用来响应外 ...

  2. 现在遇到一个问题,无法判断url是属于哪一个CDN

    解决的办法是到申请域名的网站上面去调用api获取域名的cname来确定

  3. Win10/UWP开发-Ink墨迹书写

    在UWP开发中,微软提供了一个新型的InkCanvas控件用来让用户能书写墨迹,在新版的Edga浏览器中微软自己也用到了该控件使用户很方便的可以在web上做笔记. InkCanvas控件使用很简单,从 ...

  4. LaTex表格内单元格内容强制换行

    /newcommand{/tabincell}[2]{/begin{tabular}{@{}#1@{}}#2/end{tabular}}%放在导言区 %然后使用&/tabincell{c}{} ...

  5. iOS给UIimage添加圆角的两种方式

    众所周知,给图片添加圆角有CALayer的cornerRadius, 比如: 最直接的方法: imgView.layer.cornerRadius1=110;   imgView.clipsToBou ...

  6. 收拾那掉了一地的session

    多个页面有如下多个session,本来可能是如下面这样的 Session["UId"] = 10; Session["UName"] = "test& ...

  7. 用python+selenium抓取知乎今日最热和本月最热的前三个问题及每个问题的首个回答并保存至html文件

    抓取知乎今日最热和本月最热的前三个问题及每个问题的首个回答,保存至html文件,该html文件的文件名应该是20160228_zhihu_today_hot.html,也就是日期+zhihu_toda ...

  8. jdbc mysql写入中文乱码解决

    一. 问题 数据库编码:utf8 mysql> create database dbnameDEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; ...

  9. OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)

    实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序): a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle: ...

  10. Git Windows客户端保存用户名与密码

    1. 在Windows中添加一个HOME环境变量,值为%USERPROFILE%,如下图: 2. 在“开始>运行”中打开%Home%,新建一个名为“_netrc”的文件. 3. 用记事本打开_n ...