邮件原理

Java邮件开发介绍

为什么要学习javamail开发?

现在很多WEB应用在开发时都需要集成邮件发送功能,例如:

给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail

给过生日的注册会员自动发送一封表示祝贺的E-Mail

将网站的最新活动信息通过E-Mail发送给所有的注册会员。等等

 

学习javamail主要包括两部分:生成邮件和发送接收邮件。

 

邮件开发涉到的一些基本概念

 

邮件服务器:

要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。例如现在Internet很多提供邮件服务的厂商:sinasohu163等等他们都有自己的邮件服务器。

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

电子邮箱:

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

SMTP协议

用户连上邮件服务器后,要想给它发送一封电子邮件,需要遵循一定的通迅规则,SMTP协议就是用于定义这种通讯规则的。

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

POP3协议

同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通迅格式,POP3协议用于定义这种通讯格式。

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

下图用于演示[email protected][email protected]帐户相互发送邮件的过程。

 

 

 

手工演示电子邮件的发送

第一:提前注册免费账号

       账号:[email protected] 

       密码:111111

       账号:rcpt to:[email protected]

       密码:redarmycsdn

 第二:获取smtp和pop3服务器的名称

       sina

          smtp.sina.com  smtp服务器

          pop.sina.com   pop3服务器

       sohu

          smtp.sohu.com   smtp服务器

          pop3.sohu.com   pop3服务器  

第三:编写base64编码程序对用户名和密码进行编码

public static void main(String[] args) throws IOException {

          BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

            System.out.println("提示输入用户名:");

           String username =  br.readLine();

           System.out.println("请输入用户密码:");

           String userpass = br.readLine();

           BASE64Encoder bc=new BASE64Encoder();

           System.out.println("加密的用户名:"+bc.encode(username.getBytes())+"   /n"+"加密的密码"+bc.encode(userpass.getBytes()));

   }

     sina :redarmycsdn   111111  :   cmVkYXJteWNzZG4=   MTExMTEx

     sohu :redarmycsdn   redarmycsdn:  cmVkYXJteWNzZG4=   cmVkYXJteWNzZG4=

    具体演示如下:

       首先 打开c命令提示

         telnet smtp.sina.com 25

进入后

ehlo 主机名

auth login

cmVkYXJteWNzZG4=

cmVkYXJteWNzZG4=

mail from:<[email protected]> 

rcpt to:<[email protected]>

Data 

from:[email protected]

to:[email protected]

subject: 主题

空行

正文

 .号代表邮件内容的结束

Quit结束

这样我们就用doc命令从[email protected][email protected]发了一封邮件

 

编写Socket程序发送电子邮件

from:<[email protected]>

to:< [email protected] >

代码如下:

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

       //创建socket对象

       Socket sk=new Socket("smtp.sohu.com",25);

       //创建输出流对象

       OutputStream os=sk.getOutputStream();

       //创建输入对象

       sk.getInputStream();

       BufferedReader br=new BufferedReader(new InputStreamReader(sk.getInputStream()));

        System.out.println(br.readLine());

      

       os.write("ehlo redarmychen/r/n".getBytes());

       System.out.println(br.readLine());

       System.out.println(br.readLine());

       System.out.println(br.readLine());

      

       os.write("auth login/r/n".getBytes());

       System.out.println(br.readLine());

      

       os.write("cmVkYXJteWNzZG4=/r/n".getBytes());

       System.out.println(br.readLine());

       os.write("cmVkYXJteWNzZG4=/r/n".getBytes());

       System.out.println(br.readLine());

      

       os.write("mail from:<[email protected]>/r/n".getBytes());

       System.out.println(br.readLine());

      

       os.write("rcpt to:< [email protected] >/r/n".getBytes());

       System.out.println(br.readLine());

      

       os.write("data/r/n".getBytes());

       System.out.println(br.readLine());

      

       os.write("from:<[email protected]>/r/n".getBytes());

       System.out.println(br.readLine());

      

       os.write("to:< [email protected] >/r/n".getBytes());

       System.out.println(br.readLine());

      

       os.write("subject:中奖了,快去看看吧>/r/n".getBytes());

       System.out.println(br.readLine());

      

       os.write("恭喜你获得一万元的大奖,请尽快登陆xxxxxxxxx领取/r/n".getBytes());

      

       os.write("./r/n".getBytes());

       System.out.println(br.readLine());

      

       os.write("quit/r/n".getBytes());

      

       br.close();

       os.close();

       sk.close();

 

   }

 

你可能感兴趣的:(String,socket,服务器,internet,javamail,邮件服务器)