隨筆-57  評(píng)論-202  文章-17  trackbacks-0
                利用JavaMail的API可以快速的實(shí)現(xiàn)發(fā)送郵件的功能。下面是我使用的一個(gè)簡(jiǎn)單的實(shí)例,實(shí)現(xiàn)了簡(jiǎn)單的文本郵件的發(fā)送。

          import java.io.*;
          import java.util.
          *;
          import javax.activation.
          *;
          import javax.mail.
          *;
          import javax.mail.internet.
          *;

          import org.apache.log4j.
          *;

          /**
           * <p>Title: 發(fā)送郵件程序</p>
           * <p>Description: </p>
           * <p>Copyright: Copyright (c) 2003</p>
           * <p>Company: </p>
           * @author George Hill
           * @version 1.0
           
          */


          public class MailAgent {

            
          /**
             * 調(diào)試工具
             
          */

            
          private static final Logger log = Logger.getLogger(MailAgent.class.getName());

            
          /**
             * SMTP服務(wù)器地址(默認(rèn)本機(jī))
             
          */

            
          private String smtp = "127.0.0.1";

            
          /**
             * 默認(rèn)構(gòu)造函數(shù)
             
          */

            
          private MailAgent() {}

            
          /**
             * 構(gòu)造函數(shù)
             * @param smtp SMTP服務(wù)器地址
             
          */

            
          private MailAgent(String smtp) {
              
          this.smtp = smtp;
            }


            
          /**
             * 唯一代理實(shí)例
             
          */

            
          private static MailAgent agent;

            
          /**
             * 獲取代理實(shí)例
             * @return 代理實(shí)例
             
          */

            
          public static synchronized MailAgent getInstance() {
              
          if (agent == null)
                agent 
          = new MailAgent();

              
          return agent;
            }


            
          /**
             * 獲取代理實(shí)例
             * @param smtp SMTP服務(wù)器地址
             * @return 代理實(shí)例
             
          */

            
          public static synchronized MailAgent getInstance(String smtp) {
              
          if (agent == null)
                agent 
          = new MailAgent(smtp);
              
          else
                agent.smtp 
          = smtp;

              
          return agent;
            }


            
          /**
             * 發(fā)送文本郵件
             * @param from 發(fā)送者地址
             * @param to 接收者地址
             * @param title 郵件標(biāo)題
             * @param content 郵件內(nèi)容
             * @throws MessagingException 郵件發(fā)送錯(cuò)誤
             
          */

            
          public void sendTextMail(String from, String to, String title, String content)
                throws MessagingException 
          {
              boolean debug 
          = false;
              boolean error 
          = false;

              Properties props 
          = new Properties();
              props.put(
          "mail.smtp.host", smtp);
              
          if (debug)
                props.put(
          "mail.debug""true");

              Session s 
          = Session.getInstance(props, null);

              
          try {
                
          // create a message
                Message msg = new MimeMessage(s);
                msg.setFrom(
          new InternetAddress(from));
                InternetAddress[] address 
          = {new InternetAddress(to)};
                msg.setRecipients(Message.RecipientType.TO, address);
                msg.setSubject(title);
                msg.setSentDate(
          new java.util.Date());
                
          // If the desired charset is known, you can use
                
          // setText(text, charset)
                msg.setText(content);
                log.debug(
          "sending mail from " + from + " to " + to);
                Transport.send(msg);
                log.debug(
          "send mail OK");
              }
           catch (MessagingException mex) {
                error 
          = true;
                System.
          out.println("\n--Exception handling in msgsendsample.java");

                mex.printStackTrace();
                System.
          out.println();
                Exception ex 
          = mex;
                
          do {
                  
          if (ex instanceof SendFailedException) {
                    SendFailedException sfex 
          = (SendFailedException)ex;
                    Address[] invalid 
          = sfex.getInvalidAddresses();
                    
          if (invalid != null{
                      System.
          out.println("    ** Invalid Addresses");
                      
          if (invalid != null{
                        
          for (int i = 0; i < invalid.length; i++)
                          System.
          out.println("         " + invalid[i]);
                      }

                    }

                    Address[] validUnsent 
          = sfex.getValidUnsentAddresses();
                    
          if (validUnsent != null{
                      System.
          out.println("    ** ValidUnsent Addresses");
                      
          if (validUnsent != null{
                        
          for (int i = 0; i < validUnsent.length; i++)
                          System.
          out.println("         "+validUnsent[i]);
                      }

                    }

                    Address[] validSent 
          = sfex.getValidSentAddresses();
                    
          if (validSent != null{
                      System.
          out.println("    ** ValidSent Addresses");
                      
          if (validSent != null{
                        
          for (int i = 0; i < validSent.length; i++)
                          System.
          out.println("         "+validSent[i]);
                      }

                    }

                  }


                  System.
          out.println();
                  
          if (ex instanceof MessagingException)
                    ex 
          = ((MessagingException)ex).getNextException();
                  
          else
                    ex 
          = null;
                }
           while (ex != null);
              }


              
          if (error)
                
          throw new MessagingException("send mail failure");
            }


          }
          posted on 2005-06-02 16:30 小米 閱讀(2217) 評(píng)論(7)  編輯  收藏 所屬分類(lèi): Java

          評(píng)論:
          # 關(guān)于JavaMail的問(wèn)題(第一部分) 2005-08-05 17:10 | kk
          我寫(xiě)了個(gè)JavaMail的簡(jiǎn)單實(shí)例 ,程序運(yùn)行的時(shí)候,沒(méi)問(wèn)題,就是發(fā)信發(fā)不到郵箱里,以下是我的代碼

          view層

          sendMail.jsp

          <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
          <%@ taglib uri="/WEB-INF/struts-nested.tld" prefix="nested" %>
          <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
          <%@ taglib uri="/WEB-INF/struts-template.tld" prefix="template" %>
          <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
          <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
          <%@ page contentType="text/html; charset=GBK" %>
          <html:html>
          <head>
          <title>
          sendMail
          </title>
          </head>
          <body>
          <br/>
          <br/>
          <br/>
          <br/>
          <p>
          <center>
          <html:form action="/student/sendMailAction.do" method="POST">
          <table border="1" width="400">
          <tr>
          <td><p align="center"><bean:message bundle="application_temp_KEY" key="app.jsp.toName"/></td>
          <td><p align="center"><html:text property="toName"/></td>
          </tr>
          <tr>
          <td><p align="center"><bean:message bundle="application_temp_KEY" key="app.jsp.fromName"/></td>
          <td><p align="center"><html:text property="fromName"/></td>
          </tr>
          <tr>
          <td><p align="center"><bean:message bundle="application_temp_KEY" key="app.jsp.subjectText"/></td>
          <td><p align="center"><html:text property="subjectText"/></td>
          </tr>
          <tr>
          <td><p align="center"><bean:message bundle="application_temp_KEY" key="app.jsp.contentText"/></td>
          <td><p align="center"><html:textarea property="contentText"/></td>
          </tr>
          </table>
          <br>
          <center>
          <html:submit property="submit" >
          <bean:message bundle="application_temp_KEY" key="app.jsp.submit"/>
          </html:submit>
          <html:reset property="reset">
          <bean:message bundle="application_temp_KEY" key="app.jsp.reset"/>
          </html:reset>
          </center>
          </html:form>
          </center>
          </body>
          </html:html>

          sendMailSuccess.jsp

          <%@ page contentType="text/html; charset=GBK" %>
          <html>
          <head>
          <title>
          sendMailSuccess
          </title>
          </head>
          <body bgcolor="#ffffff">
          <br>
          <br>
          <br>
          <br>
          <center>
          <h2>
          發(fā)送郵件成功!
          </h2>
          </center>
          </body>
          </html>  回復(fù)  更多評(píng)論
            
          # re: JavaMail的簡(jiǎn)單實(shí)例(第二部分) 2005-08-05 17:11 | kk
          ActionForm類(lèi)

          sendMailActionForm.java


          package strutsapp.form;

          import org.apache.struts.action.*;
          import javax.servlet.http.*;

          public class sendMailActionForm
          extends ActionForm {

          private String toName;

          private String fromName;

          private String subjectText;

          private String contentText;

          public String getContentText() {
          return contentText;
          }

          public String getFromName() {
          return fromName;
          }

          public String getSubjectText() {
          return subjectText;
          }

          public String getToName() {
          return toName;
          }

          public void setToName(String toName) {
          this.toName = toName;
          }

          public void setSubjectText(String subjectText) {
          this.subjectText = subjectText;
          }

          public void setFromName(String fromName) {
          this.fromName = fromName;
          }

          public void setContentText(String contentText) {
          this.contentText = contentText;
          }

          public ActionErrors validate(ActionMapping actionMapping,
          HttpServletRequest httpServletRequest) {
          return null;
          }

          public void reset(ActionMapping actionMapping,
          HttpServletRequest httpServletRequest) {
          }

          }

          Action類(lèi)

          sendMailAction.java

          package strutsapp.action;

          import strutsapp.form.*;
          import org.apache.struts.action.*;
          import javax.servlet.http.*;
          import strutsapp.model.sendMail;

          public class sendMailAction extends Action {
          public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
          sendMailActionForm sendMailActionForm = (sendMailActionForm) actionForm;
          String toName = sendMailActionForm.getToName();
          String fromName = sendMailActionForm.getFromName();
          String subjectText = sendMailActionForm.getSubjectText();
          String contentText = sendMailActionForm.getContentText();
          sendMail sendmail = new sendMail();
          sendmail.sendmail(toName,fromName,subjectText,contentText);
          return actionMapping.findForward("sendMailSuccess");
          }
          }

          model類(lèi)

          sendMail.java

          package strutsapp.model;

          import java.util.*;
          import javax.mail.*;
          import javax.mail.internet.*;

          public class sendMail {

          public void sendmail(String toName, String fromName,
          String subjectText,
          String contentText) {


          //郵件服務(wù)器
          String host = "127.0.0.1";
          //發(fā)送方的郵件地址
          String to = toName;
          //來(lái)自方的郵件地址
          String from = fromName;
          //發(fā)送主題
          String subject = subjectText;
          //發(fā)送內(nèi)容!
          String messageText = contentText;

          boolean sessionDebug = false;

          Properties props = System.getProperties();
          props.put("mail.host", host);
          props.put("mail.transport.protocol", "smtp");

          Session session = Session.getDefaultInstance(props, null);

          session.setDebug(sessionDebug);

          try {

          Message msg = new MimeMessage(session);

          msg.setFrom(new InternetAddress(from));
          InternetAddress[] address = {
          new InternetAddress(to)};
          msg.setRecipients(Message.RecipientType.TO, address);
          msg.setSubject(subject);
          msg.setSentDate(new Date());
          msg.setText(messageText);

          Transport.send(msg);
          }
          catch (MessagingException mex) {

          mex.printStackTrace();
          }

          }
          }  回復(fù)  更多評(píng)論
            
          # re: JavaMail的簡(jiǎn)單實(shí)例(第三部分) 2005-08-05 17:12 | kk
          配置文件

          struts-config.xml

          <action-mappings>
          <action input="/student/sendMail.jsp" name="sendMailActionForm" path="/student/sendMailAction" scope="session" type="strutsapp.action.sendMailAction">
          <forward name="sendMailSuccess" path="/student/sendMailSuccess.jsp" redirect="true" />
          </action>
          </action-mappings>
          <message-resources key="application_temp_KEY" parameter="resources.application_temp" />

          資源文件

          application_temp.properties

          app.jsp.toName = toName
          app.jsp.fromName = fromName
          app.jsp.subjectText = subjectText
          app.jsp.contentText = contentText

          ----------------------------------------------
          提交表單后,顯示的信息,郵件發(fā)送成功,但是郵箱里收不到郵件。

          我在本上建的郵件服務(wù)器。用的是CMailServer,郵件服務(wù)器配置沒(méi)問(wèn)題的,并且試過(guò)的。

          我是參照下面的這個(gè)程序,改的。


          import java.util.*;

          import javax.mail.*;
          import javax.mail.internet.*;


          public class sendmail {

          public static void main(String[] args) {

          //郵件服務(wù)器
          String host = "127.0.0.1";
          //發(fā)送方的郵件地址
          String to = "admin@620.com";
          //來(lái)自方的郵件地址
          String from = "missvrc@yahoo.com.cn";
          //發(fā)送主題
          String subject = "JSP Rules!";
          //發(fā)送內(nèi)容!
          String messageText = "I am sending a message using the"
          + " JavaMail API.\nI can include any text that I want.";
          boolean sessionDebug = false;


          Properties props = System.getProperties();
          props.put("mail.host", host);
          props.put("mail.transport.protocol", "smtp");

          Session session = Session.getDefaultInstance(props, null);


          session.setDebug(sessionDebug);

          try {

          Message msg = new MimeMessage(session);

          msg.setFrom(new InternetAddress(from));
          InternetAddress[] address = {new InternetAddress(to)};
          msg.setRecipients(Message.RecipientType.TO, address);
          msg.setSubject(subject);
          msg.setSentDate(new Date());
          msg.setText(messageText);


          Transport.send(msg);
          }
          catch (MessagingException mex) {

          mex.printStackTrace();
          }
          }
          }

          運(yùn)行上面這個(gè)程序,往的服務(wù)器上發(fā)送沒(méi)有問(wèn)題,但改成struts后,就不知道為什么了。

          謝謝了,高手。  回復(fù)  更多評(píng)論
            
          # re: JavaMail的簡(jiǎn)單實(shí)例 2005-08-08 14:25 | 小米
          對(duì)不起,最近很忙,很少時(shí)間上來(lái)看看。其實(shí)我覺(jué)得這樣發(fā)評(píng)論的方式來(lái)問(wèn)問(wèn)題是不太好的,因?yàn)橐话銇?lái)說(shuō)不可能時(shí)時(shí)上來(lái)看自己的博客。我看了下你的問(wèn)題,覺(jué)得有下面兩點(diǎn)想問(wèn)問(wèn):
          1.Action中是否正確的收到了來(lái)到View層的參數(shù)值;
          2.郵件沒(méi)有發(fā)送出去,有沒(méi)有返回什么錯(cuò)誤信息?  回復(fù)  更多評(píng)論
            
          # re: JavaMail的簡(jiǎn)單實(shí)例 2005-08-08 15:36 | kk
          你好,這個(gè)問(wèn)題我現(xiàn)在已經(jīng)解決了,上面的代碼都是正確的,只是我在頁(yè)面輸入的時(shí)候,有個(gè)地方?jīng)]看清楚,輸入錯(cuò)了,呵呵。。。。

          不過(guò)還是要感謝你,抽出自己寶貴時(shí)間。  回復(fù)  更多評(píng)論
            
          # re: JavaMail的簡(jiǎn)單實(shí)例 2007-08-30 10:08 | wyx
          No encoding, It's a vital defect  回復(fù)  更多評(píng)論
            
          # re: JavaMail的簡(jiǎn)單實(shí)例 2008-01-08 12:16 | asdf
          發(fā)關(guān)成功,但在郵箱里沒(méi)有這個(gè)郵件  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 清苑县| 安丘市| 应城市| 青神县| 普兰店市| 章丘市| 延川县| 旌德县| 汝州市| 荆州市| 阳谷县| 大邑县| 厦门市| 赤城县| 玉门市| 水城县| 杭锦旗| 隆尧县| 温泉县| 垫江县| 大宁县| 乃东县| 福安市| 大竹县| 伊春市| 佛教| 桂阳县| 临漳县| 邵阳市| 故城县| 上饶县| 达州市| 江孜县| 瑞丽市| 三原县| 塘沽区| 沁源县| 博乐市| 喜德县| 定安县| 铜鼓县|