免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4312 | 回复: 15
打印 上一主题 下一主题

用javamail发送邮件 aistill(原作) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2002-09-05 08:17 |只看该作者 |倒序浏览
用javamail发送邮件    aistill(原作)
  
关键字     javamail,smtp,附件,HTML邮件,smtp认证
  


/*
在java版经常看到有人问如何用javamail发送邮件?如何接收邮件?如何访问多个文件夹等。问题零散,而历史的回复早已经淹没在问题的海洋之中。

本人之前所做过一个java项目,其中包含有WebMail功能,当初为用java实现而对javamail摸索了一段时间,总算有点收获。看到论坛中的经常有此方面的问题,因此把我的一些经验帖出来,希望对大家有些帮助。

此篇仅介绍用javamail实现发送邮件功能,其中涉及smtp认证,邮件附件发送,及HTML内容邮件等。
其它有关多邮箱的实现,接收POP3邮件及IMAP等内容,将在后续文章中介绍。

如下程序需要:javamail,JAF包,j2ee.jar包含了上述两个包,建议大家安装J2SDKEE或直接拷贝j2ee.jar,将其添加到jbuilder的library中,或系统ClassPath中

*/



package com.me.util.mail&#59;

/**
* @author Zhangkun aistill@msn.com
* @version 1.0
*/

import java.util.*&#59;
import javax.mail.*&#59;
import javax.mail.internet.*&#59;
import java.util.Date&#59;
import javax.activation.*&#59;
import java.io.*&#59;
import com.me.util.*&#59;

public class sendMail {

  private MimeMessage mimeMsg&#59;  //MIME邮件对象

  private Session session&#59;      //邮件会话对象
  private Properties props&#59;     //系统属性
  private boolean needAuth = false&#59;  //smtp是否需要认证

  private String username = ""&#59;  //smtp认证用户名和密码
  private String password = ""&#59;

  private Multipart mp&#59;    //Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象



/**
  *
  */
  public sendMail() {
    setSmtpHost(getConfig.mailHost)&#59;//如果没有指定邮件服务器,就从getConfig类中获取
    createMimeMessage()&#59;
  }

  public sendMail(String smtp){
    setSmtpHost(smtp)&#59;
    createMimeMessage()&#59;
  }



/**
  * @param hostName String
  */
  public void setSmtpHost(String hostName) {
    System.out.println("设置系统属性:mail.smtp.host = "+hostName)&#59;
    if(props == null)props = System.getProperties()&#59;         //获得系统属性对象

    props.put("mail.smtp.host",hostName)&#59;                 //设置SMTP主机
  }


/**
  * @return boolean
  */
  public boolean createMimeMessage()
  {
    try{
      System.out.println("准备获取邮件会话对象!&quot&#59;
      session = Session.getDefaultInstance(props,null)&#59;   //获得邮件会话对象
    }
    catch(Exception e){
      System.err.println("获取邮件会话对象时发生错误!"+e)&#59;
      return false&#59;
    }

    System.out.println("准备创建MIME邮件对象!&quot&#59;
    try{
      mimeMsg = new MimeMessage(session)&#59;                 //创建MIME邮件对象
      mp = new MimeMultipart()&#59;

      return true&#59;
    }
    catch(Exception e){
      System.err.println("创建MIME邮件对象失败!"+e)&#59;
      return false&#59;
    }
  }



/**
  * @param need boolean
  */
  public void setNeedAuth(boolean need) {
    System.out.println("设置smtp身份认证:mail.smtp.auth = "+need)&#59;
    if(props == null)props = System.getProperties()&#59;

    if(need){
      props.put("mail.smtp.auth","true&quot&#59;
    }else{
      props.put("mail.smtp.auth","false&quot&#59;
    }
  }



/**
  * @param name String
  * @param pass String
  */
  public void setNamePass(String name,String pass) {
    username = name&#59;
    password = pass&#59;
  }


/**
  * @param mailSubject String
  * @return boolean
  */
  public boolean setSubject(String mailSubject) {
    System.out.println("设置邮件主题!&quot&#59;
    try{
      mimeMsg.setSubject(mailSubject)&#59;
      return true&#59;
    }
    catch(Exception e) {
      System.err.println("设置邮件主题发生错误!&quot&#59;
      return false&#59;
    }
  }



/**
  * @param mailBody String
  */
  public boolean setBody(String mailBody) {
    try{
      BodyPart bp = new MimeBodyPart()&#59;
      bp.setContent(&quot;<meta http-equiv=Content-Type content=text/html&#59; charset=gb2312>;&quot;+mailBody,&quot;text/html&#59;charset=GB2312&quot&#59;
      mp.addBodyPart(bp)&#59;

      return true&#59;
    }
    catch(Exception e){
      System.err.println(&quot;设置邮件正文时发生错误!&quot;+e)&#59;
      return false&#59;
    }
  }


/**
  * @param name String
  * @param pass String
  */
  public boolean addFileAffix(String filename) {

System.out.println(&quot;增加邮件附件:&quot;+filename)&#59;

try{
      BodyPart bp = new MimeBodyPart()&#59;
      FileDataSource fileds = new FileDataSource(filename)&#59;
      bp.setDataHandler(new DataHandler(fileds))&#59;
      bp.setFileName(fileds.getName())&#59;

      mp.addBodyPart(bp)&#59;

      return true&#59;
    }
    catch(Exception e){
      System.err.println(&quot;增加邮件附件:&quot;+filename+&quot;发生错误!&quot;+e)&#59;
      return false&#59;
    }
  }



/**
  * @param name String
  * @param pass String
  */
  public boolean setFrom(String from) {
    System.out.println(&quot;设置发信人!&quot&#59;
    try{
      mimeMsg.setFrom(new InternetAddress(from))&#59;             //设置发信人
      return true&#59;
    }
    catch(Exception e)
    { return false&#59; }
  }


/**
  * @param name String
  * @param pass String
  */
  public boolean setTo(String to){
    if(to == null)return false&#59;

    try{
      mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to))&#59;
      return true&#59;
    }
    catch(Exception e)
    {   return false&#59;   }

  }

/**
  * @param name String
  * @param pass String
  */
  public boolean setCopyTo(String copyto)
  {
    if(copyto == null)return false&#59;
    try{
      mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto))&#59;
      return true&#59;
    }
    catch(Exception e)
    { return false&#59; }
  }


/**
  * @param name String
  * @param pass String
  */
  public boolean sendout()
  {
    try{
      mimeMsg.setContent(mp)&#59;
      mimeMsg.saveChanges()&#59;
      System.out.println(&quot;正在发送邮件....&quot&#59;

      Session mailSession = Session.getInstance(props,null)&#59;
      Transport transport = mailSession.getTransport(&quot;smtp&quot&#59;
      transport.connect((String)props.get(&quot;mail.smtp.host&quot;),username,password)&#59;
      transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO))&#59;
      //transport.send(mimeMsg)&#59;

      System.out.println(&quot;发送邮件成功!&quot;)&#59;
      transport.close()&#59;

      return true&#59;
    }
    catch(Exception e)
    {
      System.err.println(&quot;邮件发送失败!&quot;+e)&#59;
      return false&#59;
    }
  }


  /**
   *  Just do it as this
   */
  public static void main(String[] args) {

    String mailbody = &quot;<meta http-equiv=Content-Type content=text/html&#59; charset=gb2312>;&quot;+
        &quot;<div align=center>;<a href=http://www.csdn.net>; csdn </a>;</div>;&quot;&#59;

    sendMail themail = new sendMail(&quot;smtp.msn.com&quot;)&#59;
    themail.setNeedAuth(true)&#59;

    if(themail.setSubject(&quot;标题&quot;) == false) return&#59;
    if(themail.setBody(mailbody) == false) return&#59;
    if(themail.setTo(&quot;gates@msn.com&quot;) == false) return&#59;
    if(themail.setFrom(&quot;bill@msn.com&quot;) == false) return&#59;
    if(themail.addFileAffix(&quot;c:\\boot.ini&quot;) == false) return&#59;
    themail.setNamePass(&quot;user&quot;,&quot;password&quot;)&#59;

    if(themail.sendout() == false) return&#59;   
  }
}


论坛徽章:
0
2 [报告]
发表于 2002-09-05 08:36 |只看该作者

用javamail发送邮件 aistill(原作)

斑竹也不用客气了,精品吧!:)

论坛徽章:
0
3 [报告]
发表于 2002-09-05 08:41 |只看该作者

用javamail发送邮件 aistill(原作)

呵呵~~~~~~~~`我看后,感觉里面有几个方法和类可能是作者本人自己写的,所以谁如果想用就也得自己写相应的了

论坛徽章:
0
4 [报告]
发表于 2002-09-05 09:23 |只看该作者

用javamail发送邮件 aistill(原作)

有这个例子就好多乐,有关邮件的函数都有乐,用到时查查很方便的。

呵呵,好。

论坛徽章:
0
5 [报告]
发表于 2002-09-13 22:11 |只看该作者

用javamail发送邮件 aistill(原作)


把你的com.me.util.*包给共享一下吧!
:)

论坛徽章:
0
6 [报告]
发表于 2002-09-13 22:49 |只看该作者

用javamail发送邮件 aistill(原作)

public sendMail() {
   setSmtpHost(getConfig.mailHost)&#59;//如果没有指定邮件服务器,就从getConfig类中获取
   createMimeMessage()&#59;
}

public sendMail(String smtp){
   setSmtpHost(smtp)&#59;
   createMimeMessage()&#59;
}



为什么这么写呢?有什么意义?
:)

论坛徽章:
0
7 [报告]
发表于 2002-09-14 18:04 |只看该作者

用javamail发送邮件 aistill(原作)

这样写更易实现代码重用这个功能

论坛徽章:
0
8 [报告]
发表于 2002-09-14 20:03 |只看该作者

用javamail发送邮件 aistill(原作)

我记得构建器的作用不就是初始化变量吗?
可是你做的是什么工作呢?
:)

论坛徽章:
0
9 [报告]
发表于 2002-09-14 20:19 |只看该作者

用javamail发送邮件 aistill(原作)

第一个是没有参数的,其作用是选择邮件服务器

如果已有邮件服务器则会直接调用第二个,第二个包含设定参数

这样的作用是如果另一个与这个不相干的程序调用的话,无需要什么更改,会自动选择和设定参数

论坛徽章:
0
10 [报告]
发表于 2002-09-14 20:23 |只看该作者

用javamail发送邮件 aistill(原作)

OK!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP