javaWeb狂神_08(邮件发送)

邮件收发

电子邮件

要在网络上实现邮件功能,必须要有专门的邮件服务器。

这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

SMTP服务器地址:一般是 smtp.xxx.com比如163邮箱是smtp.163.comqq邮箱是smtp.qq.com

电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请。比如我们要使用QQ邮箱,就需要开通邮箱功能;
在这里插入图片描述

传输协议

SMTP协议
发送邮件:

我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。

POP3协议
接收邮件:

我们通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。

邮件收发原理
在这里插入图片描述

  1. 大狂神通过smtp协议连接到Smtp服务器,然后发送一封邮件给网易的邮件服务器
  2. 网易分析发现需要去QQ的邮件服务器,通过smtp协议将邮件转投给QQ的Smtp服务器
  3. QQ将接收到的邮件存储在[email protected]这个邮件账号的空间中
  4. 小狂神通过Pop3协议连接到Pop3服务器收取邮件
  5. [email protected]这个邮件账号的空间中取出邮件
  6. Pop3服务器将取出来的邮件送到小狂神手中

【注意】有可能你收件人地址,发件人地址等信息都正确了,控制台也打印了正确的信息,但是在收件箱就是收不到信息。这是因为可能收件箱服务器拒收了你发的邮件(比如认为你的邮件是广告),这时候可能在垃圾箱里能找到,可能找不到。解决办法是重复的邮件内容不要多次发送,或者更换收件箱试试

Java发送邮件

概述

我们将用代码完成邮件的发送。这在实际项目中应用的非常广泛,比如注册需要发送邮件进行账号激活,再比如OA项目中利用邮件进行任务提醒等等。

使用Java发送 E-mail 十分简单,但是首先你应该准备 JavaMail API 和Java Activation Framework 。

得到两个jar包:

  • mail.jar
  • activation.jar

JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如前面所讲的SMTP,POP3,IMAP,还有MIME等。我们在使用JavaMail API 编写邮件时,无须考虑邮件的底层实现细节,只要调用JavaMail 开发包中相应的API类就可以了。

我们可以先尝试发送一封简单的邮件,确保电脑可以连接网络。

  • 创建包含邮件服务器的网络连接信息的Session对象。
  • 创建代表邮件内容的Message对象
  • 创建Transport对象,连接服务器,发送Message,关闭连接

主要有四个核心类,我们在编写程序时,记住这四个核心类,就很容易编写出Java邮件处理程序。

在这里插入图片描述

纯文本邮件

先在项目中导入jar包
在这里插入图片描述

QQ邮箱中获取对应的权限

QQ邮箱需要安全验证,我们需要获取他对应的权限;

QQ邮箱–>邮箱设置–>账户

在这里插入图片描述
在这里插入图片描述

编写测试代码


import com.sun.mail.util.MailSSLSocketFactory;

import java.util.;
import javax.mail.
;
import javax.mail.internet.*;

public class SendEmail {

<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> Exception <span class="token punctuation">{<!-- --></span>

    Properties prop <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Properties</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    prop<span class="token punctuation">.</span><span class="token function">setProperty</span><span class="token punctuation">(</span><span class="token string">"mail.host"</span><span class="token punctuation">,</span> <span class="token string">"smtp.qq.com"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"> 设置QQ邮件服务器</span>
    prop<span class="token punctuation">.</span><span class="token function">setProperty</span><span class="token punctuation">(</span><span class="token string">"mail.transport.protocol"</span><span class="token punctuation">,</span> <span class="token string">"smtp"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 邮件发送协议</span>
    prop<span class="token punctuation">.</span><span class="token function">setProperty</span><span class="token punctuation">(</span><span class="token string">"mail.smtp.auth"</span><span class="token punctuation">,</span> <span class="token string">"true"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 需要验证用户名密码</span>

    <span class="token comment">// 关于QQ邮箱,还要设置SSL加密,加上以下代码即可</span>
    MailSSLSocketFactory sf <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MailSSLSocketFactory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    sf<span class="token punctuation">.</span><span class="token function">setTrustAllHosts</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    prop<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"mail.smtp.ssl.enable"</span><span class="token punctuation">,</span> <span class="token string">"true"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    prop<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"mail.smtp.ssl.socketFactory"</span><span class="token punctuation">,</span> sf<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//使用JavaMail发送邮件的5个步骤</span>

    <span class="token comment">//创建定义整个应用程序所需的环境信息的 Session 对象</span>

    Session session <span class="token operator">=</span> Session<span class="token punctuation">.</span><span class="token function">getDefaultInstance</span><span class="token punctuation">(</span>prop<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">Authenticator</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">public</span> PasswordAuthentication <span class="token function">getPasswordAuthentication</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            <span class="token comment">//发件人邮件用户名、授权码</span>
            <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">PasswordAuthentication</span><span class="token punctuation">(</span><span class="token string">"[email protected]"</span><span class="token punctuation">,</span> <span class="token string">"授权码"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


    <span class="token comment">//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态</span>
    session<span class="token punctuation">.</span><span class="token function">setDebug</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//2、通过session得到transport对象</span>
    Transport ts <span class="token operator">=</span> session<span class="token punctuation">.</span><span class="token function">getTransport</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//3、使用邮箱的用户名和授权码连上邮件服务器</span>
    ts<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span><span class="token string">"smtp.qq.com"</span><span class="token punctuation">,</span> <span class="token string">"[email protected]"</span><span class="token punctuation">,</span> <span class="token string">"授权码"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//4、创建邮件</span>

    <span class="token comment">//创建邮件对象</span>
    MimeMessage message <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeMessage</span><span class="token punctuation">(</span>session<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//指明邮件的发件人</span>
    message<span class="token punctuation">.</span><span class="token function">setFrom</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">InternetAddress</span><span class="token punctuation">(</span><span class="token string">"[email protected]"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发</span>
    message<span class="token punctuation">.</span><span class="token function">setRecipient</span><span class="token punctuation">(</span>Message<span class="token punctuation">.</span>RecipientType<span class="token punctuation">.</span>TO<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">InternetAddress</span><span class="token punctuation">(</span><span class="token string">"[email protected]"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//邮件的标题</span>
    message<span class="token punctuation">.</span><span class="token function">setSubject</span><span class="token punctuation">(</span><span class="token string">"只包含文本的简单邮件"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//邮件的文本内容</span>
    message<span class="token punctuation">.</span><span class="token function">setContent</span><span class="token punctuation">(</span><span class="token string">"你好啊!"</span><span class="token punctuation">,</span> <span class="token string">"text/html;charset=UTF-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//5、发送邮件</span>
    ts<span class="token punctuation">.</span><span class="token function">sendMessage</span><span class="token punctuation">(</span>message<span class="token punctuation">,</span> message<span class="token punctuation">.</span><span class="token function">getAllRecipients</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    ts<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

带图片和附件的邮件

先认识两个类一个名词:

MIME(多用途互联网邮件扩展类型)

MimeBodyPart类

javax.mail.internet.MimeBodyPart类 表示的是一个MIME消息,它和MimeMessage类一样都是从Part接口继承过来。

MimeMultipart类

javax.mail.internet.MimeMultipart是抽象类 Multipart的实现子类,它用来组合多个MIME消息。一个MimeMultipart对象可以包含多个代表MIME消息的MimeBodyPart对象。
在这里插入图片描述
创建包含内嵌图片的邮件

前面的例子中是单独的使用HTML或者是纯文本内容,但是有时候我们需要在纯文本中使用内嵌的方式显示一些图片,因此就要将纯文本和内嵌图片单独存放在MimeBodyPart中然后再将其存放在一个Mimemultipart对象中即可。

import com.sun.mail.util.MailSSLSocketFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;

public class SendImageEmail {
public static void main(String[] args) throws Exception {

    Properties prop <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Properties</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    prop<span class="token punctuation">.</span><span class="token function">setProperty</span><span class="token punctuation">(</span><span class="token string">"mail.host"</span><span class="token punctuation">,</span> <span class="token string">"smtp.qq.com"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment"> 设置QQ邮件服务器</span>
    prop<span class="token punctuation">.</span><span class="token function">setProperty</span><span class="token punctuation">(</span><span class="token string">"mail.transport.protocol"</span><span class="token punctuation">,</span> <span class="token string">"smtp"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 邮件发送协议</span>
    prop<span class="token punctuation">.</span><span class="token function">setProperty</span><span class="token punctuation">(</span><span class="token string">"mail.smtp.auth"</span><span class="token punctuation">,</span> <span class="token string">"true"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 需要验证用户名密码</span>

    <span class="token comment">// 关于QQ邮箱,还要设置SSL加密,加上以下代码即可</span>
    MailSSLSocketFactory sf <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MailSSLSocketFactory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    sf<span class="token punctuation">.</span><span class="token function">setTrustAllHosts</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    prop<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"mail.smtp.ssl.enable"</span><span class="token punctuation">,</span> <span class="token string">"true"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    prop<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"mail.smtp.ssl.socketFactory"</span><span class="token punctuation">,</span> sf<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//使用JavaMail发送邮件的5个步骤</span>

    <span class="token comment">//1、创建定义整个应用程序所需的环境信息的 Session 对象</span>
    Session session <span class="token operator">=</span> Session<span class="token punctuation">.</span><span class="token function">getDefaultInstance</span><span class="token punctuation">(</span>prop<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">Authenticator</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">public</span> PasswordAuthentication <span class="token function">getPasswordAuthentication</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            <span class="token comment">//发件人邮件用户名、授权码</span>
            <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">PasswordAuthentication</span><span class="token punctuation">(</span><span class="token string">"[email protected]"</span><span class="token punctuation">,</span> <span class="token string">"授权码"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


    <span class="token comment">//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态</span>
    session<span class="token punctuation">.</span><span class="token function">setDebug</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//2、通过session得到transport对象</span>
    Transport ts <span class="token operator">=</span> session<span class="token punctuation">.</span><span class="token function">getTransport</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//3、使用邮箱的用户名和授权码连上邮件服务器</span>
    ts<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span><span class="token string">"smtp.qq.com"</span><span class="token punctuation">,</span> <span class="token string">"[email protected]"</span><span class="token punctuation">,</span> <span class="token string">"授权码"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//4、创建邮件</span>

    <span class="token comment">//创建邮件</span>
    MimeMessage message <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeMessage</span><span class="token punctuation">(</span>session<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">// 设置邮件的基本信息</span>
    <span class="token comment">//发件人</span>
    message<span class="token punctuation">.</span><span class="token function">setFrom</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">InternetAddress</span><span class="token punctuation">(</span><span class="token string">"[email protected]"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token comment">//收件人</span>
    message<span class="token punctuation">.</span><span class="token function">setRecipient</span><span class="token punctuation">(</span>Message<span class="token punctuation">.</span>RecipientType<span class="token punctuation">.</span>TO<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">InternetAddress</span><span class="token punctuation">(</span><span class="token string">"[email protected]"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token comment">//邮件标题</span>
    message<span class="token punctuation">.</span><span class="token function">setSubject</span><span class="token punctuation">(</span><span class="token string">"带图片的邮件"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">// 准备邮件数据</span>

    <span class="token comment">// 准备图片数据</span>
    MimeBodyPart image <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeBodyPart</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    DataHandler dh <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DataHandler</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">FileDataSource</span><span class="token punctuation">(</span><span class="token string">"src/resources/bz.jpg"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    image<span class="token punctuation">.</span><span class="token function">setDataHandler</span><span class="token punctuation">(</span>dh<span class="token punctuation">)</span><span class="token punctuation">;</span>
    image<span class="token punctuation">.</span><span class="token function">setContentID</span><span class="token punctuation">(</span><span class="token string">"bz.jpg"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">// 准备正文数据</span>
    MimeBodyPart text <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeBodyPart</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    text<span class="token punctuation">.</span><span class="token function">setContent</span><span class="token punctuation">(</span><span class="token string">"这是一封邮件正文带图片&lt;img src='cid:bz.jpg'&gt;的邮件"</span><span class="token punctuation">,</span> <span class="token string">"text/html;charset=UTF-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">// 描述数据关系</span>
    MimeMultipart mm <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeMultipart</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    mm<span class="token punctuation">.</span><span class="token function">addBodyPart</span><span class="token punctuation">(</span>text<span class="token punctuation">)</span><span class="token punctuation">;</span>
    mm<span class="token punctuation">.</span><span class="token function">addBodyPart</span><span class="token punctuation">(</span>image<span class="token punctuation">)</span><span class="token punctuation">;</span>
    mm<span class="token punctuation">.</span><span class="token function">setSubType</span><span class="token punctuation">(</span><span class="token string">"related"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//设置到消息中,保存修改</span>
    message<span class="token punctuation">.</span><span class="token function">setContent</span><span class="token punctuation">(</span>mm<span class="token punctuation">)</span><span class="token punctuation">;</span>
    message<span class="token punctuation">.</span><span class="token function">saveChanges</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//5.发送邮件</span>
    ts<span class="token punctuation">.</span><span class="token function">sendMessage</span><span class="token punctuation">(</span>message<span class="token punctuation">,</span> message<span class="token punctuation">.</span><span class="token function">getAllRecipients</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    ts<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85

带图片和附件的复杂邮件发送

import com.sun.mail.util.MailSSLSocketFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.security.GeneralSecurityException;
import java.util.Properties;

public class SendFileMail {
public static void main(String[] args) throws MessagingException, GeneralSecurityException {

    <span class="token comment">//创建一个配置文件保存并读取信息</span>
    Properties properties <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Properties</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//设置qq邮件服务器</span>
    properties<span class="token punctuation">.</span><span class="token function">setProperty</span><span class="token punctuation">(</span><span class="token string">"mail.host"</span><span class="token punctuation">,</span><span class="token string">"smtp.qq.com"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token comment">//设置发送的协议</span>
    properties<span class="token punctuation">.</span><span class="token function">setProperty</span><span class="token punctuation">(</span><span class="token string">"mail.transport.protocol"</span><span class="token punctuation">,</span><span class="token string">"smtp"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token comment">//设置用户是否需要验证</span>
    properties<span class="token punctuation">.</span><span class="token function">setProperty</span><span class="token punctuation">(</span><span class="token string">"mail.smtp.auth"</span><span class="token punctuation">,</span> <span class="token string">"true"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


    <span class="token comment">//=================================只有QQ存在的一个特性,需要建立一个安全的链接</span>
    <span class="token comment">// 关于QQ邮箱,还要设置SSL加密,加上以下代码即可</span>
    MailSSLSocketFactory sf <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MailSSLSocketFactory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    sf<span class="token punctuation">.</span><span class="token function">setTrustAllHosts</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    properties<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"mail.smtp.ssl.enable"</span><span class="token punctuation">,</span> <span class="token string">"true"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    properties<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"mail.smtp.ssl.socketFactory"</span><span class="token punctuation">,</span> sf<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//=================================准备工作完毕</span>

    <span class="token comment">//1.创建一个session会话对象;</span>
    Session session <span class="token operator">=</span> Session<span class="token punctuation">.</span><span class="token function">getDefaultInstance</span><span class="token punctuation">(</span>properties<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">Authenticator</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token annotation punctuation">@Override</span>
        <span class="token keyword">protected</span> PasswordAuthentication <span class="token function">getPasswordAuthentication</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">PasswordAuthentication</span><span class="token punctuation">(</span><span class="token string">"[email protected]"</span><span class="token punctuation">,</span> <span class="token string">"授权码"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//可以通过session开启Dubug模式,查看所有的过程</span>
    session<span class="token punctuation">.</span><span class="token function">setDebug</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>


    <span class="token comment">//2.获取连接对象,通过session对象获得Transport,需要捕获或者抛出异常;</span>
    Transport tp <span class="token operator">=</span> session<span class="token punctuation">.</span><span class="token function">getTransport</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//3.连接服务器,需要抛出异常;</span>
    tp<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span><span class="token string">"smtp.qq.com"</span><span class="token punctuation">,</span><span class="token string">"[email protected]"</span><span class="token punctuation">,</span><span class="token string">"授权码"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//4.连接上之后我们需要发送邮件;</span>
    MimeMessage mimeMessage <span class="token operator">=</span> <span class="token function">imageMail</span><span class="token punctuation">(</span>session<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//5.发送邮件</span>
    tp<span class="token punctuation">.</span><span class="token function">sendMessage</span><span class="token punctuation">(</span>mimeMessage<span class="token punctuation">,</span>mimeMessage<span class="token punctuation">.</span><span class="token function">getAllRecipients</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//6.关闭连接</span>
    tp<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

<span class="token punctuation">}</span>


<span class="token keyword">public</span> <span class="token keyword">static</span> MimeMessage <span class="token function">imageMail</span><span class="token punctuation">(</span>Session session<span class="token punctuation">)</span> <span class="token keyword">throws</span> MessagingException <span class="token punctuation">{<!-- --></span>

    <span class="token comment">//消息的固定信息</span>
    MimeMessage mimeMessage <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeMessage</span><span class="token punctuation">(</span>session<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//邮件发送人</span>
    mimeMessage<span class="token punctuation">.</span><span class="token function">setFrom</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">InternetAddress</span><span class="token punctuation">(</span><span class="token string">"[email protected]"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token comment">//邮件接收人,可以同时发送给很多人,我们这里只发给自己;</span>
    mimeMessage<span class="token punctuation">.</span><span class="token function">setRecipient</span><span class="token punctuation">(</span>Message<span class="token punctuation">.</span>RecipientType<span class="token punctuation">.</span>TO<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">InternetAddress</span><span class="token punctuation">(</span><span class="token string">"[email protected]"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    mimeMessage<span class="token punctuation">.</span><span class="token function">setSubject</span><span class="token punctuation">(</span><span class="token string">"我也不知道是个什么东西就发给你了"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//邮件主题</span>


    <span class="token comment">/*
    编写邮件内容
    1.图片
    2.附件
    3.文本
     */</span>

    <span class="token comment">//图片</span>
    MimeBodyPart body1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeBodyPart</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    body1<span class="token punctuation">.</span><span class="token function">setDataHandler</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">DataHandler</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">FileDataSource</span><span class="token punctuation">(</span><span class="token string">"src/resources/yhbxb.png"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    body1<span class="token punctuation">.</span><span class="token function">setContentID</span><span class="token punctuation">(</span><span class="token string">"yhbxb.png"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//图片设置ID</span>

    <span class="token comment">//文本</span>
    MimeBodyPart body2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeBodyPart</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    body2<span class="token punctuation">.</span><span class="token function">setContent</span><span class="token punctuation">(</span><span class="token string">"请注意,我不是广告&lt;img src='cid:yhbxb.png'&gt;"</span><span class="token punctuation">,</span><span class="token string">"text/html;charset=utf-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//附件</span>
    MimeBodyPart body3 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeBodyPart</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    body3<span class="token punctuation">.</span><span class="token function">setDataHandler</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">DataHandler</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">FileDataSource</span><span class="token punctuation">(</span><span class="token string">"src/resources/log4j.properties"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    body3<span class="token punctuation">.</span><span class="token function">setFileName</span><span class="token punctuation">(</span><span class="token string">"log4j.properties"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//附件设置名字</span>

    MimeBodyPart body4 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeBodyPart</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    body4<span class="token punctuation">.</span><span class="token function">setDataHandler</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">DataHandler</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">FileDataSource</span><span class="token punctuation">(</span><span class="token string">"src/resources/1.txt"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    body4<span class="token punctuation">.</span><span class="token function">setFileName</span><span class="token punctuation">(</span><span class="token string">""</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//附件设置名字</span>

    <span class="token comment">//拼装邮件正文内容</span>
    MimeMultipart multipart1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeMultipart</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    multipart1<span class="token punctuation">.</span><span class="token function">addBodyPart</span><span class="token punctuation">(</span>body1<span class="token punctuation">)</span><span class="token punctuation">;</span>
    multipart1<span class="token punctuation">.</span><span class="token function">addBodyPart</span><span class="token punctuation">(</span>body2<span class="token punctuation">)</span><span class="token punctuation">;</span>
    multipart1<span class="token punctuation">.</span><span class="token function">setSubType</span><span class="token punctuation">(</span><span class="token string">"related"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//1.文本和图片内嵌成功!</span>

    <span class="token comment">//new MimeBodyPart().setContent(multipart1); //将拼装好的正文内容设置为主体</span>
    MimeBodyPart contentText <span class="token operator">=</span>  <span class="token keyword">new</span> <span class="token class-name">MimeBodyPart</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    contentText<span class="token punctuation">.</span><span class="token function">setContent</span><span class="token punctuation">(</span>multipart1<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token comment">//拼接附件</span>
    MimeMultipart allFile <span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">MimeMultipart</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    allFile<span class="token punctuation">.</span><span class="token function">addBodyPart</span><span class="token punctuation">(</span>body3<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//附件</span>
    allFile<span class="token punctuation">.</span><span class="token function">addBodyPart</span><span class="token punctuation">(</span>body4<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//附件</span>
    allFile<span class="token punctuation">.</span><span class="token function">addBodyPart</span><span class="token punctuation">(</span>contentText<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//正文</span>
    allFile<span class="token punctuation">.</span><span class="token function">setSubType</span><span class="token punctuation">(</span><span class="token string">"mixed"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//正文和附件都存在邮件中,所有类型设置为mixed;</span>


    <span class="token comment">//放到Message消息中</span>
    mimeMessage<span class="token punctuation">.</span><span class="token function">setContent</span><span class="token punctuation">(</span>allFile<span class="token punctuation">)</span><span class="token punctuation">;</span>
    mimeMessage<span class="token punctuation">.</span><span class="token function">saveChanges</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">//保存修改</span>


    <span class="token keyword">return</span> mimeMessage<span class="token punctuation">;</span>

<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130

JavaWeb发送邮件

现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息。今天我们也来实现一个这样的功能,用户注册成功之后,就将用户的注册信息以Email的形式发送到用户的注册邮箱当中,实现发送邮件功能就得借助于JavaMail了。

代码实现:

  1. 新建一个JavaWeb项目,配置tomcat,添加jar包
    在这里插入图片描述

  2. 编写对应的用户实体类

package com.kuang.pojo;

public class User {

<span class="token keyword">private</span> String username<span class="token punctuation">;</span>
<span class="token keyword">private</span> String password<span class="token punctuation">;</span>
<span class="token keyword">private</span> String email<span class="token punctuation">;</span>

<span class="token keyword">public</span> <span class="token function">User</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
<span class="token punctuation">}</span>

<span class="token keyword">public</span> <span class="token function">User</span><span class="token punctuation">(</span>String username<span class="token punctuation">,</span> String password<span class="token punctuation">,</span> String email<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>username <span class="token operator">=</span> username<span class="token punctuation">;</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>password <span class="token operator">=</span> password<span class="token punctuation">;</span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>email <span class="token operator">=</span> email<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">public</span> String <span class="token function">getUsername</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">return</span> username<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setUsername</span><span class="token punctuation">(</span>String username<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>username <span class="token operator">=</span> username<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">public</span> String <span class="token function">getPassword</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">return</span> password<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setPassword</span><span class="token punctuation">(</span>String password<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>password <span class="token operator">=</span> password<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">public</span> String <span class="token function">getEmail</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">return</span> email<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setEmail</span><span class="token punctuation">(</span>String email<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>email <span class="token operator">=</span> email<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> String <span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">return</span> <span class="token string">"User{"</span> <span class="token operator">+</span>
            <span class="token string">"username='"</span> <span class="token operator">+</span> username <span class="token operator">+</span> <span class="token string">'\''</span> <span class="token operator">+</span>
            <span class="token string">", password='"</span> <span class="token operator">+</span> password <span class="token operator">+</span> <span class="token string">'\''</span> <span class="token operator">+</span>
            <span class="token string">", email='"</span> <span class="token operator">+</span> email <span class="token operator">+</span> <span class="token string">'\''</span> <span class="token operator">+</span>
            <span class="token string">'}'</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  1. 前端注册页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册</title>
</head>
<body>

<form action="${pageContext.request.contextPath}/RegisterServlet.do" method=“post”>
用户名:<input type=“text” name=“username”><br/>
密码:<input type=“password” name=“password”><br/>
邮箱:<input type=“text” name=“email”><br/>
<input type=“submit” value=“注册”>
</form>

</body>
</html>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  1. 邮件发送工具类
package com.kuang.utils;

import com.kuang.pojo.User;
import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

public class Sendmail extends Thread {

<span class="token comment">//用于给用户发送邮件的邮箱</span>
<span class="token keyword">private</span> String from <span class="token operator">=</span> <span class="token string">"[email protected]"</span><span class="token punctuation">;</span>
<span class="token comment">//邮箱的用户名</span>
<span class="token keyword">private</span> String username <span class="token operator">=</span> <span class="token string">"[email protected]"</span><span class="token punctuation">;</span>
<span class="token comment">//邮箱的密码</span>
<span class="token keyword">private</span> String password <span class="token operator">=</span> <span class="token string">"授权码"</span><span class="token punctuation">;</span>
<span class="token comment">//发送邮件的服务器地址</span>
<span class="token keyword">private</span> String host <span class="token operator">=</span> <span class="token string">"smtp.qq.com"</span><span class="token punctuation">;</span>

<span class="token keyword">private</span> User user<span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token function">Sendmail</span><span class="token punctuation">(</span>User user<span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
    <span class="token keyword">this</span><span class="token punctuation">.</span>user <span class="token operator">=</span> user<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token comment">//重写run方法的实现,在run方法中发送邮件给指定的用户</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">run</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    <span class="token keyword">try</span><span class="token punctuation">{<!-- --></span>
        Properties prop <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Properties</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        prop<span class="token punctuation">.</span><span class="token function">setProperty</span><span class="token punctuation">(</span><span class="token string">"mail.host"</span><span class="token punctuation">,</span> host<span class="token punctuation">)</span><span class="token punctuation">;</span>
        prop<span class="token punctuation">.</span><span class="token function">setProperty</span><span class="token punctuation">(</span><span class="token string">"mail.transport.protocol"</span><span class="token punctuation">,</span> <span class="token string">"smtp"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        prop<span class="token punctuation">.</span><span class="token function">setProperty</span><span class="token punctuation">(</span><span class="token string">"mail.smtp.auth"</span><span class="token punctuation">,</span> <span class="token string">"true"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">// 关于QQ邮箱,还要设置SSL加密,加上以下代码即可</span>
        MailSSLSocketFactory sf <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MailSSLSocketFactory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        sf<span class="token punctuation">.</span><span class="token function">setTrustAllHosts</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        prop<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"mail.smtp.ssl.enable"</span><span class="token punctuation">,</span> <span class="token string">"true"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        prop<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"mail.smtp.ssl.socketFactory"</span><span class="token punctuation">,</span> sf<span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">//1、创建定义整个应用程序所需的环境信息的 Session 对象</span>
        Session session <span class="token operator">=</span> Session<span class="token punctuation">.</span><span class="token function">getDefaultInstance</span><span class="token punctuation">(</span>prop<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">Authenticator</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            <span class="token keyword">public</span> PasswordAuthentication <span class="token function">getPasswordAuthentication</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
                <span class="token comment">//发件人邮件用户名、授权码</span>
                <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">PasswordAuthentication</span><span class="token punctuation">(</span><span class="token string">"[email protected]"</span><span class="token punctuation">,</span> <span class="token string">"授权码"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态</span>
        session<span class="token punctuation">.</span><span class="token function">setDebug</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">//2、通过session得到transport对象</span>
        Transport ts <span class="token operator">=</span> session<span class="token punctuation">.</span><span class="token function">getTransport</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">//3、使用邮箱的用户名和授权码连上邮件服务器</span>
        ts<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span>host<span class="token punctuation">,</span> username<span class="token punctuation">,</span> password<span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">//4、创建邮件</span>
        MimeMessage message <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MimeMessage</span><span class="token punctuation">(</span>session<span class="token punctuation">)</span><span class="token punctuation">;</span>
        message<span class="token punctuation">.</span><span class="token function">setFrom</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">InternetAddress</span><span class="token punctuation">(</span>from<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//发件人</span>
        message<span class="token punctuation">.</span><span class="token function">setRecipient</span><span class="token punctuation">(</span>Message<span class="token punctuation">.</span>RecipientType<span class="token punctuation">.</span>TO<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">InternetAddress</span><span class="token punctuation">(</span>user<span class="token punctuation">.</span><span class="token function">getEmail</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//收件人</span>
        message<span class="token punctuation">.</span><span class="token function">setSubject</span><span class="token punctuation">(</span><span class="token string">"用户注册邮件"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//邮件的标题</span>

        String info <span class="token operator">=</span> <span class="token string">"恭喜您注册成功,您的用户名:"</span> <span class="token operator">+</span> user<span class="token punctuation">.</span><span class="token function">getUsername</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">",您的密码:"</span> <span class="token operator">+</span> user<span class="token punctuation">.</span><span class="token function">getPassword</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">",请妥善保管,如有问题请联系网站客服!!"</span><span class="token punctuation">;</span>

        message<span class="token punctuation">.</span><span class="token function">setContent</span><span class="token punctuation">(</span>info<span class="token punctuation">,</span> <span class="token string">"text/html;charset=UTF-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        message<span class="token punctuation">.</span><span class="token function">saveChanges</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">//发送邮件</span>
        ts<span class="token punctuation">.</span><span class="token function">sendMessage</span><span class="token punctuation">(</span>message<span class="token punctuation">,</span> message<span class="token punctuation">.</span><span class="token function">getAllRecipients</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        ts<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span><span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">RuntimeException</span><span class="token punctuation">(</span>e<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  1. 编写对应的servlet处理类
package com.kuang.servlet;

import com.kuang.pojo.User;
import com.kuang.utils.Sendmail;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RegisterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
//接收用户请求,封装成对象
String username = request.getParameter(“username”);
String password = request.getParameter(“password”);
String email = request.getParameter(“email”);
User user = new User(username,password,email);

        <span class="token comment">//用户注册成功之后,给用户发送一封邮件</span>
        <span class="token comment">//我们使用线程来专门发送邮件,防止出现耗时,和网站注册人数过多的情况;</span>
        Sendmail send <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Sendmail</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token comment">//启动线程,线程启动之后就会执行run方法来发送邮件</span>
        send<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">//注册用户</span>
        request<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span><span class="token string">"message"</span><span class="token punctuation">,</span> <span class="token string">"注册成功,我们已经发了一封带了注册信息的电子邮件,请查收!如网络不稳定,可能过会儿才能收到!!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        request<span class="token punctuation">.</span><span class="token function">getRequestDispatcher</span><span class="token punctuation">(</span><span class="token string">"info.jsp"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">forward</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> response<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        request<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span><span class="token string">"message"</span><span class="token punctuation">,</span> <span class="token string">"注册失败!!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        request<span class="token punctuation">.</span><span class="token function">getRequestDispatcher</span><span class="token punctuation">(</span><span class="token string">"info.jsp"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">forward</span><span class="token punctuation">(</span>request<span class="token punctuation">,</span> response<span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>


<span class="token annotation punctuation">@Override</span>
<span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">doPost</span><span class="token punctuation">(</span>HttpServletRequest req<span class="token punctuation">,</span> HttpServletResponse resp<span class="token punctuation">)</span> <span class="token keyword">throws</span> ServletException<span class="token punctuation">,</span> IOException <span class="token punctuation">{<!-- --></span>
    <span class="token function">doGet</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> resp<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  1. 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>register</servlet-name>
        <servlet-class>com.kuang.servlet.RegisterServlet</servlet-class>
    </servlet>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>servlet-mapping</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>servlet-name</span><span class="token punctuation">&gt;</span></span>register<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>servlet-name</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>url-pattern</span><span class="token punctuation">&gt;</span></span>/RegisterServlet.do<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>url-pattern</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>servlet-mapping</span><span class="token punctuation">&gt;</span></span>

</web-app>

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  1. 发送成功或失败的反馈页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>提示信息</title>
</head>
<body>
    ${message}
</body>
</html>

 
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

运行Tomcat测试!

邮件发送成功,OK!

邮件收发

电子邮件

要在网络上实现邮件功能,必须要有专门的邮件服务器。

这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

SMTP服务器地址:一般是 smtp.xxx.com比如163邮箱是smtp.163.comqq邮箱是smtp.qq.com

电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请。比如我们要使用QQ邮箱,就需要开通邮箱功能;
在这里插入图片描述

传输协议

SMTP协议
发送邮件:

我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。

POP3协议
接收邮件:

我们通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。

邮件收发原理
在这里插入图片描述

  1. 大狂神通过smtp协议连接到Smtp服务器,然后发送一封邮件给网易的邮件服务器
  2. 网易分析发现需要去QQ的邮件服务器,通过smtp协议将邮件转投给QQ的Smtp服务器
  3. QQ将接收到的邮件存储在[email protected]这个邮件账号的空间中
  4. 小狂神通过Pop3协议连接到Pop3服务器收取邮件
  5. [email protected]这个邮件账号的空间中取出邮件
  6. Pop3服务器将取出来的邮件送到小狂神手中

【注意】有可能你收件人地址,发件人地址等信息都正确了,控制台也打印了正确的信息,但是在收件箱就是收不到信息。这是因为可能收件箱服务器拒收了你发的邮件(比如认为你的邮件是广告),这时候可能在垃圾箱里能找到,可能找不到。解决办法是重复的邮件内容不要多次发送,或者更换收件箱试试

Java发送邮件

概述

我们将用代码完成邮件的发送。这在实际项目中应用的非常广泛,比如注册需要发送邮件进行账号激活,再比如OA项目中利用邮件进行任务提醒等等。

使用Java发送 E-mail 十分简单,但是首先你应该准备 JavaMail API 和Java Activation Framework 。

得到两个jar包:

  • mail.jar
  • activation.jar

JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如前面所讲的SMTP,POP3,IMAP,还有MIME等。我们在使用JavaMail API 编写邮件时,无须考虑邮件的底层实现细节,只要调用JavaMail 开发包中相应的API类就可以了。

我们可以先尝试发送一封简单的邮件,确保电脑可以连接网络。

  • 创建包含邮件服务器的网络连接信息的Session对象。
  • 创建代表邮件内容的Message对象
  • 创建Transport对象,连接服务器,发送Message,关闭连接

主要有四个核心类,我们在编写程序时,记住这四个核心类,就很容易编写出Java邮件处理程序。

在这里插入图片描述

纯文本邮件

先在项目中导入jar包
在这里插入图片描述

QQ邮箱中获取对应的权限

QQ邮箱需要安全验证,我们需要获取他对应的权限;

QQ邮箱–>邮箱设置–>账户

在这里插入图片描述
在这里插入图片描述

编写测试代码


import com.sun.mail.util.MailSSLSocketFactory;

猜你喜欢

转载自blog.csdn.net/weixin_45433031/article/details/115155017