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. gif&png&jpg&webp

    几种图片格式的区别和联系 1.http://www.tuicool.com/articles/AbUvI3A

  2. vue双向绑定原理及实现

    vue双向绑定原理及实现 一.总结 一句话总结:vue中的双向绑定主要是通过发布者-订阅者模式来实现的 发布 订阅 1.单向绑定和双向绑定的区别是什么? model view 更新 单向绑定:mode ...

  3. 安装 android4.0 到 vmware的注意点

    我发现无论如何,wmware上是出不来声音的. 我放弃 android-x86-4.3-20130725.iso 在 声音上有问题 现在安装这个版本: android-x86-4.0-RC2-eeep ...

  4. 雷林鹏分享:Ruby 多线程

    Ruby 多线程 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程. 线程是程序中一个单一的顺序控制流程,在单个程序中同时运行多个线程完成不同的工作,称为多线程. Ruby 中我们可以通 ...

  5. PrestaShop 1.7 用户付款的时候无法支付错误

    用户付款的时候出现错误,错误的信息是没有支付方式. 这个有可能是你后台支付的国家限制没有选择. 请确定你已经选择了支付国家限制已经选择了. 当选择成功后,你应该可以看到下面的选择项.

  6. db2时间函数

    获取当前日期: select current date from sysibm.sysdummy1; values current date; --获取当前时间 select current time ...

  7. gzip压缩初探

    前言 我们平时工作中传文件时为了提高传输速度一般都会把文件压缩一下再传,那样速度回快一些,尤其是那些文件很多的文件夹,比较常用的压缩格式就是zip,rar了.那我们日常网页中利用http协议请求的那些 ...

  8. hibernate的一些缺陷(转)

    例如用户在系统中,保存的信息包括简要信息(用户名.联系电话.Email.性别)和一些图像信息(照片).        但是在系统设计时,我的设计方式都是遵循业务的需要,设计一个“用户”类,包含用户名. ...

  9. Android 4.3发布 新增4大改变25日推送升级[附Android 4.3 工厂镜像]

    北京时间7月25日,谷歌举行发布会,正式发布了全新的Nexus 7平板电脑以及Android 4.3系统. 其中Android 4.3系统隶属于4.X果冻豆(Jelly Bean)系列,是目前最新的操 ...

  10. ROS会议 ROSCon 2017

    ----ROSCon2012-2017----来源链接:https://roscon.ros.org           近三年ROSCon(2015-2017)都会将会议视频录像和文档公开~以下为机 ...