Skip to content

Commit 7141a53

Browse files
author
caichengzhang
committed
Site updated: 2016-06-15 18:20:17
1 parent 1ce4c25 commit 7141a53

File tree

11 files changed

+59
-51
lines changed

11 files changed

+59
-51
lines changed

2016/04/28/HTML5实战——svg学习/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ <h1 class="article-title" itemprop="name">
247247

248248
<nav id="article-nav">
249249

250-
<a href="/2016/04/28/javascript-正则表达式/" id="article-nav-newer" class="article-nav-link-wrap">
250+
<a href="/2016/04/28/HTjavascript-正则表达式/" id="article-nav-newer" class="article-nav-link-wrap">
251251
<strong class="article-nav-caption"><</strong>
252252
<div class="article-nav-title">
253253

2016/04/28/HTjavascript-正则表达式/index.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -260,18 +260,18 @@ <h1 class="article-title" itemprop="name">
260260

261261
<nav id="article-nav">
262262

263-
<a href="/2016/04/28/javascript-闭包/" id="article-nav-newer" class="article-nav-link-wrap">
263+
<a href="/2016/04/28/javascript-正则表达式/" id="article-nav-newer" class="article-nav-link-wrap">
264264
<strong class="article-nav-caption"><</strong>
265265
<div class="article-nav-title">
266266

267-
javascript----闭包
267+
javascript---正则表达式
268268

269269
</div>
270270
</a>
271271

272272

273-
<a href="/2016/04/28/javascript-正则表达式/" id="article-nav-older" class="article-nav-link-wrap">
274-
<div class="article-nav-title">javascript---正则表达式</div>
273+
<a href="/2016/04/28/HTML5实战——svg学习/" id="article-nav-older" class="article-nav-link-wrap">
274+
<div class="article-nav-title">HTML5实战——svg学习</div>
275275
<strong class="article-nav-caption">></strong>
276276
</a>
277277

2016/04/28/Markdown-语法说明-简体中文版/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ <h2 id="这是一个标题。"><a href="#这是一个标题。" class="headerlin
473473
<p>Markdown 支持以比较简短的自动链接形式来处理网址和电子邮件信箱,只要是用方括号包起来, Markdown 就会自动把它转成链接。一般网址的链接文字就和链接地址一样,例如:</p>
474474
<p><a href="http://example.com/" target="_blank" rel="external">http://example.com/</a><br>Markdown 会转为:</p>
475475
<p><a href="http://example.com/" target="_blank" rel="external">http://example.com/</a><br>邮址的自动链接也很类似,只是 Markdown 会先做一个编码转换的过程,把文字字符转成 16 进位码的 HTML 实体,这样的格式可以糊弄一些不好的邮址收集机器人,例如:</p>
476-
<p><a href="&#x6d;&#97;&#x69;&#108;&#x74;&#111;&#58;&#97;&#x64;&#100;&#114;&#101;&#x73;&#x73;&#64;&#x65;&#120;&#x61;&#x6d;&#112;&#x6c;&#101;&#x2e;&#99;&#x6f;&#109;">&#97;&#x64;&#100;&#114;&#101;&#x73;&#x73;&#64;&#x65;&#120;&#x61;&#x6d;&#112;&#x6c;&#101;&#x2e;&#99;&#x6f;&#109;</a><br>Markdown 会转成:</p>
476+
<p><a href="&#109;&#97;&#x69;&#108;&#x74;&#111;&#58;&#x61;&#x64;&#100;&#x72;&#101;&#x73;&#x73;&#x40;&#101;&#x78;&#x61;&#x6d;&#x70;&#108;&#x65;&#46;&#99;&#x6f;&#x6d;">&#x61;&#x64;&#100;&#x72;&#101;&#x73;&#x73;&#x40;&#101;&#x78;&#x61;&#x6d;&#x70;&#108;&#x65;&#46;&#99;&#x6f;&#x6d;</a><br>Markdown 会转成:</p>
477477
<p><a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;
478478
&#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;
479479
&#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;<br>&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a><br>在浏览器里面,这段字串(其实是 <a href="mailto:[email protected]" target="_blank" rel="external">[email protected]</a>)会变成一个可以点击的「[email protected]」链接。</p>

2016/04/28/javascript-正则表达式/index.html

+4-4
Original file line numberDiff line numberDiff line change
@@ -256,18 +256,18 @@ <h1 class="article-title" itemprop="name">
256256

257257
<nav id="article-nav">
258258

259-
<a href="/2016/04/28/HTjavascript-正则表达式/" id="article-nav-newer" class="article-nav-link-wrap">
259+
<a href="/2016/04/28/javascript-闭包/" id="article-nav-newer" class="article-nav-link-wrap">
260260
<strong class="article-nav-caption"><</strong>
261261
<div class="article-nav-title">
262262

263-
javascript---正则表达式
263+
javascript----闭包
264264

265265
</div>
266266
</a>
267267

268268

269-
<a href="/2016/04/28/HTML5实战——svg学习/" id="article-nav-older" class="article-nav-link-wrap">
270-
<div class="article-nav-title">HTML5实战——svg学习</div>
269+
<a href="/2016/04/28/HTjavascript-正则表达式/" id="article-nav-older" class="article-nav-link-wrap">
270+
<div class="article-nav-title">javascript---正则表达式</div>
271271
<strong class="article-nav-caption">></strong>
272272
</a>
273273

2016/04/28/javascript-闭包/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ <h1 class="article-title" itemprop="name">
275275
</a>
276276

277277

278-
<a href="/2016/04/28/HTjavascript-正则表达式/" id="article-nav-older" class="article-nav-link-wrap">
278+
<a href="/2016/04/28/javascript-正则表达式/" id="article-nav-older" class="article-nav-link-wrap">
279279
<div class="article-nav-title">javascript---正则表达式</div>
280280
<strong class="article-nav-caption">></strong>
281281
</a>

2016/06/15/SpringBoot中使用JavaMailSender发送邮件/index.html

+7-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<meta property="og:site_name" content="菜菜的博客">
1515
<meta property="og:description" content="Spring Boot中使用JavaMailSender发送邮件2016年06月14日 标签:Spring Boot相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送。在Spring Boot的Starter模块中也为此提供了自动化配置。下面通过实例看看如何在Spring Boot中使用JavaMailSender发送邮件。
1616
快速入门在">
17-
<meta property="og:updated_time" content="2016-06-15T09:51:05.000Z">
17+
<meta property="og:updated_time" content="2016-06-15T10:19:58.000Z">
1818
<meta name="twitter:card" content="summary">
1919
<meta name="twitter:title" content="SpringBoot中使用JavaMailSender发送邮件">
2020
<meta name="twitter:description" content="Spring Boot中使用JavaMailSender发送邮件2016年06月14日 标签:Spring Boot相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送。在Spring Boot的Starter模块中也为此提供了自动化配置。下面通过实例看看如何在Spring Boot中使用JavaMailSender发送邮件。
@@ -238,8 +238,12 @@ <h1 class="article-title" itemprop="name">
238238
<p>Spring Boot中使用JavaMailSender发送邮件<br>2016年06月14日 标签:Spring Boot<br>相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送。在Spring Boot的Starter模块中也为此提供了自动化配置。下面通过实例看看如何在Spring Boot中使用JavaMailSender发送邮件。</p>
239239
<p>快速入门<br>在Spring Boot的工程中的pom.xml中引入spring-boot-starter-mail依赖:<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br></pre></td><td class="code"><pre><span class="line">&lt;dependency&gt; </span><br><span class="line"> &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;</span><br><span class="line"> &lt;artifactId&gt;spring-boot-starter-mail&lt;/artifactId&gt;</span><br><span class="line">&lt;/dependency&gt; </span><br><span class="line">``` </span><br><span class="line">如其他自动化配置模块一样,在完成了依赖引入之后,只需要在application.properties中配置相应的属性内容。</span><br><span class="line"></span><br><span class="line">下面我们以QQ邮箱为例,在application.properties中加入如下配置(注意替换自己的用户名和密码):</span><br><span class="line"></span><br><span class="line">spring.mail.host=smtp.qq.com </span><br><span class="line">spring.mail.username=用户名 </span><br><span class="line">spring.mail.password=密码 </span><br><span class="line">spring.mail.properties.mail.smtp.auth=true </span><br><span class="line">spring.mail.properties.mail.smtp.starttls.enable=true </span><br><span class="line">spring.mail.properties.mail.smtp.starttls.required=true </span><br><span class="line">通过单元测试来实现一封简单邮件的发送:</span><br><span class="line"></span><br><span class="line">@RunWith(SpringJUnit4ClassRunner.class)</span><br><span class="line">@SpringApplicationConfiguration(classes = Application.class)</span><br><span class="line">public class ApplicationTests &#123;</span><br><span class="line"></span><br><span class="line"> @Autowired</span><br><span class="line"> private JavaMailSender mailSender;</span><br><span class="line"></span><br><span class="line"> @Test</span><br><span class="line"> public void sendSimpleMail() throws Exception &#123;</span><br><span class="line"> SimpleMailMessage message = new SimpleMailMessage();</span><br><span class="line"> message.setFrom(&quot;[email protected]&quot;);</span><br><span class="line"> message.setTo(&quot;[email protected]&quot;);</span><br><span class="line"> message.setSubject(&quot;主题:简单邮件&quot;);</span><br><span class="line"> message.setText(&quot;测试邮件内容&quot;);</span><br><span class="line"></span><br><span class="line"> mailSender.send(message);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line">到这里,一个简单的邮件发送就完成了,运行一下该单元测试,看看效果如何?</span><br><span class="line"></span><br><span class="line">由于Spring Boot的starter模块提供了自动化配置,所以在引入了spring-boot-starter-mail依赖之后,会根据配置文件中的内容去创建JavaMailSender实例,因此我们可以直接在需要使用的地方直接@Autowired来引入邮件发送对象。</span><br><span class="line">进阶使用</span><br><span class="line">在上例中,我们通过使用SimpleMailMessage实现了简单的邮件发送,但是实际使用过程中,我们还可能会带上附件、或是使用邮件模块等。这个时候我们就需要使用MimeMessage来设置复杂一些的邮件内容,下面我们就来依次实现一下。</span><br><span class="line"></span><br><span class="line">发送附件</span><br><span class="line">在上面单元测试中加入如下测试用例(通过MimeMessageHelper来发送一封带有附件的邮件):</span><br><span class="line"></span><br><span class="line"> @Test</span><br><span class="line"> public void sendAttachmentsMail() throws Exception &#123;</span><br><span class="line"></span><br><span class="line"> MimeMessage mimeMessage = mailSender.createMimeMessage();</span><br><span class="line"></span><br><span class="line"> MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);</span><br><span class="line"> helper.setFrom(&quot;[email protected]&quot;);</span><br><span class="line"> helper.setTo(&quot;[email protected]&quot;);</span><br><span class="line"> helper.setSubject(&quot;主题:有附件&quot;);</span><br><span class="line"> helper.setText(&quot;有附件的邮件&quot;);</span><br><span class="line"></span><br><span class="line"> FileSystemResource file = new FileSystemResource(new File(&quot;weixin.jpg&quot;));</span><br><span class="line"> helper.addAttachment(&quot;附件-1.jpg&quot;, file);</span><br><span class="line"> helper.addAttachment(&quot;附件-2.jpg&quot;, file);</span><br><span class="line"></span><br><span class="line"> mailSender.send(mimeMessage);</span><br><span class="line"></span><br><span class="line"> &#125;</span><br><span class="line">嵌入静态资源</span><br><span class="line">除了发送附件之外,我们在邮件内容中可能希望通过嵌入图片等静态资源,让邮件获得更好的阅读体验,而不是从附件中查看具体图片,下面的测试用例演示了如何通过MimeMessageHelper实现在邮件正文中嵌入静态资源。</span><br><span class="line"></span><br><span class="line"> @Test</span><br><span class="line"> public void sendInlineMail() throws Exception &#123;</span><br><span class="line"></span><br><span class="line"> MimeMessage mimeMessage = mailSender.createMimeMessage();</span><br><span class="line"></span><br><span class="line"> MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);</span><br><span class="line"> helper.setFrom(&quot;[email protected]&quot;);</span><br><span class="line"> helper.setTo(&quot;[email protected]&quot;);</span><br><span class="line"> helper.setSubject(&quot;主题:嵌入静态资源&quot;);</span><br><span class="line"> helper.setText(&quot;&lt;html&gt;&lt;body&gt;&lt;img src=\&quot;cid:weixin\&quot; &gt;&lt;/body&gt;&lt;/html&gt;&quot;, true);</span><br><span class="line"></span><br><span class="line"> FileSystemResource file = new FileSystemResource(new File(&quot;weixin.jpg&quot;));</span><br><span class="line"> helper.addInline(&quot;weixin&quot;, file);</span><br><span class="line"></span><br><span class="line"> mailSender.send(mimeMessage);</span><br><span class="line"></span><br><span class="line"> &#125;</span><br><span class="line">这里需要注意的是addInline函数中资源名称weixin需要与正文中cid:weixin对应起来</span><br><span class="line"></span><br><span class="line">模板邮件</span><br><span class="line">通常我们使用邮件发送服务的时候,都会有一些固定的场景,比如重置密码、注册确认等,给每个用户发送的内容可能只有小部分是变化的。所以,很多时候我们会使用模板引擎来为各类邮件设置成模板,这样我们只需要在发送时去替换变化部分的参数即可。</span><br><span class="line"></span><br><span class="line">在Spring Boot中使用模板引擎来实现模板化的邮件发送也是非常容易的,下面我们以velocity为例实现一下。</span><br><span class="line"></span><br><span class="line">引入velocity模块的依赖:</span><br></pre></td></tr></table></figure></p>
240240
<p><dependency><br> <groupid>org.springframework.boot</groupid><br> <artifactid>spring-boot-starter-velocity</artifactid><br></dependency><br>在resources/templates/下,创建一个模板页面template.vm:</p>
241-
<p><html> </html></p>
242-
<p><body><br> <h3>你好, ${username}, 这是一封模板邮件!</h3><br></body><br><br>```<br>我们之前在Spring Boot中开发Web应用时,提到过在Spring Boot的自动化配置下,模板默认位于resources/templates/目录下</p>
241+
<pre><code>&lt;html&gt;
242+
&lt;body&gt;
243+
&lt;h3&gt;你好, ${username}, 这是一封模板邮件!&lt;/h3&gt;
244+
&lt;/body&gt;
245+
&lt;/html&gt;
246+
</code></pre><p>我们之前在Spring Boot中开发Web应用时,提到过在Spring Boot的自动化配置下,模板默认位于resources/templates/目录下</p>
243247
<p>最后,我们在单元测试中加入发送模板邮件的测试用例,具体如下:</p>
244248
<pre><code>@Test
245249
public void sendTemplateMail() throws Exception {

archives/2016/04/index.html

+8-8
Original file line numberDiff line numberDiff line change
@@ -676,23 +676,19 @@ <h1 itemprop="name">
676676
<div class="archive-article-inner">
677677
<header class="archive-article-header">
678678
<div class="article-meta">
679-
<a href="/2016/04/28/HTjavascript-正则表达式/" class="archive-article-date">
679+
<a href="/2016/04/28/javascript-正则表达式/" class="archive-article-date">
680680
<time datetime="2016-04-28T09:10:23.000Z" itemprop="datePublished">4月 28</time>
681681
</a>
682682
</div>
683683

684684

685685
<h1 itemprop="name">
686-
<a class="archive-article-title" href="/2016/04/28/HTjavascript-正则表达式/">javascript---正则表达式</a>
686+
<a class="archive-article-title" href="/2016/04/28/javascript-正则表达式/">javascript---正则表达式</a>
687687
</h1>
688688

689689

690690
<div class="article-info info-on-right">
691691

692-
<div class="article-tag tagcloud">
693-
<ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/javascript/">javascript</a></li></ul>
694-
</div>
695-
696692

697693

698694
</div>
@@ -707,19 +703,23 @@ <h1 itemprop="name">
707703
<div class="archive-article-inner">
708704
<header class="archive-article-header">
709705
<div class="article-meta">
710-
<a href="/2016/04/28/javascript-正则表达式/" class="archive-article-date">
706+
<a href="/2016/04/28/HTjavascript-正则表达式/" class="archive-article-date">
711707
<time datetime="2016-04-28T09:10:23.000Z" itemprop="datePublished">4月 28</time>
712708
</a>
713709
</div>
714710

715711

716712
<h1 itemprop="name">
717-
<a class="archive-article-title" href="/2016/04/28/javascript-正则表达式/">javascript---正则表达式</a>
713+
<a class="archive-article-title" href="/2016/04/28/HTjavascript-正则表达式/">javascript---正则表达式</a>
718714
</h1>
719715

720716

721717
<div class="article-info info-on-right">
722718

719+
<div class="article-tag tagcloud">
720+
<ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/javascript/">javascript</a></li></ul>
721+
</div>
722+
723723

724724

725725
</div>

0 commit comments

Comments
 (0)