springboot仍然在狂速发展,才五个多月没有关注,现在看官网已经到1.5.3.RELEASE版本了。准备慢慢在写写springboot相关的文章,本篇文章使用springboot最新版本1.5.3进行开发。

发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息。最早期的时候我们会使用JavaMail相关api来写发送邮件的相关代码,后来spring推出了JavaMailSender更加简化了邮件发送的过程,在之后springboot对此进行了封装就有了现在的spring-boot-starter-mail,本章文章的介绍主要来自于此包。

简单使用

1、pom包配置

pom包里面添加spring-boot-starter-mail包引用

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>

2、在application.properties中添加邮箱配置

spring.mail.host=smtp.qiye.163.com //邮箱服务器地址
spring.mail.username=xxx@oo.com //用户名
spring.mail.password=xxyyooo //密码
spring.mail.default-encoding=UTF-8 mail.fromMail.addr=xxx@oo.com //以谁来发送邮件

3、编写mailService,这里只提出实现类。

@Component
public class MailServiceImpl implements MailService{ private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired
private JavaMailSender mailSender; @Value("${mail.fromMail.addr}")
private String from; @Override
public void sendSimpleMail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(content); try {
mailSender.send(message);
logger.info("简单邮件已经发送。");
} catch (Exception e) {
logger.error("发送简单邮件时发生异常!", e);
} }
}

4、编写test类进行测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class MailServiceTest { @Autowired
private MailService MailService; @Test
public void testSimpleMail() throws Exception {
MailService.sendSimpleMail("ityouknow@126.com","test simple mail"," hello this is simple mail");
}
}

至此一个简单的文本发送就完成了。

加点料

但是在正常使用的过程中,我们通常在邮件中加入图片或者附件来丰富邮件的内容,下面讲介绍如何使用springboot来发送丰富的邮件。

发送html格式邮件

其它都不变在MailService添加sendHtmlMail方法.

public void sendHtmlMail(String to, String subject, String content) {
MimeMessage message = mailSender.createMimeMessage(); try {
//true表示需要创建一个multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true); mailSender.send(message);
logger.info("html邮件发送成功");
} catch (MessagingException e) {
logger.error("发送html邮件时发生异常!", e);
}
}

在测试类中构建html内容,测试发送

@Test
public void testHtmlMail() throws Exception {
String content="<html>\n" +
"<body>\n" +
" <h3>hello world ! 这是一封Html邮件!</h3>\n" +
"</body>\n" +
"</html>";
MailService.sendHtmlMail("ityouknow@126.com","test simple mail",content);
}

发送带附件的邮件

在MailService添加sendAttachmentsMail方法.

public void sendAttachmentsMail(String to, String subject, String content, String filePath){
MimeMessage message = mailSender.createMimeMessage(); try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true); FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
helper.addAttachment(fileName, file); mailSender.send(message);
logger.info("带附件的邮件已经发送。");
} catch (MessagingException e) {
logger.error("发送带附件的邮件时发生异常!", e);
}
}

添加多个附件可以使用多条 helper.addAttachment(fileName, file)

在测试类中添加测试方法

@Test
public void sendAttachmentsMail() {
String filePath="e:\\tmp\\application.log";
mailService.sendAttachmentsMail("ityouknow@126.com", "主题:带附件的邮件", "有附件,请查收!", filePath);
}

发送带静态资源的邮件

邮件中的静态资源一般就是指图片,在MailService添加sendAttachmentsMail方法.

public void sendInlineResourceMail(String to, String subject, String content, String rscPath, String rscId){
MimeMessage message = mailSender.createMimeMessage(); try {
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true); FileSystemResource res = new FileSystemResource(new File(rscPath));
helper.addInline(rscId, res); mailSender.send(message);
logger.info("嵌入静态资源的邮件已经发送。");
} catch (MessagingException e) {
logger.error("发送嵌入静态资源的邮件时发生异常!", e);
}
}

在测试类中添加测试方法

@Test
public void sendInlineResourceMail() {
String rscId = "neo006";
String content="<html><body>这是有图片的邮件:<img src=\'cid:" + rscId + "\' ></body></html>";
String imgPath = "C:\\Users\\summer\\Pictures\\favicon.png"; mailService.sendInlineResourceMail("ityouknow@126.com", "主题:这是有图片的邮件", content, imgPath, rscId);
}

添加多个图片可以使用多条 <img src='cid:" + rscId + "' > 和 helper.addInline(rscId, res) 来实现

到此所有的邮件发送服务已经完成了。

邮件系统

上面发送邮件的基础服务就这些了,但是如果我们要做成一个邮件系统的话还需要考虑以下几个问题:

邮件模板

我们会经常收到这样的邮件:

尊敬的neo用户:

              恭喜您注册成为xxx网的用户,,同时感谢您对xxx的关注与支持并欢迎您使用xx的产品与服务。
...

其中只有neo这个用户名在变化,其它邮件内容均不变,如果每次发送邮件都需要手动拼接的话会不够优雅,并且每次模板的修改都需要改动代码的话也很不方便,因此对于这类邮件需求,都建议做成邮件模板来处理。模板的本质很简单,就是在模板中替换变化的参数,转换为html字符串即可,这里以thymeleaf为例来演示。

1、pom中导入thymeleaf的包

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2、在resorces/templates下创建emailTemplate.html

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head>
<body>
您好,这是验证邮件,请点击下面的链接完成验证,<br/>
<a href="#" th:href="@{ http://www.ityouknow.com/neo/{id}(id=${id}) }">激活账号</a>
</body>
</html>

3、解析模板并发送

@Test
public void sendTemplateMail() {
//创建邮件正文
Context context = new Context();
context.setVariable("id", "006");
String emailContent = templateEngine.process("emailTemplate", context); mailService.sendHtmlMail("ityouknow@126.com","主题:这是模板邮件",emailContent);
}

发送失败

因为各种原因,总会有邮件发送失败的情况,比如:邮件发送过于频繁、网络异常等。在出现这种情况的时候,我们一般会考虑重新重试发送邮件,会分为以下几个步骤来实现:

  • 1、接收到发送邮件请求,首先记录请求并且入库。
  • 2、调用邮件发送接口发送邮件,并且将发送结果记录入库。
  • 3、启动定时系统扫描时间段内,未发送成功并且重试次数小于3次的邮件,进行再次发送

异步发送

很多时候邮件发送并不是我们主业务必须关注的结果,比如通知类、提醒类的业务可以允许延时或者失败。这个时候可以采用异步的方式来发送邮件,加快主交易执行速度,在实际项目中可以采用MQ发送邮件相关参数,监听到消息队列之后启动发送邮件。

可以参考前期文章:springboot(八):RabbitMQ详解 来实现。

示例代码-github

示例代码-码云

参考: spring boot 发送邮件

集成spring-boot-starter-mail发送邮件
2016年11月14日 13:20:35

阅读数:9396

项目GitHub地址 :

https://github.com/FrameReserve/TrainingBoot

Spring Boot(十二)集成spring-boot-starter-mail发送邮件,标记地址:

https://github.com/FrameReserve/TrainingBoot/releases/tag/0.0.12

pom.xml

增加:

spring-boot-starter-mail

spring-boot-starter-velocity -- 模板

  1. <!-- Email -->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-mail</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-velocity</artifactId>
  9. </dependency>

Spring Boot配置文件:

QQ邮箱权限需要在QQ邮箱里设置,163则不用,问题比较少。

src/main/resources/application.yml

  1. mail:
  2. host: smtp.163.com
  3. username: 286352250@163.com
  4. password: 用户密码
  5. properties:
  6. mail:
  7. smtp:
  8. auth: true
  9. timeout: 25000

Email配置类:

后期经常使用发件人邮箱,在这统一定义。

src/main/java/com/training/core/email/EmailConfig.java

  1. package com.training.core.email;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.stereotype.Component;
  5. @Component
  6. public class EmailConfig {
  7. /**
  8. * 发件邮箱
  9. */
  10. @Value("${spring.mail.username}")
  11. private String emailFrom;
  12. public String getEmailFrom() {
  13. return emailFrom;
  14. }
  15. public void setEmailFrom(String emailFrom) {
  16. this.emailFrom = emailFrom;
  17. }
  18. }

定义Email Service,三种邮件风格:

1. 发送简单邮件。

2. 发送带附件简单邮件

3. 发送模板邮件。

src/main/java/com/training/core/email/EmailService.java

  1. package com.training.core.email;
  2. import java.io.File;
  3. import java.util.List;
  4. import java.util.Map;
  5. import com.training.core.dto.Pair;
  6. public interface EmailService {
  7. /**
  8. * 发送简单邮件
  9. * @param sendTo 收件人地址
  10. * @param titel  邮件标题
  11. * @param content 邮件内容
  12. */
  13. public void sendSimpleMail(String sendTo, String titel, String content);
  14. /**
  15. * 发送简单邮件
  16. * @param sendTo 收件人地址
  17. * @param titel  邮件标题
  18. * @param content 邮件内容
  19. * @param attachments<文件名,附件> 附件列表
  20. */
  21. public void sendAttachmentsMail(String sendTo, String titel, String content, List<Pair<String, File>> attachments);
  22. /**
  23. * 发送模板邮件
  24. * @param sendTo 收件人地址
  25. * @param titel  邮件标题
  26. * @param content<key, 内容> 邮件内容
  27. * @param attachments<文件名,附件> 附件列表
  28. */
  29. public void sendTemplateMail(String sendTo, String titel, Map<String, Object> content, List<Pair<String, File>> attachments);
  30. }

Email Service实现类:

src/main/java/com/training/core/email/EmailServiceImpl.java

  1. package com.training.core.email;
  2. import java.io.File;
  3. import java.util.List;
  4. import java.util.Map;
  5. import javax.mail.internet.MimeMessage;
  6. import org.apache.commons.collections.map.HashedMap;
  7. import org.apache.velocity.app.VelocityEngine;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.core.io.FileSystemResource;
  10. import org.springframework.mail.SimpleMailMessage;
  11. import org.springframework.mail.javamail.JavaMailSender;
  12. import org.springframework.mail.javamail.MimeMessageHelper;
  13. import org.springframework.stereotype.Service;
  14. import org.springframework.ui.velocity.VelocityEngineUtils;
  15. import com.training.core.dto.Pair;
  16. import com.training.core.exception.RuntimeServiceException;
  17. @Service
  18. public class EmailServiceImpl implements EmailService {
  19. @Autowired
  20. private EmailConfig emailConfig;
  21. @Autowired
  22. private JavaMailSender mailSender;
  23. @Autowired
  24. private VelocityEngine velocityEngine;
  25. public void sendSimpleMail(String sendTo, String titel, String content) {
  26. SimpleMailMessage message = new SimpleMailMessage();
  27. message.setFrom(emailConfig.getEmailFrom());
  28. message.setTo(sendTo);
  29. message.setSubject(titel);
  30. message.setText(content);
  31. mailSender.send(message);
  32. }
  33. public void sendAttachmentsMail(String sendTo, String titel, String content, List<Pair<String, File>> attachments) {
  34. MimeMessage mimeMessage = mailSender.createMimeMessage();
  35. try {
  36. MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
  37. helper.setFrom(emailConfig.getEmailFrom());
  38. helper.setTo(sendTo);
  39. helper.setSubject(titel);
  40. helper.setText(content);
  41. for (Pair<String, File> pair : attachments) {
  42. helper.addAttachment(pair.getLeft(), new FileSystemResource(pair.getRight()));
  43. }
  44. } catch (Exception e) {
  45. throw new RuntimeServiceException(e);
  46. }
  47. mailSender.send(mimeMessage);
  48. }
  49. public void sendInlineMail() {
  50. MimeMessage mimeMessage = mailSender.createMimeMessage();
  51. try {
  52. MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
  53. helper.setFrom(emailConfig.getEmailFrom());
  54. helper.setTo("286352250@163.com");
  55. helper.setSubject("主题:嵌入静态资源");
  56. helper.setText("<html><body><img src=\"cid:weixin\" ></body></html>", true);
  57. FileSystemResource file = new FileSystemResource(new File("weixin.jpg"));
  58. helper.addInline("weixin", file);
  59. } catch (Exception e) {
  60. throw new RuntimeServiceException(e);
  61. }
  62. mailSender.send(mimeMessage);
  63. }
  64. public void sendTemplateMail(String sendTo, String titel, Map<String, Object> content, List<Pair<String, File>> attachments) {
  65. MimeMessage mimeMessage = mailSender.createMimeMessage();
  66. try {
  67. MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
  68. helper.setFrom(emailConfig.getEmailFrom());
  69. helper.setTo(sendTo);
  70. helper.setSubject(titel);
  71. String text = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "template.vm", "UTF-8", content);
  72. helper.setText(text, true);
  73. for (Pair<String, File> pair : attachments) {
  74. helper.addAttachment(pair.getLeft(), new FileSystemResource(pair.getRight()));
  75. }
  76. } catch (Exception e) {
  77. throw new RuntimeServiceException(e);
  78. }
  79. mailSender.send(mimeMessage);
  80. }
  81. }

测试邮件发送:

src/main/java/com/training/email/controller/DemoEmailController.java

  1. package com.training.email.controller;
  2. import io.swagger.annotations.ApiOperation;
  3. import javax.annotation.Resource;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestMethod;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import com.training.core.controller.BaseController;
  9. import com.training.core.dto.ResultDataDto;
  10. import com.training.core.email.EmailService;
  11. @RestController
  12. @RequestMapping(value="/email")
  13. public class DemoEmailController extends BaseController {
  14. @Resource
  15. private EmailService emailService;
  16. /**
  17. * 测试邮件发送
  18. */
  19. @ApiOperation(value="测试邮件发送", notes="getEntityById")
  20. @RequestMapping(value = "/getTestDemoEmail", method = RequestMethod.GET)
  21. public @ResponseBody ResultDataDto getEntityById() throws Exception {
  22. String sendTo = "1265400024@qq.com";
  23. String titel = "测试邮件标题";
  24. String content = "测试邮件内容";
  25. emailService.sendSimpleMail(sendTo, titel, content);
  26. return ResultDataDto.addSuccess();
  27. }
  28. }
 
关于使用Java Mail 发邮件,连接超时问题

异常信息

send mail err:Mail server connection failed; nested exception is com.sun.mail.util.MailConnectException: Couldn’t connect to host, port: smtp.qq.com, 25; timeout -1

在本地windows 是可以发送成功的

怀疑是端口问题,好吧,我用的是 25 端口,开了之后还是连接超时。

那么就很有可能是你的服务器的运营商将25端口封禁了!

换其他端口

我直接用springboot 的模板发邮件

发邮件具体代码看这里:http://www.lrshuai.top/atc/show/41

默认的配置如下:

spring.mail.host=smtp.qq.com
spring.mail.username=1006059906@qq.com
spring.mail.password=这个是你的授权码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.default-encoding=UTF-8

修改端口为465

spring.mail.host=smtp.qq.com
spring.mail.username=1006059906@qq.com
spring.mail.password=这个是你的授权码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.default-encoding=UTF-8
spring.mail.port=465
spring.mail.properties.mail.smtp.socketFactory.port = 465
spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback = false

这样就ok了,springboot 发邮件的示例代码:https://github.com/rstyro/spring-boot/tree/master/springboot-mail

https://blog.csdn.net/vbirdbest/article/details/79836854

本文展示一下如何使用spring mail来发送html邮件。

maven

        <!-- email -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>

发送图片

public void send(String from, String[] toMails, String subject, String text,
Map<String,Object> inlines) throws Exception{
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
helper.setFrom(from);
helper.setTo(toMails);
helper.setSubject(subject);
//support html
helper.setText(text, true); // inline
if(inlines != null){
for(Map.Entry<String,Object> entry: inlines.entrySet()){
if(entry.getValue() instanceof ClassPathResource){
helper.addInline(entry.getKey(), (Resource) entry.getValue());
} }
} mailSender.send(mimeMessage);
}

测试

  • 发送实例
        ClassPathResource classPathResource = new ClassPathResource("image_2.png");
Map<String,Object> att = new HashMap<>();
att.put("image",classPathResource);
String content = "<html>
<body>
<h4>spring mail发送实例</h4>
<img src='cid:image'/><br>
</body>
</html>";
try{
mailService.send(new String[]{"xxxxx@163.com"},"spring mail发送实例",content,att);
}catch (Exception e){
e.printStackTrace();
}
  • 异常
org.springframework.mail.MailSendException: Failed messages: com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 126 smtp7,DsmowAB3U6X1_LdZjIz+Aw--.26008S3 1505230070,please see http://mail.163.com/help/help_spam_16.htm?ip=123.65.107.103&hostid=smtp7&time=1505230070
; message exception details (1) are:
Failed message 1:
com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 126 smtp7,DsmowAB3U6X1_LdZjIz+Aw--.26008S3 1505230070,please see http://mail.163.com/help/help_spam_16.htm?ip=123.65.107.103&hostid=smtp7&time=1505230070 at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2267)
at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:2045)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1260)
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:448)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:345)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:340)

错误码554

554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件;

被网易邮箱识别为垃圾邮件了,有个歪招,就是把发送邮箱添加到cc里头

helper.setCc(from);

springboot 邮件服务的更多相关文章

  1. (转)Springboot邮件服务

    springboot仍然在狂速发展,才五个多月没有关注,现在看官网已经到1.5.3.RELEASE版本了.准备慢慢在写写springboot相关的文章,本篇文章使用springboot最新版本1.5. ...

  2. 19.springboot邮件服务服务器部署访问不到邮箱服务器解决方案

    1.前言 在Springboot项目的生产环境中,win系统环境下,邮箱服务是可以正常使用的. 当项目部署到阿里云服务器上之后,因为服务器端口采用安全组的方式,25端口访问不到. 在网上查找了一部分资 ...

  3. Springboot 系列(十三)使用邮件服务

    在我们这个时代,邮件服务不管是对于工作上的交流,还是平时的各种邮件通知,都是一个十分重要的存在.Java 从很早时候就可以通过 Java mail 支持邮件服务.Spring 更是对 Java mai ...

  4. SpringBoot之邮件服务

    springboot 邮件服务 今天在看网上学习微服务的时候顺遍看到了一些关于springboot的文章,写的springboot拓展功能就顺遍学习了一下,接下来给大家分享一下springboot封装 ...

  5. spring-boot(六) 邮件服务

    学习文章来自:springboot(十):邮件服务 简单使用 1.pom包配置 pom包里面添加spring-boot-starter-mail包引用 <dependencies> < ...

  6. SpringBoot系列九:SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 服务整合 2.背景 在进行项目开发的时候经常会遇见以下的几个问题:需要进行邮件发送.定时的任务调 ...

  7. 五、springboot 简单优雅是实现邮件服务

    前言 spring boot 的项目放下小半个月没有更新了,终于闲下来可以开心的接着写啦. 之前我们配置好mybatis 多数据源的,接下来我们需要做一个邮件服务.比如你注册的时候,需要输入验证码来校 ...

  8. Springboot】Springboot整合邮件服务(HTML/附件/模板-QQ、网易)

    介绍 邮件服务是常用的服务之一,作用很多,对外可以给用户发送活动.营销广告等:对内可以发送系统监控报告与告警. 本文将介绍Springboot如何整合邮件服务,并给出不同邮件服务商的整合配置. 如图所 ...

  9. springboot集成mail实现邮件服务

    1,新建mailconfig类,对邮件服务固定配置进行实体封装: import java.util.Properties; import org.springframework.beans.facto ...

随机推荐

  1. ffmpeg_资料_01

    1. 用ffmpeg制作推流工具,实现推流系统声音和桌面到rtmp服务器-CSDN论坛-CSDN.NET-中国最大的IT技术社区.html http://bbs.csdn.net/topics/392 ...

  2. git入门篇

    git是一个分布式版本管理软件,总之是一个软件. github是一个代码托管平台,总之是一个网站. github这个网站使用git这个版本管理软件来托管代码. 相当于本地.公司服务器.Github网站 ...

  3. 3d世界是怎样呈现到屏幕上的

    要把一个3d物体呈现在屏幕上,要经过一系列的步骤. 描述3d世界 把3d世界绘制在二维屏幕上 如何描述一个3D世界? 数学家早就给出了3D世界的模型,我们日常最熟悉的3维坐标系就是一个欧几里得空间(线 ...

  4. JDK1.7+eclipse 4.4(luna)+pydev4.4.5构建django开发环境

    最近一直用pycharm搞django学习,但是到2017年随着版本的不断更新,启动之慢,吃资源吃内存越来越严重.果然想找一个IDE替代品. 之前用java开发分布式WEB应用,用eclipse开了N ...

  5. New Concept English Two 8 19

    pls  practice every day $课文17 青春常驻 161. My aunt Jennifer is an actress. 我的姑姑詹妮弗是位演员, 162. She must b ...

  6. vue.js 源代码学习笔记 ----- text-parse.js

    /* @flow */ import { cached } from 'shared/util' import { parseFilters } from './filter-parser' //找到 ...

  7. Java判断String类型变量是否可以转换数字类型

    正则表达式 首先要import java.util.regex.Pattern 和 java.util.regex.Matcher public boolean isNumeric(String st ...

  8. 怎么定位bug

    测试发现bug,怎么定位?不同领域不同的测试对象,具体定位方法都不一样.自己定位bug的方法通常是以下过程: 1.发现bug,首先要查看bug的详细信息,根据描述初步分析是哪个模块哪段代码的问题 2. ...

  9. 《Java技术》预备作业总结

    Java预备作业总结 第一次的博客作业完成了,对于一种崭新的形式,大家可能还不太适应,学习和借鉴好的理念和学习方式,是我们缩小差距.提升自己的第一步. 关于你期望的师生关系 从幼儿园到大学,大家接触到 ...

  10. ubuntu遇到的问题

    昨天分辨率在装一个游戏时被更改了,改过之后,怎么都改不过来... 折腾了一下午,在配置文件中/etc/X11/xorg.conf.failsafe,但是网上都是/etc/X11/xorg.conf, ...