风之语

posts(201) comments(182) trackbacks(1)
  • BlogJava
  • 联系
  • RSS 2.0 Feed 聚合
  • 管理

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • ajax(1)
  • android(1)
  • apache(1)
  • AppFuse(1)
  • BIRT(1)
  • iText(1)
  • JSF(8)
  • kettle(1)
  • linux(5)
  • mac(1)
  • maven(1)
  • MSTR(3)
  • Open XML(1)
  • Oracle(21)
  • RCP
  • Struts(2)
  • Struts2(2)
  • SybaseIQ(6)
  • tapestry
  • tomcat(2)
  • weblogic(1)
  • webservice(1)
  • weka(1)
  • 云计算(1)
  • 收藏(31)
  • 数据仓库(11)
  • 架构设计(3)
  • 生活(2)
  • 集群(1)
  • 项目管理(6)

随笔档案

  • 2012年12月 (4)
  • 2012年11月 (1)
  • 2012年7月 (2)
  • 2011年8月 (1)
  • 2011年7月 (1)
  • 2011年3月 (1)
  • 2010年12月 (2)
  • 2010年11月 (4)
  • 2010年10月 (3)
  • 2010年9月 (5)
  • 2010年8月 (1)
  • 2010年7月 (4)
  • 2010年3月 (1)
  • 2010年2月 (3)
  • 2009年12月 (3)
  • 2009年11月 (4)
  • 2009年9月 (3)
  • 2009年6月 (5)
  • 2009年5月 (3)
  • 2009年4月 (2)
  • 2009年3月 (5)
  • 2009年2月 (4)
  • 2009年1月 (2)
  • 2008年11月 (2)
  • 2008年9月 (1)
  • 2008年7月 (2)
  • 2008年6月 (4)
  • 2008年5月 (6)
  • 2008年4月 (1)
  • 2008年3月 (1)
  • 2007年12月 (2)
  • 2007年11月 (5)
  • 2007年10月 (2)
  • 2007年9月 (3)
  • 2007年8月 (3)
  • 2007年4月 (1)
  • 2007年3月 (2)
  • 2007年2月 (2)
  • 2007年1月 (2)
  • 2006年12月 (3)
  • 2006年8月 (2)
  • 2006年7月 (2)
  • 2006年6月 (2)
  • 2006年4月 (2)
  • 2006年3月 (1)
  • 2006年2月 (3)
  • 2006年1月 (6)
  • 2005年12月 (6)
  • 2005年11月 (4)
  • 2005年10月 (17)
  • 2005年9月 (25)
  • 2005年8月 (16)
  • 2005年7月 (8)

相册

  • 技术图片

收藏夹

  • java

link

My wife

  • My wife's blog

最新随笔

  • 1. apache修改最大连接并用ab网站压力测试
  • 2. Vm虚拟机访问本地硬盘文件
  • 3. NFS文件无法写入的权限问题
  • 4. weblogic设置上传文件访问权限
  • 5. 在android上动态实现ichartjs的3D柱形图
  • 6. 使用Oracle trunc 来指定精确的年月日时分秒
  • 7. Quartz 2.1.5 web应用配置
  • 8. LoginAny 使用笔记
  • 9. MyEclipse 无响应的几种解决办法
  • 10. java.sql.SQLException: No more data to read from socket

搜索

  •  

积分与排名

  • 积分 - 402197
  • 排名 - 139

最新评论

  • 1. re: 使用Oracle trunc 来指定精确的年月日时分秒[未登录]
  • 政治
  • --张三
  • 2. re: 干掉流氓软件vrvrf_c.exe,vrvedp_m.exe[未登录]
  • `
  • --1
  • 3. re: 无需刻录DMG光盘,教你在VMWare下安装MAC OS X Snow Leopard 10.6
  • 我走到了换DMG映像的时候,然后就没有反应了,这个是什么情况,是不是我的映像文件有问题,还是。。。。
  • --玉竹常青
  • 4. re: LoginAny 使用笔记
  • 怎么没一个人留言,现在来是不是在挖坟啊
  • --ellipse
  • 5. MSTR web应用的部署[未登录]
  • 请问,如何用oracle Application Server服务器部署mstr web应用?
  • --rocky

阅读排行榜

评论排行榜

View Post

javamail总结经验(一)

环境配置。为了运行javamail。我们需要在classpath里导入两个包:mail.jar和activation.jar,这是在纯DOS里或者其它简单工具使用时才需要这个classpath。如果使用像eclipes这样的工具就不需要配置。因为myeclipes已经帮你做好了。
为了要发送邮件和接收邮件,我们必须要遵守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);
    }
}
经过成功发送邮件后是不是有点成就感呢!但还有很多疑问比如怎么读邮件呢?看了下面章节你就会知道了

posted on 2005-10-15 13:57 风 阅读(2343) 评论(1)  编辑  收藏 所属分类: 收藏

View Comments

# re: javamail总结经验(一)  回复  更多评论   
楼主 您好 很荣幸看到您的帖子 现在还有个问题想请教 请指点
我现在想james 做服务器 内部发送没有问题 可是不能给外网的发
IP我也改了 我用的是你“外部邮件服务器的使用方法” 把STMP改成localhost 一运行 显示发送成功 但就是接不到邮件 请问是哪地方错了 谢谢
TO------》fulltd_wxh@126.com

2007-07-13 17:33 | wangxihui
新用户注册  刷新评论列表  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问   管理
相关文章:
  • LoginAny 使用笔记
  • 资源管理器搜索包含文字的文件找不到的解决方法
  • xp下删除windows7,无法删除windows7文件夹,无法删除windows7文件,双系统卸载,取得文件权限
  • 利用windows系统ftp命令编写的BAT文件上传[转]
  • jxl操作excel例子(转)
  • I18N-国际化消息和日志
  • 使用 AppFuse 的七个理由
  • Office (2007) Open XML 文件格式简介
  • [转]Reporting Services与相关产品的比较
  • 自定义file类型input框样式的方法
 
 
Powered by:
BlogJava
Copyright © 风