Skip to content

Commit 0c273bf

Browse files
author
caichengzhang
committed
Site updated: 2016-06-15 18:23:13
1 parent 08cfedd commit 0c273bf

File tree

4 files changed

+213
-13
lines changed

4 files changed

+213
-13
lines changed

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

Lines changed: 1 addition & 1 deletion
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;&#x6c;&#116;&#111;&#x3a;&#97;&#100;&#x64;&#114;&#101;&#x73;&#x73;&#x40;&#x65;&#120;&#97;&#x6d;&#x70;&#x6c;&#x65;&#46;&#x63;&#111;&#109;">&#97;&#100;&#x64;&#114;&#101;&#x73;&#x73;&#x40;&#x65;&#120;&#97;&#x6d;&#x70;&#x6c;&#x65;&#46;&#x63;&#111;&#109;</a><br>Markdown 会转成:</p>
476+
<p><a href="&#x6d;&#97;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#x61;&#100;&#x64;&#114;&#101;&#x73;&#x73;&#x40;&#x65;&#120;&#x61;&#x6d;&#x70;&#108;&#101;&#46;&#x63;&#111;&#109;">&#x61;&#100;&#x64;&#114;&#101;&#x73;&#x73;&#x40;&#x65;&#120;&#x61;&#x6d;&#x70;&#108;&#101;&#46;&#x63;&#111;&#109;</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:address@example.com" target="_blank" rel="external">address@example.com</a>)会变成一个可以点击的「address@example.com」链接。</p>

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

Lines changed: 106 additions & 6 deletions
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-15T10:20:52.000Z">
17+
<meta property="og:updated_time" content="2016-06-15T10:22:59.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发送邮件。
@@ -236,11 +236,111 @@ <h1 class="article-title" itemprop="name">
236236
<div class="article-entry" itemprop="articleBody">
237237

238238
<p>Spring Boot中使用JavaMailSender发送邮件<br>2016年06月14日 标签:Spring Boot<br>相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送。在Spring Boot的Starter模块中也为此提供了自动化配置。下面通过实例看看如何在Spring Boot中使用JavaMailSender发送邮件。</p>
239-
<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;dyc87112@qq.com&quot;);</span><br><span class="line"> message.setTo(&quot;dyc87112@qq.com&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;dyc87112@qq.com&quot;);</span><br><span class="line"> helper.setTo(&quot;dyc87112@qq.com&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;dyc87112@qq.com&quot;);</span><br><span class="line"> helper.setTo(&quot;dyc87112@qq.com&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>
240-
<p><dependency><br> <groupid>org.springframework.boot</groupid><br> <artifactid>spring-boot-starter-velocity</artifactid><br></dependency><br>在resources/templates/下,创建一个模板页面template.vm:</p>
241-
<pre><code>
242-
</code></pre><p><html> </html></p>
243-
<p><body><br> <h3>你好, ${username}, 这是一封模板邮件!</h3><br></body><br><br>```<br>我们之前在Spring Boot中开发Web应用时,提到过在Spring Boot的自动化配置下,模板默认位于resources/templates/目录下</p>
239+
<p>快速入门<br>在Spring Boot的工程中的pom.xml中引入spring-boot-starter-mail依赖:</p>
240+
<pre><code>&lt;dependency&gt;
241+
&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
242+
&lt;artifactId&gt;spring-boot-starter-mail&lt;/artifactId&gt;
243+
&lt;/dependency&gt;
244+
245+
如其他自动化配置模块一样,在完成了依赖引入之后,只需要在application.properties中配置相应的属性内容。
246+
247+
下面我们以QQ邮箱为例,在application.properties中加入如下配置(注意替换自己的用户名和密码):
248+
249+
spring.mail.host=smtp.qq.com
250+
spring.mail.username=用户名
251+
spring.mail.password=密码
252+
spring.mail.properties.mail.smtp.auth=true
253+
spring.mail.properties.mail.smtp.starttls.enable=true
254+
spring.mail.properties.mail.smtp.starttls.required=true
255+
通过单元测试来实现一封简单邮件的发送:
256+
257+
@RunWith(SpringJUnit4ClassRunner.class)
258+
@SpringApplicationConfiguration(classes = Application.class)
259+
public class ApplicationTests {
260+
261+
@Autowired
262+
private JavaMailSender mailSender;
263+
264+
@Test
265+
public void sendSimpleMail() throws Exception {
266+
SimpleMailMessage message = new SimpleMailMessage();
267+
message.setFrom(&quot;dyc87112@qq.com&quot;);
268+
message.setTo(&quot;dyc87112@qq.com&quot;);
269+
message.setSubject(&quot;主题:简单邮件&quot;);
270+
message.setText(&quot;测试邮件内容&quot;);
271+
272+
mailSender.send(message);
273+
}
274+
275+
}
276+
到这里,一个简单的邮件发送就完成了,运行一下该单元测试,看看效果如何?
277+
278+
由于Spring Boot的starter模块提供了自动化配置,所以在引入了spring-boot-starter-mail依赖之后,会根据配置文件中的内容去创建JavaMailSender实例,因此我们可以直接在需要使用的地方直接@Autowired来引入邮件发送对象。
279+
进阶使用
280+
在上例中,我们通过使用SimpleMailMessage实现了简单的邮件发送,但是实际使用过程中,我们还可能会带上附件、或是使用邮件模块等。这个时候我们就需要使用MimeMessage来设置复杂一些的邮件内容,下面我们就来依次实现一下。
281+
282+
发送附件
283+
在上面单元测试中加入如下测试用例(通过MimeMessageHelper来发送一封带有附件的邮件):
284+
285+
@Test
286+
public void sendAttachmentsMail() throws Exception {
287+
288+
MimeMessage mimeMessage = mailSender.createMimeMessage();
289+
290+
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
291+
helper.setFrom(&quot;dyc87112@qq.com&quot;);
292+
helper.setTo(&quot;dyc87112@qq.com&quot;);
293+
helper.setSubject(&quot;主题:有附件&quot;);
294+
helper.setText(&quot;有附件的邮件&quot;);
295+
296+
FileSystemResource file = new FileSystemResource(new File(&quot;weixin.jpg&quot;));
297+
helper.addAttachment(&quot;附件-1.jpg&quot;, file);
298+
helper.addAttachment(&quot;附件-2.jpg&quot;, file);
299+
300+
mailSender.send(mimeMessage);
301+
302+
}
303+
嵌入静态资源
304+
除了发送附件之外,我们在邮件内容中可能希望通过嵌入图片等静态资源,让邮件获得更好的阅读体验,而不是从附件中查看具体图片,下面的测试用例演示了如何通过MimeMessageHelper实现在邮件正文中嵌入静态资源。
305+
306+
@Test
307+
public void sendInlineMail() throws Exception {
308+
309+
MimeMessage mimeMessage = mailSender.createMimeMessage();
310+
311+
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
312+
helper.setFrom(&quot;dyc87112@qq.com&quot;);
313+
helper.setTo(&quot;dyc87112@qq.com&quot;);
314+
helper.setSubject(&quot;主题:嵌入静态资源&quot;);
315+
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);
316+
317+
FileSystemResource file = new FileSystemResource(new File(&quot;weixin.jpg&quot;));
318+
helper.addInline(&quot;weixin&quot;, file);
319+
320+
mailSender.send(mimeMessage);
321+
322+
}
323+
这里需要注意的是addInline函数中资源名称weixin需要与正文中cid:weixin对应起来
324+
325+
模板邮件
326+
通常我们使用邮件发送服务的时候,都会有一些固定的场景,比如重置密码、注册确认等,给每个用户发送的内容可能只有小部分是变化的。所以,很多时候我们会使用模板引擎来为各类邮件设置成模板,这样我们只需要在发送时去替换变化部分的参数即可。
327+
328+
在Spring Boot中使用模板引擎来实现模板化的邮件发送也是非常容易的,下面我们以velocity为例实现一下。
329+
330+
引入velocity模块的依赖:
331+
332+
&lt;dependency&gt;
333+
&lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
334+
&lt;artifactId&gt;spring-boot-starter-velocity&lt;/artifactId&gt;
335+
&lt;/dependency&gt;
336+
在resources/templates/下,创建一个模板页面template.vm:
337+
338+
&lt;html&gt;
339+
&lt;body&gt;
340+
&lt;h3&gt;你好, ${username}, 这是一封模板邮件!&lt;/h3&gt;
341+
&lt;/body&gt;
342+
&lt;/html&gt;
343+
</code></pre><p>我们之前在Spring Boot中开发Web应用时,提到过在Spring Boot的自动化配置下,模板默认位于resources/templates/目录下</p>
244344
<p>最后,我们在单元测试中加入发送模板邮件的测试用例,具体如下:</p>
245345
<pre><code>@Test
246346
public void sendTemplateMail() throws Exception {

0 commit comments

Comments
 (0)