天空是藍(lán)色的

          做好軟件為中國 #gcc -c helloworld.c -o helloworld.o //編譯目標(biāo)文件 #gcc helloworld.o -o helloworld //編譯成可執(zhí)行exe #helloworld //運(yùn)行exe

          公告


           

          常用鏈接

          留言簿(9)

          隨筆分類(149)

          隨筆檔案(151)

          文章分類(31)

          文章檔案(31)

          C編譯器

          leemay`s

          朋友的blog

          相冊(cè)

          計(jì)算機(jī)原理

          鏈接

          搜索

          •  

          積分與排名

          • 積分 - 450139
          • 排名 - 121

          最新隨筆

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          [轉(zhuǎn)載]javamail發(fā)送郵件
          http://spaces.msn.com/members/tcjava/
          /*
          在java版經(jīng)常看到有人問如何用javamail發(fā)送郵件?如何接收郵件?如何訪問多個(gè)文件夾等。問題零散,而歷史的回復(fù)早已經(jīng)淹沒在問題的海洋之中。

          本人之前所做過一個(gè)java項(xiàng)目,其中包含有WebMail功能,當(dāng)初為用java實(shí)現(xiàn)而對(duì)javamail摸索了一段時(shí)間,總算有點(diǎn)收獲。看到論壇中的經(jīng)常有此方面的問題,因此把我的一些經(jīng)驗(yàn)帖出來,希望對(duì)大家有些幫助。

          此篇僅介紹用javamail實(shí)現(xiàn)發(fā)送郵件功能,其中涉及smtp認(rèn)證,郵件附件發(fā)送,及HTML內(nèi)容郵件等。
          其它有關(guān)多郵箱的實(shí)現(xiàn),接收POP3郵件及IMAP等內(nèi)容,將在后續(xù)文章中介紹。

          如下程序需要:javamail,JAF包,j2ee.jar包含了上述兩個(gè)包,建議大家安裝J2SDKEE或直接拷貝j2ee.jar,將其添加到j(luò)builder的library中,或系統(tǒng)ClassPath中

          */



          package com.me.util.mail
          ;

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

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

          public class sendMail {

          private MimeMessage mimeMsg
          ; //MIME郵件對(duì)象

          private Session session
          ; //郵件會(huì)話對(duì)象
          private Properties props; //系統(tǒng)屬性
          private boolean needAuth = false; //smtp是否需要認(rèn)證

          private String username 
          = ""; //smtp認(rèn)證用戶名和密碼
          private String password = "";

          private Multipart mp
          ; //Multipart對(duì)象,郵件內(nèi)容,標(biāo)題,附件等內(nèi)容均添加到其中后再生成MimeMessage對(duì)象



          /**

          */
          public sendMail() {
          setSmtpHost(getConfig.mailHost)
          ;//如果沒有指定郵件服務(wù)器,就從getConfig類中獲取
          createMimeMessage();
          }

          public sendMail(String smtp){
          setSmtpHost(smtp)
          ;
          createMimeMessage();
          }



          /**
          * @param hostName String
          */
          public void setSmtpHost(String hostName) {
          System.out.println(
          "設(shè)置系統(tǒng)屬性:mail.smtp.host = "+hostName);
          if(props == null)props = System.getProperties(); //獲得系統(tǒng)屬性對(duì)象

          props.put(
          "mail.smtp.host",hostName); //設(shè)置SMTP主機(jī)
          }


          /**
          * @return boolean
          */
          public boolean createMimeMessage()
          {
          try{
          System.out.println(
          "準(zhǔn)備獲取郵件會(huì)話對(duì)象!");
          session = Session.getDefaultInstance(props,null); //獲得郵件會(huì)話對(duì)象
          }
          catch(Exception e){
          System.err.println(
          "獲取郵件會(huì)話對(duì)象時(shí)發(fā)生錯(cuò)誤!"+e);
          return false;
          }

          System.out.println(
          "準(zhǔn)備創(chuàng)建MIME郵件對(duì)象!");
          try{
          mimeMsg 
          = new MimeMessage(session); //創(chuàng)建MIME郵件對(duì)象
          mp = new MimeMultipart();

          return true
          ;
          }
          catch(Exception e){
          System.err.println(
          "創(chuàng)建MIME郵件對(duì)象失敗!"+e);
          return false;
          }
          }



          /**
          * @param need boolean
          */
          public void setNeedAuth(boolean need) {
          System.out.println(
          "設(shè)置smtp身份認(rèn)證:mail.smtp.auth = "+need);
          if(props == null)props = System.getProperties();

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



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


          /**
          * @param mailSubject String
          * @return boolean
          */
          public boolean setSubject(String mailSubject) {
          System.out.println(
          "設(shè)置郵件主題!");
          try{
          mimeMsg.setSubject(mailSubject)
          ;
          return true;
          }
          catch(Exception e) {
          System.err.println(
          "設(shè)置郵件主題發(fā)生錯(cuò)誤!");
          return false;
          }
          }



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

          return true
          ;
          }
          catch(Exception e){
          System.err.println(
          "設(shè)置郵件正文時(shí)發(fā)生錯(cuò)誤!"+e);
          return false;
          }
          }


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

          System.out.println(
          "增加郵件附件:"+filename);

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

          mp.addBodyPart(bp)
          ;

          return true
          ;
          }
          catch(Exception e){
          System.err.println(
          "增加郵件附件:"+filename+"發(fā)生錯(cuò)誤!"+e);
          return false;
          }
          }



          /**
          * @param name String
          * @param pass String
          */
          public boolean setFrom(String from) {
          System.out.println(
          "設(shè)置發(fā)信人!");
          try{
          mimeMsg.setFrom(new InternetAddress(from))
          ; //設(shè)置發(fā)信人
          return true;
          }
          catch(Exception e)
          { return false
          ; }
          }


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

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

          }

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


          /**
          * @param name String
          * @param pass String
          */
          public boolean sendout()
          {
          try{
          mimeMsg.setContent(mp)
          ;
          mimeMsg.saveChanges();
          System.out.println("正在發(fā)送郵件.");

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

          System.out.println(
          "發(fā)送郵件成功!");
          transport.close();

          return true
          ;
          }
          catch(Exception e)
          {
          System.err.println(
          "郵件發(fā)送失敗!"+e);
          return false;
          }
          }


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

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

          sendMail themail 
          = new sendMail("smtp.msn.com");
          themail.setNeedAuth(true);

          if(themail.setSubject(
          "標(biāo)題"== false) return;
          if(themail.setBody(mailbody) == false) return;
          if(themail.setTo("gates@msn.com"== false) return;
          if(themail.setFrom("bill@msn.com"== false) return;
          if(themail.addFileAffix("c:\\boot.ini"== false) return;
          themail.setNamePass("user","password");

          if(themail.sendout() 
          == false) return; 
          }
          }


          http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=124&threadID=27140&tstart=330
          我是按照weblogic公司的幫助文檔做的。不知還要配置什么?

          1. 通過console方式創(chuàng)建一個(gè)MailSession.

          2. 在Configuration欄中輸入以下參數(shù):
          Name: MyMailSession
          JNDIName: MyMailSession
          Properties
          mail.smtp.host=winqiu
          3. 然后在Targets欄中將mailsession加入你的Target Servers.
          4. 這樣你的mailsession就創(chuàng)建成功了.
          5. 在程序中調(diào)用的方法如下:
          import java.util.*;
          import javax.activation.*;
          import javax.mail.Session;
          import javax.mail.*;
          import javax.mail.internet.*;
          import javax.naming.*;

          public class SendMail {
            Context ic 
          = null;

            public SendMail() {
            }

            public void send() {
              
                //使用JNDI查詢Mail Session,
                try
                {
                
                  Hashtable ht 
          = new Hashtable();
                   ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
                   ht.put(Context.PROVIDER_URL, "t3://winqiu:7001");
                   ic = new InitialContext(ht);
                    Session session = (Session) ic.lookup("myMailSession");     

                //設(shè)置屬性,然后創(chuàng)建Session實(shí)例
                Properties props 
          = new Properties();
                props.put("mail.transport.protocol", "smtp");
                props.put("mail.smtp.host", "winqiu");
                InternetAddress emailAddress = new InternetAddress(
                    
          "win_qiu@yahoo.com.cn");
                props.put("mail.from", emailAddress);
                Session session2 =session.getInstance(props);

                //創(chuàng)建消息
                Message msg 
          = new MimeMessage(session2);
                msg.setFrom();
                String to = "win_qiu@hotmail.com.cn";
                msg.setRecipients(Message.RecipientType.TO,
                                  InternetAddress.parse(to
          , false));
                String subject = "hello";
                msg.setSubject(subject);
                msg.setSentDate(new Date());
              // 將消息內(nèi)容存放到MimeBodyPart對(duì)象中,然后把MimeBodyPart對(duì)象
              //存入Multipart對(duì)象中,最后,把代表附件的Multipart對(duì)象加入待
              //發(fā)送的消息中
                MimeBodyPart mbp 
          = new MimeBodyPart();
                String messageTxt = "first mail ";
                mbp.setText(messageTxt);
                
                Multipart mp 
          = new MimeMultipart();
                mp.addBodyPart(mbp);
                msg.setContent(mp);
                
                msg.saveChanges()
          ;
                //發(fā)送消息
                Transport.send(msg)
          ;
              }
              catch (NamingException e) {
                e.printStackTrace()
          ;

              }
              catch (MessagingException e) {
                e.printStackTrace()
          ;

              }

            }
            public static void main(String args
          [])
            {
              SendMail sendMail
          =new SendMail();
              sendMail.send();
              System.out.println("send ok");
            }
          }


          但是我的發(fā)送郵件時(shí)候就出現(xiàn)這樣的異常:
          javax.naming.ConfigurationException.  Root exception is java.rmi.MarshalException: error marshalling return
          ; nested exception is: 
          java.io.NotSerializableException: javax.mail.Session

          at weblogic.rjvm.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:
          108)

          at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:
          284)

          at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:
          244)

          at weblogic.jndi.internal.ServerNamingNode_812_WLStub.lookup(Unknown Source)

          at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:
          343)

          at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:
          336)

          at javax.naming.InitialContext.lookup(InitialContext.java:
          347)

          at javamail.SendMail.send(SendMail.java:
          42)

          at javamail.SendMail.main(SendMail.java:
          94)

          Caused by: java.io.NotSerializableException: javax.mail.Session

          at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:
          1054)

          at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:
          278)

          at weblogic.common.internal.ChunkedObjectOutputStream.writeObject(ChunkedObjectOutputStream.java:
          116)

          at weblogic.rjvm.MsgAbbrevOutputStream.writeObject(MsgAbbrevOutputStream.java:
          93)

          at weblogic.jndi.internal.RootNamingNode_WLSkel.invoke(Unknown Source)

          at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:
          477)

          at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerRef.java:
          108)

          at weblogic.rmi.internal.BasicServerRef$
          1.run(BasicServerRef.java:420)

          at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:
          353)

          at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
          144)

          at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:
          415)

          at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:
          30)

          at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:
          197)

          at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:
          170)

          posted on 2005-12-13 11:41 bluesky 閱讀(1228) 評(píng)論(0)  編輯  收藏 所屬分類: 工作總結(jié)

          主站蜘蛛池模板: 长沙县| 云阳县| 会理县| 离岛区| 永靖县| 宝鸡市| 收藏| 汉寿县| 新津县| 如东县| 华容县| 广安市| 宾川县| 喀什市| 兴文县| 田东县| 东明县| 德庆县| 丽水市| 甘南县| 滦南县| 三台县| 溧阳市| 旅游| 拉萨市| 无棣县| 西贡区| 金乡县| 遵化市| 峨眉山市| 新干县| 兰西县| 南部县| 和静县| 长子县| 长治县| 六安市| 延津县| 汝城县| 灌阳县| 叙永县|