邮件的发送

发表时间:2017-05-15 17:16:05 浏览量( 15 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、邮件简介

邮件实现并不是一个必须要完成的功能,这里就简单介绍一下。不过由于现在的邮件服务器安全性已经升级了,所以有些服务器不一定能正常运行了。

和操作数据库一样,其实我们并不是要开发一个邮件服务器,java实现的只是一个客户端,我们要做的事情是连接到邮件服务器,让邮件服务器发送或者接受邮件,所以实现起来是非常简单的。优先我们先连接一下连接邮件服务器的两个最基本的协议。

当前常用的电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143建立连接。下面分别对其进行简单介绍。

1、SMTP协议。

SMTP的全称是“Simple Mail Transfer Protocol”,翻译一下就是简单邮件传输协议。SMTP就是邮件发送的标准协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。邮件服务一般支持SMTP协议,所以我们可以使用SMTP协议连接诶邮件服务器就可以发送邮件了。

2、POP协议。

接受邮件我们使用POP协议,虽然我们今天不会使用这个协议,但是事实我们也是可以这样做的,POP邮局协议负责从邮件服务器中检索电子邮件。它要求邮件服务器完成下面几种任务之一:删除邮件,检索邮件,或者仅仅只是询问是否有新邮件。POP协议还支持多用户互联网邮件扩展,允许用户在电子邮件上附带二进制文件,在用户阅读邮件时,POP命令所有的邮件信息立即下载到用户的计算机上,不在服务器上保留。

这里我们需要的发送邮件所以使用的是SMTP协议,默认的端口是25。

这里我们可以使用互联网上面的很多邮件服务器,只需要你注册一个帐号就可以了,这里我们使用QQ的邮件服务器,相信你一定会有QQ吧,那么我们又怎么知道自己的邮件服务器的访问地址呢?其实只需要你登录一下QQ邮件就可以查看了。安装下图的表示就可以看到了。

1、点击上面的设置连接

attcontent/b424d428-ee83-4128-b8ca-5373e661094c.png

2、点击账号,然后往下拉

attcontent/b34fcefc-4c0b-4a55-ab41-18e2c73bf5e1.png

3、看到下面这个信息。这个勾一定要勾上,这样客户端才能连接邮件服务器,然后点击隔壁的超链接,可以看到更多邮件服务器的信息。

attcontent/3719c41e-302a-4b3a-9b0c-80aa8fe72408.png

4、点击了如何使用Foxmail等软件收发邮件后,就可以看到一份关于Foxmail配置说明,建议你好好看看这个说明,从这个说明我们可以得到很多信息的。

attcontent/0892e39c-32ab-4ed7-ae53-a42ffb71cdf2.png

比如上面这个说明,我们可以知道qq邮箱的发送服务器的地址:smtp.qq.com,使用ssl加密,端口是:465。

二、使用java发送邮件

这里我们先不直接在项目中发送邮件,而是先新建一个mail项目,测试一下邮件发送的功能,然后在修改我们的系统。

1、导包。

我们需要两个包:mail.jar和activation.jar,先把这两个包导入进来。

attcontent/9b0187bc-d269-4f31-9f80-3798b0b215a7.png

2、新建一个servlet。

在这个servlet中实现连接邮件服务器,并发送一份邮件给另外一个邮箱。

(1)和连接数据库一样,首先需要说明连接信息,这里所有的连接信息需要封装成为一个Properties对象,由于需要ssl加密所有连接的配置稍微复杂一点。

   // 发送邮件//final String userName = "598610582@qq.com";//这里需要修改成为你的qq邮箱final String password = "123456";//密码String host = "smtp.qq.com";// 服务器String port = "465";Properties props = new Properties();props.setProperty("mail.smtp.host", host);props.setProperty("mail.smtp.port", port);props.setProperty("mail.smtp.auth", "true");// 是否要验证,true// props.setProperty("mail.smtp.socketFactory.fallback", "false");props.put("mail.smtp.debug", "true");props.put("mail.smtp.socketFactory.port", port);props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");

(2)根据上面的配置信息生成一个连接会话Session

   // 登陆邮件服务器,与服务器的一次回话Session session = Session.getDefaultInstance(props,    new Authenticator() {    @Override    protected PasswordAuthentication getPasswordAuthentication() {    return new PasswordAuthentication(userName, password);    }                            });

(3)通过session建立一个简单的邮件对象

   try {    Message message = new MimeMessage(session);    message.setSubject("邮件标题");    message.setText("邮件内容aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");    // 邮件的发送者    Address fromaddress = new InternetAddress(userName);    message.setFrom(fromaddress);    // 邮件的接收者    Address toaddress = new InternetAddress("1905678733@qq.com");    message.setRecipient(Message.RecipientType.TO, toaddress);    // 发送    // Transport.send(message);    Transport transport;    transport = session.getTransport("smtp");    transport.connect(host, userName, password);    transport.sendMessage(message, message.getAllRecipients());    transport.close();} catch (MessagingException e) {    e.printStackTrace();}

3、在主页上面建立一个超连接,指向这个servlet。

     <body>
    <a href="mainServlet">发送邮件</a>
 </body>

4、测试,点击这个连接就会发送一个邮箱了。

完成代码下载:

mail.rar

三、修改系统的代码,完成邮件发送。

你可以简单的封装一下,这里就留给大家自己去实现。这里就不列出代码了,代价可以下载源码,在处理订单的时候,如果是发送商品就同时给用户发送一个邮件,这里事实可能会影响用户的体验,建立你可以修改成为通过一个线程异步的进行发送。

shop.rar

好这样我们的项目就大概完成了。

有关邮件发送很有很多知识点,比如:发送只是html等多媒体网站,如何在嵌入附件等等,这方面的内容我们以后在讲解spring时候再介绍了,因为spring对邮件发送有更好的封装。