java基础实现邮件发送(以qq和网易为例)

 java基础实现邮件发送(以qq和网易为例)

当你浏览一些网站的时候,更多的时候都是需要我们登陆、注册的;而注册激活账号一般有两种形式,一是电话验证码激活,二是邮箱激活;第一种是人名币玩家的,而第二种是社区版的。今天我们就从零分享一个如何用java来实现邮件的发送。

1、先说一下邮件发送都有哪些用处:

    1、 用户注册,激活账号

    2、 比如qq的生日祝福

    3、 一些网站的最新活动或福利也会以邮件的形式告知客户

       2、来说一下javaMail:

              javaMail,是提供开发者处理电子邮件相关的编程接口。 JavaMail是Sun公司发布用来处理email的API, 它可以很方便地执行一些常用的邮件传送。简单来说,就是通过java来发送邮件。

       3、再介绍一下电子邮箱:

              电子邮箱(E-mail地址)需要在邮件服务器上进行申请, 通俗地说,电子邮箱其实就是用户在邮件服务器上申请的一个账户。 用户在邮件服务器上申请一个账号后,邮件服务器就会为这个账号分配一定的内存空间,用户从而可以使用这个账号以及空间,发送电子邮件和保存别人发过来的电子邮件。

       4、再实战之前我们还是有必要了解一下邮件发送(SMTP)和邮件接收(POP3)的协议:

              SMTP(Simple Mail

Transfer Protocol)即简单邮件传输协议, 它是一组用于由源地址到目的地址传送邮件的规则,由它来控制邮件的中转方式。 SMTP协议属于TCP/IP协议簇,它帮组每台计算机在发送或中转信件时找到下一个目的地。 SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

              POP3(Post Office Protocol -Version3)本协议主要用于主持客户端远程管理在服务器上的电子邮件。

邮件的发送接收过程

java基础实现邮件发送(以qq和网易为例)_第1张图片
邮件的发送接收过程 

5、实战编写 

              准备工作:

在实战编写之前我们需要做一些准备工作,比如开通SMTP协议(先以网易为例)


java基础实现邮件发送(以qq和网易为例)_第2张图片
java基础实现邮件发送(以qq和网易为例)_第3张图片

把我画框的打上勾一步步操作就是把网易的SMTP协议开通了,现在就可以用代码来发送邮件了。

由于java没有实现javaMail,只是给了相关接口,所以呢我们需要下载一些jar包,给大家推荐一个网站把http://mavenrepository.com/,这里面有你需要的所有javajar包,如果你开发maven项目的话,那这个网站对你来说也是很有帮助的。好了,我们来搜索把jar下载下来


java基础实现邮件发送(以qq和网易为例)_第4张图片

选择第二个即可


java基础实现邮件发送(以qq和网易为例)_第5张图片

把jar下下来我们的准备工作就完成了。


代码编写:

1、在你用的ide集合开发工具里,生成一个java project,然后再建三个包;util包放一些我们写的工具类,lib包放一些用到的jar包文件,test包放我们的测试文件。


java基础实现邮件发送(以qq和网易为例)_第6张图片

2、我们再util包下建一个类,就起名为SendEmailByWY,这个名字随意啦下面是代码

'''

package util;



import java.util.Properties;


import javax.mail.Authenticator;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.Message.RecipientType;

import javax.mail.internet.AddressException;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;


/**

 * send email bywangyi

 *@authoradmin

 *

 */

public class SendEmailByWY {


       /**

        *send email method

        *@param to who you want to send

        *@param content email content

        *@throws MessagingException

        *@throws AddressException

        */

       public static void sendEmail(String to ,

String content) throws AddressException, MessagingException {

              /*

               * 1、创建连接对象

               *           设置邮件发送的协议

               *           设置发送邮件的服务器

               *           填写自己的密钥

               *

               * 2、创建邮件对象

               *         设置发件人

               *         设置收件人

               *         设置抄送者

               *         设置邮件主题

               *         设置邮件内容

               *        

               * 3、发送邮件

               */

//            1、创建连接对象

              Propertiesprops = new Properties();

              //1.1设置邮件发送的协议

              props.put("mail.transport.protocol" , "smtp");

              //1.2设置发送邮件的服务器

              props.put("mail.smtp.host" , "smtp.163.com");

              //1.3需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)

              props.put("mail.smtp.auth" , "true");

              //1.4下面一串是发送邮件用465端口,如果不写就是以25端口发送,阿里云已经关闭了25端口

              props.setProperty("mail.smtp.socketFactory.class" , "javax.net.ssl.SSLSocketFactory");

              props.setProperty("mail.smtp.socketFactory.fallback" , "false"); 

        props.setProperty("mail.smtp.port" , "465"); 

        props.setProperty("mail.smtp.socketFactory.port" , "465");

        //1.5认证信息

        Sessionsession=Session.getInstance(props , new Authenticator() {

                     protected PasswordAuthentication

getPasswordAuthentication(){

                            return new PasswordAuthentication("自己@163.com" , "密钥");

                     }

              });


//        2、创建邮件对象

        Messagemessage = new MimeMessage( session );

        //2.1设置发件人

        message.setFrom( new InternetAddress("自己@163.com") );

        //2.2设置收件人

        message.setRecipient(RecipientType.TO , new InternetAddress( to));

        //2.3设置抄送者(PS:没有这一条网易会认为这是一条垃圾短信,而发不出去)

        message.setRecipient(RecipientType.CC , new InternetAddress("自己@163.com"));

        //2.4设置邮件的主题

        message.setSubject("主题");

        //2.5设置邮件的内容

        message.setContent("

"+content+"

", "text/html;charset=utf-8");


//        3、发送邮件

        Transport.send(message);

       }

}

'''

3、我们编写一个测试类,看看我们的工具类能不能用

'''

package test;


import javax.mail.MessagingException;

import javax.mail.internet.AddressException;


import util.SendEmailByWY;


public class TestWY {

       public static void main(String[] args) throws AddressException, MessagingException {

              SendEmailByWY.sendEmail("[email protected]", "test");

       }

}    

'''


java基础实现邮件发送(以qq和网易为例)_第7张图片

我们已经发送成功了

那我们再演示一下qq的;

       准备工作,开通qq的SMTP协议


java基础实现邮件发送(以qq和网易为例)_第8张图片

代码编写

       一样的再util包下建立一个类,SendEmailByQQ,这个名字还是随意啦,下面是代码

'''

package util;


import java.util.Properties;


import javax.mail.Authenticator;

import javax.mail.Message;

import javax.mail.PasswordAuthentication;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.Message.RecipientType;

import javax.mail.MessagingException;

import javax.mail.internet.AddressException;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;


/**

 * send email byqq

 *@authoradmin

 *

 */

public class SendEmailByQQ {



       public static void sendEmail(String to ,

String content ) throws AddressException, MessagingException {

              /*

               * 1、创建连接对象

               * 2、创建邮件对象

               * 3、发送邮件

               */

//            1、创建连接对象

              Propertiesprops = new Properties();

              props.put("mail.transport.protocol" , "smtp");

              props.put("mail.smtp.host", "smtp.qq.com");

              props.put("mail.smtp.auth", "true");

              props.put("mail.smtp.port", 465);

              props.put("mail.smtp.ssl.enable", "true");

              Sessionsession=Session.getInstance(props, new Authenticator() {

                     protected PasswordAuthentication

getPasswordAuthentication(){//认证信息

                            return new PasswordAuthentication("[email protected]", "xxxx");

                     }

              });


//            2、创建邮件对象

              Messagemessage = new MimeMessage(session);

              message.setFrom(new InternetAddress("[email protected]"));

              message.setRecipient(RecipientType.TO, new InternetAddress(to));

              message.setRecipient(RecipientType.CC, new InternetAddress("[email protected]"));

              message.setSubject("主题");

              message.setContent("

"+content+"

","text/html;charset=utf-8");


//            3、发送邮件

              Transport.send(message);

       }

}

'''


我们也编写一个测试类

'''

package test;


import javax.mail.MessagingException;

import javax.mail.internet.AddressException;


import util.SendEmailByQQ;

importutil.SendEmailByWY;


public class TestWY {

       public static void main(String[] args) throws AddressException, MessagingException {

//            SendEmailByWY.sendEmail("[email protected]","test send Email");

              SendEmailByQQ.sendEmail("[email protected]", "success");

       }

'''


java基础实现邮件发送(以qq和网易为例)_第9张图片

你可能感兴趣的:(java基础实现邮件发送(以qq和网易为例))