《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 在Linux下利用JavaMail收发邮件

在Linux下利用JavaMail收发邮件

2009-01-06
作者:吴旭

1 引言 

   电子邮件是Internet上最早使用的工具之一。随着网络的不断普及,它已成为我们学习和工作中必不可少的通信工具。与此同时,linux的普及程度不断提高,人们逐渐认识到了它的优越性,强大的,可靠的,可扩展的,灵活的,可配置的,多用户的,多任务的并且免费的操作系统。在linux上的各种应用开发也变得日益重要。电子邮件便是其中重要的一个方面。借助JavaMail可以很方便地实现在linux上收发邮件。 

Java语言的网络能力早已被人们所熟知,再加上JavaMail更是如虎添翼。JavaMail是基于Java的标准化的电子邮件应用编程接口。它提供了一系列抽象的概念,一个管理电子邮件的通用框架。JavaMail提供访问电子邮件系统的能力,以及创建和传送新邮件消息的能力。它能很容易地把邮件功能组合到软件中。 

本篇文章将介绍如何在linux下通过配置DNS,实现imap ,smtp服务器,使用JavaMail实现收发邮件的功能。 

2.概述 

    JavaMail是一个纯java API ,因此可以不依赖于任何已安装的系统。充分地体现了平台无关性。在运行的时候,不需要任何特定的设置。只需要提供用来连接和接收邮件的邮件服务器所需的信息就可以了。 

    图1概述了JavaMail的体系结构。采用分层方式,把实现细节和编程接口分开。当应用程序访问邮件服务或向邮件服务发送消息时,利用JavaMail来请求实现。返回该实现的一个实例,然后 应用程序就可以用该实例来检索或发送邮件。实现的实际细节对应用程序开发者透明。

    虽然应用程序可以请求某个特殊协议的实现,但是邮件服务的接口保持不变。                 

    在linux 下,通过配置DNS来建立邮件收发服务器。这样,Internet邮件服务无论是在网络环境下还是在单机下测试均可以使用。(不同之处是网络环境下使用真实IP,单机下使用localhost) 在本例中, 以www.javamail.com作为邮件收发服务器。图2显示了DNS的名 称解析过程,具体内容本文不在介绍。                

    第3部分将详细介绍DNS的配置过程。

3.DNS的配置(设IP为192.168.10.104) 

(1)  修改/etc/named.conf文件,新建两个域(正向域和反向域) 

正向域    zone  “javamail.com” IN  { 

                 type  master; 

                 file  “javamail.com” ; 

                 allow-update { none;}; 

          }; 

反向域     zone  “10.168.192.in-addr.arpa”  IN  { 

                 type  master; 

                 file  “javamail.com1” ; 

                 allow-update { none;}; 

          }; 

(2)  在/var/named/下建立数据库文件,可通过复制已有文件生成 

正向域文件   cp  /etc/named/localhost.zone       /etc/named/javamai.com 

反向域文件   cp  /etc/named/named.local         /etc/named/javamail.com1 

(3)  编辑新生成的数据库文件javamail.com和javamail.com1 

javamail.com内容: 

$TTL  86400 

@          IN  SOA  ns.javamail.com    root.javamail.com.( 

                      20030615 

                       3H 

                       15M 

                       1W 

                       1D  ) 

@            IN   NS  ns.javamail.com. 

ns            IN   A    192.168.10.104 

www          IN   A    192.168.10.104 

javamail.com.   IN   MX  1   ns.javamail.com. 

javamail.com1内容: 

 $TTL  86400 

@          IN  SOA  ns.javamail.com.  root.javamail.com.( 

                      1997022700 

                       28800 

                       14400 

                       3600000 

                       86400  ) 

@            IN   NS  ns.javamail.com. 

104         IN   PTR   ns.javamail.com. 

(4)  启动服务  

service named start 

(5)  测试 

ping   www.javamail.com    

若能ping通,则配置成功。 

4.编程细节 

    在配置好DNS后,我们使用www.javamail.com作为邮件收发服务器。 

在linux上新建一个帐号,例java,作为邮件用户。 

发送邮件 

       需提供邮件接收者的电子邮件地址和SMTP服务器的名字。 

       关键语句: 

        Message   message = new MimeMessage (mySession); 

        Message.setSubject(“Using JavaMail”); 

        Message.setContent (“This message is sent by JavaMail……….”, “text/plain”); 

        InternetAddress  toAddr =  new InternetAddress ( to ); 

        Message.setRecipient (Message.RecipientType.TO, toAddr); 

        InternetAddress  fromAddr = new InternetAddress (java@javamail.com, “SendMail”);  

        Message.setFrom(fromAddr); 

    Transport.send(message); 

 检索邮件 

        需提供使用的协议(IMAP或POP3),邮件服务的主机名,用户名(本例是java)和密码。 

 (1)连接服务器 

Store  myStore  =  mySession.getStore(protocol); 

MyStore.connect (host, username, password ); 

 (2)打开文件夹 

邮件系统在文件夹中存储消息。默认文件夹是INBOX 

Folder  myFolder = myStore.getFolder(“INBOX”); 

MyFolder.open(Folder.READ_ONLY); 

 (3)获得消息 

建立一个消息数组,存放从第一条消息到最后一条。 

Int messagecount = myFolder.getMessageCount(); 

Message[]  message = myFolder.getMessages(); 

 (4)遍历消息数组中的元素,显示消息的发送者和消息主题。 

For( int I = 0; I < message.length; I++) 

Address[]  fromAddr  =  message[I].getFrom(); 

System.out.println  ( fromAddr[0]  +  “:” + 

                  Message[I].getSubject()); 

                } 

    JavaMail  API 的一个突出好处是提供了可在编码时透明选择邮件协议接口。不管是IMAP还是POP3,访问邮件文件夹的代码都是相同的,只需很少修改,或者根本不用修改就可用于将来的邮件协议。 

5.结束语 

    通过JavaMail能够很轻松地实现邮件的收发,在linux下也不例外,但需要进行一些相应的配置。Linux与java地结合,能够更加体现linux的开放性和java的平台无关性,同时也提高了安全性。相信java会在linux上更加耀眼。 

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。