首页 | 邮件资讯 | 技术教程 | 解决方案 | 产品评测 | 邮件人才 | 邮件博客 | 邮件系统论坛 | 软件下载 | 邮件周刊 | 热点专题 | 工具
网络技术 | 操作系统 | 邮件系统 | 客户端 | 电子邮箱 | 反垃圾邮件 | 邮件安全 | 邮件营销 | 移动电邮 | 邮件软件下载 | 电子书下载

邮件服务器

技术前沿 | Qmail | IMail | MDaemon | Exchange | Domino | 其它 | Foxmail | James | Kerio | JavaMail | WinMail | Sendmail | Postfix | Winwebmail | Merak | CMailServer | 邮件与开发 | 金笛 |
首页 > 邮件服务器 > JavaMail > Javamail的开发与应用总结经验之一 > 正文

Javamail的开发与应用总结经验之一

出处:赛迪网 作者:zuolin0806 时间:2006-1-5 15:33:00
环境配置。为了运行Javamail。我们需要在classpath里导入两个包:mail.jar和activation.jar,这是在纯DOS里或者其它简单工具使用时才需要这个classpath。如果使用像Eclipse这样的工具就不需要配置。因为myEclipse已经帮你做好了。

为了要发送邮件和接收邮件,我们必须要遵守smtp和pop3协议,不过还有其它协议也可执行(如IMAP)。如果把本机当作服务器来发送邮件请在http://jakrata.apache.org网站里下载james邮件服务器,然后解压在本机上。运行james/bin里的run.bat就可以启动了服务器。

运行后在DOS里登录邮件服务器。具体命令如下:

系统管理员:root
密码:root
telnet localhost 4555


然后就可以增加邮箱用户名了。命令如下:

adduser 用户名 密码


例:

adduser test test


这样就建立了这样一个邮箱test@localhost 密码为:test

如果想要更多功能用help命令。
注意:如果在本机装了邮件服务器的话,只能在本机局域网里申请邮箱,发送和接收。不能发送到外部的邮箱里去。如果用外部的邮件服务器像比如163和126的服务器等就可以随心所欲的发邮件了。

先看看用james邮件服务器在本机上发邮件吧。先简单看一个例子。









import javax.mail.*;
import java.util.*;
import javax.mail.internet.*;
public class MyFirstMail 
{
protected Session mailSession;
public MyFirstMail()throws Exception
{
init();
}
public static void main(String[] args) 
{
try
{
new MyFirstMail().sendMail();
System.out.print("邮件已发");
}
catch(Exception e)
{
e.printStackTrace();
}
}
//初始化服务器环境
public void init()throws Exception
{
Properties props=new Properties();
props.put("mail.transport.protocol","smtp");
props.put("mail.smtp.host","localhost");
props.put("mail.smtp.port","25");
mailSession=Session.getDefaultInstance(props, null);;
}
public void sendMail()throws Exception
{
try
{
            
//从哪里发的邮件            
msg.setFrom(new InternetAddress("test@localhost"));
//发送到目标邮件        
msg.setRecipients
(Message.RecipientType.TO,InternetAddress.parse("wang@localhost"));
//抄送的接收者   
msg.setRecipients
(Message.RecipientType.CC,InternetAddress.parse("wang@localhost"));
//暗送的接收者
msg.setRecipients
(Message.RecipientType.BCC,InternetAddress.parse("wang@localhost"));
//设置发送时间
msg.setSentDate(new java.util.Date());
//设置邮件标题
msg.setSubject("a test mail");
//设置邮件内容
msg.setText("this is the email content");
//指定协议发送消息的对像
Transport transport=mailSession.getTransport("smtp");
//发送消息
Transport.send(msg);
}
catch(Exception e)
{
throw e;
}
}

发送完后想要看邮件就要到james->apps->james->var->mail->inboxes就可以看见每个邮箱里的邮件数了。由于发过来的是字节流,邮件包括一个邮件属性和消息,所以每一封邮件是由二个文件组成的。

也许没有学过的Javamail的人看上去会一头雾水。不要紧,现在一一详解。先说初始化的内容的吧!

1、mail.transport.protocol=smtp 这里主要说明的是邮件传输协议。

2、mail.smtp.host=localhost 发送邮件的主机如果用外部邮件服务器的话,可以这样写:

mail.smtp.host=smtp.163.com

这样就以163.为服务器了。

3、mail.smtp.prot=25 smtp端口可以省略,缺省为25

javax.mail.session session类定义了与远程邮件系统通信的邮件会话。需要注意的是这个session不同servlet中的会话。Servlet中的会话需要共享一些信息,而mail里的session里没有这个功能,它只是用于存储与服务器建立连接会话相关信息和逻辑。

Session类是Javamail api最高层入口类,所有其它类都必须经由session对象生效。Session对象它管理配置选项和用于与邮件系统交互的用认证信息息。它通过使用java.util.properties对象配置邮件会话的属性如邮件服务器,用户名,密码,及整个应用程序中共享的其它信息。

Session并不处现任何授权操作,它只是存储这些授权信息。Session类的构造器是私有的,它不能被继承,也不能用new语名创建实例。但它提供了两个静态方法getInstance 和getDefaultInstance来获取session实例,在创建session实例时需要提供一些属性。具体实现如下:

Properties props=new Properties()
Props.put(“mail.transport.protocol”,”smtp”)
Props.put(“mail.smtp.host”,”localhost”);
Props.put(“mail.smtp.prot”,”25”)
//不加以认证也可以这样写
//Session session=Session.getDefaultInstance(props,null)
//如果认证传入null那么它和不使用认证调用方式一样 
 Session session=Session.getDefaultInstance(props)


Javax.mail. Message
经过session配置后就可以进行发送消息任务了。这由Message类来完成。Message实现了Part接口,它表示一个邮件消息,包含一系列的属性和一个消息内容。消息属性包括了消息址址消息,定义了消息内容的结构(包括内容类型),消息内容使用DataHandler对象包装实际数据。当邮件消息位于目录(folder)中时,系统还使用了一个标志位集合来描述它的状态。

Message是抽象类,实际使用时必须用一个子类代替以表示具体的邮件格式。比如说Javamail api提供了MimeMessage类,该类扩展了Message,实现了RFC822和MIME标准。有两个构造方法:





//一般使用第一种
Message msg=new MimeMessage(Session session)
Message msg=new MimeMessage(MimeMessage msg)


获得消息后,就可以设置消息各个部份了。在设置之前因为要涉及地址。所以讲一下地址类javax.mail.Address

Address类表示电子邮件类,它是一个抽象类,它的子类InternetAddress提供具体实现且通常可串行化。若创建的地址只包含电子邮件,只要传递电子邮件到构造器即可如



InternetAddress addr=new InternetAddress();
addr.setAddress(“wang@126.com”)
或者是:InterntAddress addr=new InternetAddress(“wang@126.com”)
另外,InternetAddress类还提供了地址解析方法如
Address[] addrs=InternetAddress.parse(“wang@163.com,f@126.com,zuo@126.com”);
地址之后就可以发送消息了。
//设置发送者
Msg.setFrom(new InternetAddress(“test@126.com”));
//设置接收者,并还具有解析功能
Msg.setRecipients(Message.RecipientType.To,
InternetAddress.parse(“zuolin0806@163.com”));
//抄送的接收者
Msg.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(“zuolin0806@163.com”));
//暗送的接收者
Msg.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(“zuolin0806@163.com”));
//设置消息主题
 msg.setSubject(“我的爱”)
//设置内容的基本机制,其参数Mime类型
 msg.setContent(“这是我的内容”,”text/html;charset=gb2312”)


其中的text/html表示消息内容采用的是HTML格式。

如果消息格式是(text/plain),而且使用的是MimeMessage,那么setText()方法设置邮件内容的参数(Mime类型默认为text/plain)

//设置邮件内容
msg.setText();
//设置发送时间
msg.setSentDate(new java.util.Date());


最后一步是就是发送了

javax.mail.Transport
该类也是抽象类,它可通过静态方法和实便方法发送消息。Transport断承service类。所以它提供了通用方法,如命名传输,连接服务器和监听传输事件等。













//默认
Transport.send(msg);


最后看一下使用外部邮件服务器的使用方法。先看程序再讲解,注意在使用外部邮件服务器时一定要有一个类来认证。到时在讲。

public class MySecondMail
{
protected Session session = null;
//邮件用户名
String mailUser = "zuolin0806";
String host = "smtp.163.com";
String pwd = "用户名的密码";
public MySecondMail()
{
init();
}
public void init()
{
Properties props = new Properties();
props.put("mail.transpost.protocol", "smtp");
props.put("mail.smtp.host", "smtp.163.com");
//必须要有一个类来认证
props.put("mail.smtp.auth", "true");
props.put("mail.smpt.port", "25")
Email_Autherticatorbean auth =  new Email_Autherticatorbean(mailUser,pwd);
//session认证
session = Session.getInstance(props,auth);
//这个是跟踪后台消息。打印在控制台
session.setDebug(true);
}
public static void main(String[] args)
{
new MySecondMail().sendMails();
System.out.println("send mail success!");
}
public void sendMails()
{
try
{
Message msg = new MimeMessage(session);           
msg.setFrom(new InternetAddress("zuolin0806@163.com"));         
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("javaboy@126.com"));
msg.setRecipients(Message.RecipientType.BCC,
InternetAddress.parse("javaboy@126.com"));
msg.setSentDate(new Date());
msg.setSubject("this is my Threee mail");
msg.setContent("this is my mail","text/html");
msg.setText("我成功了。哈哈");

Transport transport = session.getTransport("smtp");
与发送者的邮箱相连
transport.connect(host,mailUser,pwd);
transport.send(msg);
}
catch (SendFailedException e)
{
e.printStackTrace();
}
catch (Exception ee)
{
ee.printStackTrace();
}

}
}


认证类必须继承Authenticator 例子如下:

import javax.mail.*;
    public class Email_Autherticatorbean extends Authenticator
    {
    private String m_username = null;
    private String m_userpass = null;
    public void setUsername(String username)
    {
        m_username = username;
    }
    public void setUserpass(String userpass)
    {
        m_userpass = userpass;
    }
    public Email_Autherticatorbean(String username, String userpass)
    {
        super();
        setUsername(username);
        setUserpass(userpass);
    }
    public PasswordAuthentication getPasswordAuthentication()
    {
        return new PasswordAuthentication(m_username,m_userpass);
    }
    }


经过成功发送邮件后是不是有点成就感呢!但还有很多疑问比如怎么读邮件呢?明天我们就会推出系列文章之二,看了就会知道啦!
相关文章 热门文章
  • Javamail的开发与应用总结经验之二
  • 在JSP中使用JavaMail
  • 通过JavaMail访问Hotmail邮箱
  • JavaMail API细节详细解析大全
  • 利用JavaMail收/发Gmail邮件(SSL)
  • JavaMail之POP3协议判断新邮件的思路
  • javamail发送邮件
  • javamail写的解析MimeMessage的程序
  • Javamail的开发与应用总结经验之一
  • JavaMail实现邮件特快专递
  • Javamail操作指南:实例代码解析
  • JavaMail 之 杜绝邮件乱码
  • 简化JavaMail:小巧 Jakarta Commons-Email
  • 自由广告区
     
    最新软件下载
  • SharePoint Server 2010 部署文档
  • Exchange 2010 RTM升级至SP1 教程
  • Exchange 2010 OWA下RBAC实现的组功能...
  • Lync Server 2010 Standard Edition 标..
  • Lync Server 2010 Enterprise Edition...
  • Forefront Endpoint Protection 2010 ...
  • Lync Server 2010 Edge 服务器部署文档
  • 《Exchange 2003专家指南》
  • Mastering Hyper-V Deployment
  • Windows Server 2008 R2 Hyper-V
  • Microsoft Lync Server 2010 Unleashed
  • Windows Server 2008 R2 Unleashed
  • 今日邮件技术文章
  • 腾讯,在创新中演绎互联网“进化论”
  • 华科人 张小龙 (中国第二代程序员 QQ...
  • 微软推出新功能 提高Hotmail密码安全性
  • 快压技巧分享:秒传邮件超大附件
  • 不容忽视的邮件营销数据分析过程中的算..
  • 国内手机邮箱的现状与未来发展——访尚..
  • 易观数据:2011Q2中国手机邮箱市场收入..
  • 穿越时空的爱恋 QQ邮箱音视频及贺卡邮件
  • Hotmail新功能:“我的朋友可能被黑了”
  • 入侵邻居网络发骚扰邮件 美国男子被重..
  • 网易邮箱莫子睿:《非你莫属》招聘多过..
  • 中国电信推广189邮箱绿色账单
  • 最新专题
  • 鸟哥的Linux私房菜之Mail服务器
  • Exchange Server 2010技术专题
  • Windows 7 技术专题
  • Sendmail 邮件系统配置
  • 组建Exchange 2003邮件系统
  • Windows Server 2008 专题
  • ORF 反垃圾邮件系统
  • Exchange Server 2007 专题
  • ISA Server 2006 教程专题
  • Windows Vista 技术专题
  • “黑莓”(BlackBerry)专题
  • Apache James 专题
  • 分类导航
    邮件新闻资讯:
    IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮
    电子邮箱 | 反垃圾邮件|邮件客户端|网络安全
    行业数据 | 邮件人物 | 网站公告 | 行业法规
    网络技术:
    邮件原理 | 网络协议 | 网络管理 | 传输介质
    线路接入 | 路由接口 | 邮件存储 | 华为3Com
    CISCO技术 | 网络与服务器硬件
    操作系统:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | 其它操作系统
    邮件服务器:
    程序与开发 | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    金笛邮件系统 | 其它 |
    反垃圾邮件:
    综述| 客户端反垃圾邮件|服务器端反垃圾邮件
    邮件客户端软件:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | 雷鸟 | Eudora |Becky! |Pegasus
    IncrediMail |其它
    电子邮箱: 个人邮箱 | 企业邮箱 |Gmail
    移动电子邮件:服务器 | 客户端 | 技术前沿
    邮件网络安全:
    软件漏洞 | 安全知识 | 病毒公告 |防火墙
    攻防技术 | 病毒查杀| ISA | 数字签名
    邮件营销:
    Email营销 | 网络营销 | 营销技巧 |营销案例
    邮件人才:招聘 | 职场 | 培训 | 指南 | 职场
    解决方案:
    邮件系统|反垃圾邮件 |安全 |移动电邮 |招标
    产品评测:
    邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端
    广告联系 | 合作联系 | 关于我们 | 联系我们 | 繁體中文
    版权所有:邮件技术资讯网©2003-2010 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   粤ICP备05009143号