JavaWeb-实现邮件发送

学习视频:B站 狂神说Java – https://www.bilibili.com/video/BV12J41137hu?p=1

学习资料笔记:csdn dream_Felix-- https://blog.csdn.net/yalu_123456/article/details/97272941?spm=1001.2014.3001.5501

1、邮件发送原理

在进行邮件发送的时候,我们需要专门邮件服务器。

例如: 张三给李四发送邮件, 张三的是 网易邮箱, 而李四的是QQ邮箱。

在张三给李四发送邮件的过程中, 先把张三发出的邮件存放到 网易的服务器里面; 然后通过后面的名称去区分,去找到QQ邮箱的服务器; QQ服务器再把这个邮件给了李四。

而在每个邮件的服务器中,大家都会遵守着传输协议 SMTP/POP3协议, 用于邮件的接收和传递。

  • 邮件服务器

    电子邮件的发送, 必须要有专门的邮件服务器。它们的功能是负责接收用户投递发送过来的邮件, 然后把邮件去投递交到接收邮件的电子邮箱中。

    SMTP服务器地址:每种邮箱的服务器地址是不一样的, 地址的形式一般都是: smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。

    当然,邮件收发的前提是要有E-mail,这些需要在邮件服务器进行申请。即 你得开通了邮箱啊。

  • 传输协议

    邮件的传输协议有两种,即SMTP协议和POP3协议

    POP3/SMTP:

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

    发送邮件:采用的是SMTP。

    接收邮件:采用POP3。

  • MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的

    文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

  • 邮件收发原理的详解

    大狂神(网易邮箱)发送邮件给小狂神(QQ邮箱):

    • 大狂神准备发送邮件。 那么就要遵循 SMTP协议 去连接到 SMTP服务器,然后把邮件的数据信息发送给网易的邮件服务器。 通过后面的名称找到网易的
    • 在网易服务器中,经过名称区分发现是QQ邮箱, 然后再通过 SMTP协议 再把邮件发给qq的 SMTP服务器
    • QQ将接收到的邮件存储在 xxxxx@qq.com这个邮件账号的空间中
    • 小狂神通过POP3协议连接到POP3服务器收取邮件
    • 从 xxxxx@qq.com这个邮件账号的空间中取出邮件
    • POP3服务器将取出来的邮件送到小狂神手中

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

2、Java发送邮件

概述

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

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

需要导入两个jar包:

  1. JavaMail API (compat)
  2. JavaBeans™ Activation Framework

JavaMail 是sun公司(现以被甲骨文收购)为方便Java开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发包,它支持一些常用的邮件协议,如前面所讲的SMTP,POP3,IMAP,还有MIME等。

我们在使用JavaMail API 编写邮件时,无须考虑邮件的底层实现细节,只要调用JavaMail 开发包中相应的API类就可以了。

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

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

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

2.1、发送普通邮件

例子:

简单的邮件发送:纯文本文件。

我们还应该对自己的邮箱设置中的账户 去进行 POP3/SMTP服务器开启:

qq邮箱验证码

Zlfqkymrzdoobabi

网易云的授权码:

ALDEGHIPYNNRZTJL

代码:

package com.AL;import com.sun.mail.util.MailSSLSocketFactory;import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Properties;// 发送一封简单的右键
public class MailDemo01 {public static void main(String[] args) throws GeneralSecurityException, MessagingException {// 定义session对象的环境信息Properties prop = new Properties();prop.setProperty("mail.host","smtp.qq.com"); //设置qq邮件服务器,prop.setProperty("mail.transport.protocol", "smtp"); //邮件发送协议。接收协议为pop3prop.setProperty("mail.stmp.auth", "true"); //需要验证用户名密码//关于qq邮箱,我们需要设置ssl加密,加上以下的代码就行。 其它的邮箱不需要。MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);prop.put("mail.smtp.ssl.enable", "true");prop.put("mail.smtp.ssl.socketFactory", sf);// 使用JavaMail发送邮件的5个步骤//1、创建定义整个应用程序所需要的环境信息的 Session对象// QQ才有的授权码,其它邮箱不用 ???Session session = Session.getDefaultInstance(prop, new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {//发件人邮件用户名,授权码//return new PasswordAuthentication("1356207897@qq.com", "zlfqkymrzdoobabi");return new PasswordAuthentication("lvxinylz@163.com", "ALDEGHIPYNNRZTJL");}});//2、通过session 去得到 transport对象Transport ts = session.getTransport();//可以开启Session的Debug模式,这样就能看到程序发送邮件的运行状态session.setDebug(true);//3、使用邮件的用户名和授权码 连接邮件服务器//ts.connect("smtp.qq.com","1356207897@qq.com","zlfqkymrzdoobabi");ts.connect("smtp.163.com","lvxinylz@163.com","ALDEGHIPYNNRZTJL");//4、创建邮件,一个Message对象// 写邮件。 注意需要传递SessionMimeMessage message = new MimeMessage(session);//指定邮件的发件人//message.setFrom(new InternetAddress("1356207897@qq.com"));message.setFrom(new InternetAddress("lvxinylz@163.com"));// 邮件的收件人。 此时发件人和收件人一样,即自己给自己发//message.setRecipient(Message.RecipientType.TO, new InternetAddress("1356207897@qq.com"));message.setRecipient(Message.RecipientType.TO, new InternetAddress("lvxinylz@163.com"));//邮件的标题message.setSubject("欢迎来到德莱联盟");//邮件的文本内容message.setContent("<h1 style='color: blue'> 你好啊,小伙子!<h1>", "text/html; charset=UTF-8");//5、发送邮件ts.sendMessage(message, message.getAllRecipients());//6。关闭连接ts.close();}
}

结果:

2.2、发送带图片和附件的邮件

在这种带有附件类型, 邮件扩展类型的时候,需要使用 MIME 协议。

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的

文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

MimeBodyPart类

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

MimeMultipart类

javax.mail.internet.MimeMultipart是抽象类 Multipart的实现子类,它用来组合多个MIME消息。一个MimeMultipart对象可以包含多个代表MIME消息的MimeBodyPart对象。

里面的附件、文本内容、图片等就是一个一个MIME消息,属于MimeBodyPart类

外面的最大的这个框,就是一个MimeMultipart类,用来将这些MIME消息组合起来,拼接在一起。

对于MIME消息,如果为纯文本,则将multipart类设置为 alternative;内嵌资源设为related;附件则设为mixed。 而我们把所有的都设置为mixed 也是没有问题的。

2.2.1、创建包含内嵌图片的邮件

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

实际上,只有设置邮件里面的信息改变了,其它的不变。如下:

将纯文本邮件里面的文本内容进行修改:

MimeMultipart mm = new MimeMultipart(); //我们把邮件的数据内容放置在 Mimemultipart对象中
mm.addBodyPart(text);
mm.addBodyPart(image);
mm.setSubType("related"); //对于图片和文本的关系来讲是  related

代码实现例子:

package com.AL;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 MailDemo02 {public static void main(String[] args) throws GeneralSecurityException, MessagingException {// 定义session对象的环境信息Properties prop = new Properties();prop.setProperty("mail.host","smtp.qq.com"); //设置qq邮件服务器,prop.setProperty("mail.transport.protocol", "smtp"); //邮件发送协议。接收协议为pop3prop.setProperty("mail.stmp.auth", "true"); //需要验证用户名密码//关于qq邮箱,我们需要设置ssl加密,加上以下的代码就行。 其它的邮箱不需要。MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);prop.put("mail.smtp.ssl.enable", "true");prop.put("mail.smtp.ssl.socketFactory", sf);// 使用JavaMail发送邮件的5个步骤//1、创建定义整个应用程序所需要的环境信息的 Session对象Session session = Session.getDefaultInstance(prop, new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {//发件人邮件用户名,授权码return new PasswordAuthentication("1356207897@qq.com", "zlfqkymrzdoobabi");}});//2、通过session 去得到 transport对象Transport ts = session.getTransport();//可以开启Session的Debug模式,这样就能看到程序发送邮件的运行状态session.setDebug(true);//3、使用邮件的用户名和授权码 连接邮件服务器ts.connect("smtp.qq.com","1356207897@qq.com","zlfqkymrzdoobabi");//4、创建邮件,一个Message对象// 写邮件。 注意需要传递SessionMimeMessage message = new MimeMessage(session);//指定邮件的发件人message.setFrom(new InternetAddress("1356207897@qq.com"));// 邮件的收件人。 此时发件人和收件人一样,即自己给自己发message.setRecipient(Message.RecipientType.TO, new InternetAddress("1356207897@qq.com"));//邮件的标题message.setSubject("欢迎查看匹诺曹的图片");// #################### 带有图片的邮件修改,其实就是改变了邮件的内容,使用 MimeBodyPart类/** //邮件的文本内容* message.setContent("<h1 style='color: blue'> 你好啊,小伙子!<h1>", "text/html; charset=UTF-8");*///准备图片数据MimeBodyPart image = new MimeBodyPart();// 图片需要经过数据处理: DataHandler:数据处理DataHandler dh = new DataHandler(new FileDataSource("src/image/girl.jpg"));image.setDataHandler(dh);  //在我们的Body中放入这个处理的图片数据image.setContentID("girl.jpg"); //给图片设置一个 ID,后面传送的时候使用//准备正文数据MimeBodyPart text = new MimeBodyPart();text.setContent("这是一封邮件正文带图片<img src='cid:girl.jpg'>的邮件", "text/html;charset=UTF-8");//描述数据关系MimeMultipart mm = new MimeMultipart();mm.addBodyPart(text);mm.addBodyPart(image);mm.setSubType("related");//设置到消息中,保存修改message.setContent(mm);  //把编辑好的邮件内容去放到 message对象中message.saveChanges();//5、发送邮件ts.sendMessage(message, message.getAllRecipients());//6。关闭连接ts.close();}
}

结果:成功收到邮件:

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

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

这里做了多个拼接工作。

  • 图片设置ID:setContentID;

  • 附件设置名字:setFileName。

  • 然后将图片和文本拼接在一起成为一个part;

  • 再将这个part和附件拼接在一起(关系为 mixed),最后形成一个总的MIME结构。

package com.AL;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 MailDemo03 {public static void main(String[] args) throws GeneralSecurityException, MessagingException {// 定义session对象的环境信息Properties prop = new Properties();prop.setProperty("mail.host","smtp.qq.com"); //设置qq邮件服务器,prop.setProperty("mail.transport.protocol", "smtp"); //邮件发送协议。接收协议为pop3prop.setProperty("mail.stmp.auth", "true"); //需要验证用户名密码//关于qq邮箱,我们需要设置ssl加密,加上以下的代码就行。 其它的邮箱不需要。MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);prop.put("mail.smtp.ssl.enable", "true");prop.put("mail.smtp.ssl.socketFactory", sf);// 使用 JavaMail发送邮件的5个步骤// 1. 创建定义整个应用程序所需要的环境信息的  Session对象Session session = Session.getDefaultInstance(prop, new Authenticator() {public PasswordAuthentication getPasswordAuthentication() {//发件人邮件用户名,授权码return new PasswordAuthentication("1356207897@qq.com", "zlfqkymrzdoobabi");}});// 2.通过 session 去得到 transport对象.   这个和 JDBC中创建数据库对象 statement对象 用于执行SQL一样。 transport对象去执行发送邮件Transport ts = session.getTransport();// 3.使用邮件的用户名和授权码 连接邮件服务器ts.connect("smtp.qq.com","1356207897@qq.com","zlfqkymrzdoobabi");//4、创建邮件,一个Message对象// 写邮件。 注意需要传递SessionMimeMessage message = new MimeMessage(session);//指定邮件的发件人message.setFrom(new InternetAddress("1356207897@qq.com"));// 邮件的收件人。 此时发件人和收件人一样,即自己给自己发message.setRecipient(Message.RecipientType.TO, new InternetAddress("1356207897@qq.com"));//邮件的标题message.setSubject("欢迎查看匹诺曹的图片");// #################### 带有图片的邮件修改,其实就是改变了邮件的内容,使用 MimeBodyPart类/** //邮件的文本内容* message.setContent("<h1 style='color: blue'> 你好啊,小伙子!<h1>", "text/html; charset=UTF-8");*/// 准备的图片的数据MimeBodyPart image = new MimeBodyPart();// 图片需要经过数据处理: DataHandler:数据处理DataHandler dh = new DataHandler(new FileDataSource("src/image/girl.jpg"));image.setDataHandler(dh);  //在我们的Body中放入这个处理的图片数据image.setContentID("girl.jpg"); //给图片设置一个 ID,后面传送的时候使用//准备正文数据MimeBodyPart text = new MimeBodyPart();text.setContent("这是一封邮件正文带图片<img src='cid:girl.jpg'>的邮件", "text/html;charset=UTF-8");//准备的附件的数据MimeBodyPart annex = new MimeBodyPart();annex.setDataHandler(new DataHandler(new FileDataSource("src/resources/db.properties")));annex.setFileName("db.properties"); //附件设置名字// 描述数据关系MimeMultipart mm = new MimeMultipart();// 拼接邮件的正文内容:mm.addBodyPart(text);mm.addBodyPart(image);mm.setSubType("related"); //将图片和邮件内嵌成功// 将拼接好的正文内容设置为主体MimeBodyPart contentText =  new MimeBodyPart();contentText.setContent(mm);// 拼接附件MimeMultipart allFile =new MimeMultipart();allFile.addBodyPart(annex); //附件allFile.addBodyPart(contentText); //正文allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed;//设置到消息中,保存修改message.setContent(allFile);  //把编辑好的邮件内容去放到 message对象中message.saveChanges();//5、发送邮件ts.sendMessage(message, message.getAllRecipients());//6。关闭连接ts.close();}
}

结果:成功的将图片和附件的复杂邮件进行发送。

2.3、总结

JDBC程序:

  1. 数据库配置信息,加载驱动
  2. 连接数据库,
  3. 创建能够代表数据库去执行SQL的对象 Statement:CRUD
  4. 编写 SQL语句
  5. 执行SQL
  6. 关闭连接。

我们使用 java发送邮件的步骤: 其实和 JDBC的步骤十分类似。

  • 设置邮件服务器的网络连接信息。如设置为QQ邮件服务器、接受发协议等环境信息
  1. 创建邮件服务器的网络连接信息 等 环境信息的 Session对象
  2. 创建代表邮件内容的 Message对象
  3. 创建 Transport对象,连接邮件服务器,让其去执行发送邮件的Message。 Transport ts = session.getTransport();
  4. 关闭连接。

创建了Session(里面包含了邮件的发送和接收协议),并利用Session去创建 Transport对象,能够代表Session去进行连接到服务器,然后把 Message对象(即具体的邮件内容数据) 去发送到邮件服务器中。

Store对象会用于从邮件服务器去接收邮件,去创建Message表示具体的邮件内容;创建的Seesion对象,定义了邮件收发协议、端口号等环境信息。

3、JavaWeb发送邮件

现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息。

今天我们也来实现一个这样的功能:

用户注册成功之后,就将用户的注册信息以Email的形式发送到用户的注册邮箱当中,实现发送邮件功能就得借助于==JavaMail==了。

总体思路

  • 我们创建前端进行注册的页面。当进行 submit动作时,进行请求路径 /RegisterServlet.do
  • 创建Servlet类,并在web.xml配置文件中进行注册和映射。
  • 在Servlet类中,获取前端的参数信息,将参数信息封装到 pojo实体类 User 中,去调用 Sendmail工具类进行邮件发送。 采用多线程去进行异步处理, 对用户进行响应,请求转发完成页面跳转。 req.getRequestDispatcher(“info.jsp”).forward(req,resp);
  • pojo实体类User 保存用户信息
  • utils工具类,用于邮件发送。

具体步骤:

  1. 前端注册页面:表单

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html><head><title>$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>
    
  2. 编写对应的用户实体类: 无参,有参,toString,get set创建公共属性。

    package com.AL.pojo;public class User {private String username;private String password;private String email;public User() {}public User(String username, String password, String email) {this.username = username;this.password = password;this.email = email;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +", password='" + password + '\'' +", email='" + email + '\'' +'}';}
    }
    
  3. 邮件发送工具类:网站3秒原则,多线程实现用户体验

    我们使用多线程去实现用户体验,进行异步处理。

    package com.AL.utils;import com.AL.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;// 网站3秒原则: 用户体验
    // 多线程实现用户体验: (异步处理)
    public class Sendmail extends Thread {// 用于给用户发送邮件的邮箱private String from = "1356207897@qq.com";//邮箱的用户名private String username = "1356207897@qq.com";//邮箱的密码private String password = "zlfqkymrzdoobabi";//发送邮件的服务器地址private String host = "smtp.qq.com";private User user;public Sendmail(User user) {this.user = user;}//重写run方法的实现,在run方法中发送邮件给指定的用户@Overridepublic void run() {try {Properties prop = new Properties();prop.setProperty("mail.host", host);prop.setProperty("mail.transport.protocol", "smtp");prop.setProperty("mail.smtp.auth", "true");// 关于QQ邮箱,还要设置SSL加密,加上以下代码即可MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);prop.put("mail.smtp.ssl.enable", "true");prop.put("mail.smtp.ssl.socketFactory", sf);//1、创建定义整个应用程序所需的环境信息的 Session 对象Session session = Session.getDefaultInstance(prop, new Authenticator() {public javax.mail.PasswordAuthentication getPasswordAuthentication() {//发件人邮件用户名,授权码return new PasswordAuthentication("1356207897@qq.com", "zlfqkymrzdoobabi");}});//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态session.setDebug(true);//2、通过session得到transport对象Transport ts = session.getTransport();//3、使用邮箱的用户名和授权码连上邮件服务器ts.connect(host, username, password);//4、创建邮件MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress(from)); //发件人message.setRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail())); //收件人message.setSubject("用户注册邮件"); //邮件的标题String info = "恭喜您注册成功,您的用户名:" + user.getUsername() + ",您的密码:" + user.getPassword() + ",请妥善保管,如有问题请联系网站客服!!";message.setContent(info, "text/html;charset=UTF-8");message.saveChanges();//发送邮件ts.sendMessage(message, message.getAllRecipients());ts.close();} catch (Exception e) {throw new RuntimeException(e);}}
    }
    
  4. servlet处理类:

    package com.AL.servlet;import com.AL.pojo.User;
    import com.AL.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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {try {// 接收用户请求,封装成对象String username = req.getParameter("username");String password = req.getParameter("password");String email = req.getParameter("email");User user = new User(username, password, email);// 用户注册成功之后,给用户去发送一封邮件// 我们使用线程来专门发送邮件, 防止出现耗时和网站注册人数过多的情况Sendmail send = new Sendmail(user);send.start();// 注册用户req.setAttribute("message", "注册成功,我们已经发了一封带了注册信息的电子邮件,请查收!如网络不稳定,可能过会儿才能收到!!");req.getRequestDispatcher("info.jsp").forward(req,resp);} catch (Exception e) {e.printStackTrace();req.setAttribute("message", "注册失败!!");req.getRequestDispatcher("info.jsp").forward(req,resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doPost(req, resp);}
    }
    
  5. web.xml配置文件:

        <servlet><servlet-name>register</servlet-name><servlet-class>com.AL.servlet.RegisterServlet</servlet-class></servlet><servlet-mapping><servlet-name>register</servlet-name><url-pattern>/RegisterServlet.do</url-pattern></servlet-mapping>
    
  6. pom.xml配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>AL</groupId><artifactId>WebMail</artifactId><version>1.0-SNAPSHOT</version><dependencies><!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency><!-- https://mvnrepository.com/artifact/javax.servlet/jsp-api --><dependency><groupId>javax.servlet</groupId><artifactId>jsp-api</artifactId><version>2.0</version></dependency><!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version></dependency></dependencies><!--在build中配置resource,为了防止资源导出时的失败--><build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build></project>
    

    7.启动Tomcat,进行测试: 注册信息,显示注册成功页面后,等一会才收到注册的信息。

    注意:在进行测试的时候,发现出现错误:java.lang.NoClassDefFoundError: javax/mail/Authenticator

这是因为缺少activation.jar包和mail.jar包。但是我们已经将这两个包导入了IDEA中lib 库作为 jar包。 这是因为我们需要把这两个包放在TOMCAT_HOME/lib目录下,TOMCAT_HOME是tomcat的安装目录,然后重启tomcat即可

activation.jar下载地址:

https://mvnrepository.com/artifact/javax.activation/activation

mail.jar包下载地址:

https://mvnrepository.com/artifact/javax.mail/mail

JavaWeb(三):java和javaWeb实现邮件发送相关推荐

  1. 使用JAVA工具类进行邮件发送

    使用JAVA工具类进行邮件发送 使用JAVA工具类进行邮件发送 文章目录 使用JAVA工具类进行邮件发送 前言 一.前期准备工作 二.使用步骤 1.引入依赖 2.进行发送邮件 前言 提示:我们在开发过 ...

  2. Java 基于javaMail的邮件发送(支持附件)

    基于JavaMail的Java邮件发送 Author xiuhong.chen@hand-china.com Desc 简单邮件发送 Date 2017/12/8 项目中需要根据物料资质的状况实时给用 ...

  3. 基于Java的SMTP协议邮件发送模拟系统

    目录 1. 原理分析 2. 前端页面 3. 数据库设计 4. 后端数据处理 5. 参考文献 6. 注意事项 1. 原理分析 SMTP协议 SMTP(Simple Mail Transfer Proto ...

  4. java邮件支持_使用Spring的JAVA Mail支持简化邮件发送功能

    闲来无事,翻看<Spring in Action>,发现Spring集成了对JAVA Mail的支持,有点小激动的看了一遍,嗯,话说真的简单了很多. Spring的邮件发送的核心是Mail ...

  5. java EE 5配置邮件发送 qq企业邮箱

    为什么80%的码农都做不了架构师?>>>    java EE 5配置QQ企业邮件发送 1.在项目的WebRoot/META-INF/新建context.xml 具体内容如下: &l ...

  6. android javamail获取邮件太多太慢_「Java」 - SpringBoot amp; 邮件发送

    发送邮件是web应用系统的必备功能之一,用于用户注册验证.忘记密码找回或者发送营销信息.最早期使用JavaMail相关API写发送邮件的相关代码,后来Spring推出了JavaMailSender简化 ...

  7. java之jmail实现邮件发送

    闲着没事写个用jmail发送邮件的功能 1.所需jar包 <!-- https://mvnrepository.com/artifact/javax.mail/mail --> <d ...

  8. java进行qq邮箱邮件发送

    1.首先你得开启你的qq的邮箱权限 在qq邮箱中的设置中设置IMAP/SMTP import java.util.Properties;import javax.mail.Authenticator; ...

  9. java 邮件客户端 smtp_java网络编程三:基于SMTP的邮件发送客户端

    1.SMTP简介 2.发送过程 3.源代码示例 package demo.net; import java.awt.BorderLayout; import java.awt.GridLayout; ...

  10. 邮件发送 --- 纯Java、JavaWeb、Spring三种实现方式

    邮件发送学习笔记~ 一.邮件发送介绍 要在网络上实现邮件功能,必须要有专门的邮件服务器! 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中! ...

最新文章

  1. python第二十九课——文件读写(复制文件)
  2. 单片机有啥用?现在用的还多吗?
  3. RvaToFileOffset 内存偏移转成文件偏移(滴水课后作业)
  4. Sublime Text如何安装和卸载插件
  5. Pointcut is not well-formed: expecting #39;name pattern#39; at character position 36
  6. 腾讯封杀linux/mac QQ
  7. 手游接入Facebook的那些坑
  8. Unity3D(一) 操作界面及游戏常识
  9. 问题:虚拟环境名字相同遇到bug,please specify a different sdk name?
  10. Android轮播图代码
  11. 量产台电U盘 把USB变成USB-CDROM
  12. 已知六个固定点P0(3+2+1),过固定点向量v1,动点到固定点距离L,被测基准块坐标系在并联机构动系中的位姿,并联机构定系在测量系中的位姿,求解动系在测量系中位姿Q的程序
  13. 嵌入式ARM之基于S5P6818平台移植Qt5.5、FFTW、QWT--图文教程
  14. html网页有内容不能向下拉,为什么百度页面不能往下拉
  15. python开方 运算符_[转载] Python中的算数运算符
  16. X-Ways Forensics: 综合取证分析工具
  17. 短视频三要素之封面,如何设计引人关注的封面呢?
  18. 科学设置百度网盟到访定向,提升竞价转化率!
  19. php如何让图片铺满屏幕,如何解决js获取屏幕大小并且让图片自适应的方法
  20. 理解Linux的.a、.so和.o文件

热门文章

  1. linux的epel源配置
  2. 微信小程序突出显示多边形区域的地图
  3. 关于VMware NAT Services服务自动关闭的非完美结局方案
  4. CSS+HTML实现梅兰商贸网页设计
  5. npm install没有生成node_modules文件夹
  6. 针对微店晓峰音乐公社自动化下单尝试
  7. 各大渠道 2020 年春节放假安排,赶紧收藏!
  8. 2022年一级造价工程师教材是否有变化?怎么备考比较好?
  9. WIN7虚拟机的新增硬盘步骤
  10. Word2007自动生成目录【六部图文经验】