javaEE之----------java代码发送邮件

E-Mail邮件简介:

利用java代码发邮件可以实现用户注册的严格性,用户不会随意的进行注册了,邮箱注册才可以注册成功,还有可以向用户推销自己的产品通过发邮件,当然也可以找回密码等

邮件服务器,按照提供的服务类型,可以分为发送邮件的服务器我接收邮件的服务器。
发送邮件的服务器使用发送协议,现在常用的是SMTP协议。

所以,通常发邮件的服务器也称为SMTP服务器。
接收邮件的服务器使用接收协议,现在常用的是POP3协议或IMAP协议,

所以通常也被称为POP3或IMAP服务器。
目前经常见到的服务器为SMTP和POP3服务器。如大家在注册了126的邮箱之后,

它的发邮件服务器为smtp.126.com:25,而收邮件服务器则为pop3.126.com:110.(冒号后面的为端口号)。
当然,发邮件服务器和收邮件服务器也可能是同一台主机,但端口号一定不相同。

默认发邮件服务器的端口为25,收邮件的端口为110.

\

 

SMTP协议-发邮件协议
全称为Simple Mail Transfer Protocol(简单邮件传输协议),它定义了邮件客户端软件与SMTP服务器之间

、以及两台SMTP服务器之间的通讯规则。端口一般为25.
POP3协议-收邮件协议
全称为Post Office Protocol(邮局协议),它定义了邮件客户端软件与POP3服务器的通讯规则

。端口一般为110.
IMAP协议-对POP3的扩展
全称为Internet Message Access Protocal(Internet消息访问协议),它是对POP3协议的一种扩展,

定义了邮件客户端软件与IMAP服务器的通讯规则。

手动发邮件:(必须打开smtp协议,必须要有相应的账户在服务器中)

 

?
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
手动发:
 
<span style= "font-size:18px;" >cmd 界面
 
telnet 必须手动启动 程序---》打开windows功能---》选中telnet
     还有一个服务打开。。。。。手动启动  应用,启动
SMTP 简单的邮件传输协议 发送的
p0p3 接受邮件的
     采用base64加密,账号和密码都是加密的。
     BASE64Encoder encoder = new BASE64Encoder();
     name =encoder.encode(name.getbytes());
     这就是加密后后的name 了
 
telent smtp.sina.com 25   采用谁的服务器
ehlo hncu       打招呼
auth login    权威登录
name
pwd     用户名和密码base64jiaguomi de
mail from:<hncujava @sina .com>   给服务器看的,必须正确
rcpt to:<hncujava @126 .com>    发到哪里去
data
from:
to:<dsadsad @126 .com>
subject:sadkjsakl    邮件的主题
【空行】
邮件正文
 
 
 
.   英文的句号结束
quit   退出   </dsadsad @126 .com></adjkhdjkshjd @sina .com></hncujava @126 .com></hncujava @sina .com></span>

 

PS:在用户手动或者采用java 代码发送邮件的时候,用户名和密码都是经过加密的BASE64加密的

 

?
1
2
3
4
5
6
7
8
9
10
@Test
     public void base64Use() throws Exception{
         String name = "hncujava" ;
         String pwd = "1234567" ;
         BASE64Encoder encoder = new BASE64Encoder();
         name = encoder.encode(name.getBytes());
         pwd = encoder.encode(pwd.getBytes());
         System.out.println(name);
         System.out.println(pwd);
     }

现在采用java代码实现

一般格式

我们采用Java代码发邮件需要导入外面的两个javaMail包

用到的主要类:Properties(负责设置通道),Session(负责建立连接),

MimeMessage(负责邮件信息),Transport(发送邮件)

 

?
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
     <span style= "font-size:18px;" > @Test
     public void  Test1(){
         
//第一步,首先是设置配置文件属性
         Properties p = new Properties(); //首先要有一个属性对象
             //指定主机
         p.setProperty( "mail.host" , "smtp.sina.com" );
             //采用smtp协议
//      p.setProperty("mail.transport.protocol", "smtp");//添加这个之后腾讯的里面垃圾箱
             //是否采用用户名和密码登录
         p.setProperty( "mail.smtp.auth" , "true" );
         //相关协议配置完成之后,开始发送邮件
         
         //java发邮件的步骤
  //第一步:     session填写用户名和密码
         Session session =Session.getDefaultInstance(p, new Authenticator() {
             @Override
             protected PasswordAuthentication getPasswordAuthentication() {
                 PasswordAuthentication pass= new PasswordAuthentication
                         ( "hncujava" , "1234567" );
                 //第一个账户名,第二个密码
                 return pass;
             }
         });
         session.setDebug( true ); //以调试的方式运行
         
   //第二步: 邮件正文  MimeMessage
         MimeMessage message = new MimeMessage(session);
         try {
             //邮件发件人
             message.setFrom( new InternetAddress( "hncujava@sina.com" ));
             //邮件接收人
             message.setRecipient(RecipientType.TO, new InternetAddress( "985256523@qq.com" ));
//          message.setRecipient(RecipientType.TO,new InternetAddress("2159305766@qq.com"));
                 //邮件主题
             message.setSubject( "hello" );
             message.setContent( "采用java发的邮件。。还不粗哦" , "text/html;charset=utf-8" );
             
//  发出邮件
             Transport.send(message);
         } catch (MessagingException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
         
     }
     </span>

 

带附件

 

上面的不能实现带附件,我们采用另外的类 MimeBodyPart和MimeMultipart

 

?
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
     <span style= "font-size:18px;" > public void test3() throws AddressException, Exception{
         
         for ( int i= 0 ;i< 100 ;i++){
         Properties p = new Properties();
         p.setProperty( "mail.host" , "smtp.sina.com" );
         p.setProperty( "mail.smtp.auth" , "true" );
         
         //创建session进行登录
         Session sess=Session.getDefaultInstance(p, new Authenticator() {
 
             @Override
             protected PasswordAuthentication getPasswordAuthentication() {
                 PasswordAuthentication ps = new PasswordAuthentication( "hncujava" , "1234567" );
                 return ps;
             }
         });
         sess.setDebug( true );
         //成功登录之后,开始写邮件了
             ///设置发送方,就接收方,邮件主题,邮件内容
         MimeMessage message = new MimeMessage(sess);
         message.setFrom( new InternetAddress( "hncujava@sina.com" ));
         message.setRecipient(RecipientType.TO, new InternetAddress( "1196457248@qq.com" ));
         message.setSubject( "我是乔爷,ko一切" );
         
         MimeBodyPart body1= new MimeBodyPart();
         body1.setContent( "<font color=" 'green' " size=" '40' ">乔爷</font><font color=" 'red' " size=" '20' ">ko</font>......." , "text/html;charset=utf-8" );
         
         //附件一
         MimeBodyPart body2= new MimeBodyPart();
         body2.setDataHandler( new DataHandler( new FileDataSource( "./img/1.jpg" )));
         body2.setFileName( "1.jpg" );
         
         MimeBodyPart body3 = new MimeBodyPart();
         body3.setDataHandler( new DataHandler( new FileDataSource( "./img/2.jpg" )));
//      body3.setFileName("图片2.jpg");//中文服务器自己取名
         body3.setFileName(MimeUtility.encodeText( "傻逼乔2.jpg" )); //中文需要编码。。。 需要编码,邮件显示的时候需要
         
         //上面都是简单的信息,没有汇总
         MimeMultipart mm = new MimeMultipart();
         mm.addBodyPart(body1);
         mm.addBodyPart(body2);
         mm.addBodyPart(body3);
         
         message.setContent(mm);
         Transport.send(message);
     }}</span>

另外:采用javaMail做了一个简单的邮件验证登录,主要的知识点是 当用户注册时候,我们数据库插入数据,里面的数据有两个列 ,一个是active(是否激活)全部设置为0,另一个是acode(给用户发邮件的时候传过去,当用户通过这个链接(带acode))访问我们写的另一个serlvet的时候,再次访问数据库,将active设置为1。

当用户登录的时候,我们需要采用去数据库验证最主要的是active必须为1,采用进行验证通过。

简单的注册和登录模块,带验证码。。能实现基本的注册和登录。有兴趣的可以去我的下载资源里下载去看看。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值