隨筆-57  評論-202  文章-17  trackbacks-0
                利用JavaMail的API可以快速的實現發(fā)送郵件的功能。下面是我使用的一個簡單的實例,實現了簡單的文本郵件的發(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 {

            
          /**
             * 調試工具
             
          */

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

            
          /**
             * SMTP服務器地址(默認本機)
             
          */

            
          private String smtp = "127.0.0.1";

            
          /**
             * 默認構造函數
             
          */

            
          private MailAgent() {}

            
          /**
             * 構造函數
             * @param smtp SMTP服務器地址
             
          */

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


            
          /**
             * 唯一代理實例
             
          */

            
          private static MailAgent agent;

            
          /**
             * 獲取代理實例
             * @return 代理實例
             
          */

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

              
          return agent;
            }


            
          /**
             * 獲取代理實例
             * @param smtp SMTP服務器地址
             * @return 代理實例
             
          */

            
          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 郵件標題
             * @param content 郵件內容
             * @throws MessagingException 郵件發(fā)送錯誤
             
          */

            
          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) 評論(7)  編輯  收藏 所屬分類: Java

          評論:
          # 關于JavaMail的問題(第一部分) 2005-08-05 17:10 | kk
          我寫了個JavaMail的簡單實例 ,程序運行的時候,沒問題,就是發(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>  回復  更多評論
            
          # re: JavaMail的簡單實例(第二部分) 2005-08-05 17:11 | kk
          ActionForm類

          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類

          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類

          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) {


          //郵件服務器
          String host = "127.0.0.1";
          //發(fā)送方的郵件地址
          String to = toName;
          //來自方的郵件地址
          String from = fromName;
          //發(fā)送主題
          String subject = subjectText;
          //發(fā)送內容!
          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();
          }

          }
          }  回復  更多評論
            
          # re: JavaMail的簡單實例(第三部分) 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ā)送成功,但是郵箱里收不到郵件。

          我在本上建的郵件服務器。用的是CMailServer,郵件服務器配置沒問題的,并且試過的。

          我是參照下面的這個程序,改的。


          import java.util.*;

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


          public class sendmail {

          public static void main(String[] args) {

          //郵件服務器
          String host = "127.0.0.1";
          //發(fā)送方的郵件地址
          String to = "admin@620.com";
          //來自方的郵件地址
          String from = "missvrc@yahoo.com.cn";
          //發(fā)送主題
          String subject = "JSP Rules!";
          //發(fā)送內容!
          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();
          }
          }
          }

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

          謝謝了,高手。  回復  更多評論
            
          # re: JavaMail的簡單實例 2005-08-08 14:25 | 小米
          對不起,最近很忙,很少時間上來看看。其實我覺得這樣發(fā)評論的方式來問問題是不太好的,因為一般來說不可能時時上來看自己的博客。我看了下你的問題,覺得有下面兩點想問問:
          1.Action中是否正確的收到了來到View層的參數值;
          2.郵件沒有發(fā)送出去,有沒有返回什么錯誤信息?  回復  更多評論
            
          # re: JavaMail的簡單實例 2005-08-08 15:36 | kk
          你好,這個問題我現在已經解決了,上面的代碼都是正確的,只是我在頁面輸入的時候,有個地方沒看清楚,輸入錯了,呵呵。。。。

          不過還是要感謝你,抽出自己寶貴時間。  回復  更多評論
            
          # re: JavaMail的簡單實例 2007-08-30 10:08 | wyx
          No encoding, It's a vital defect  回復  更多評論
            
          # re: JavaMail的簡單實例 2008-01-08 12:16 | asdf
          發(fā)關成功,但在郵箱里沒有這個郵件  回復  更多評論
            
          主站蜘蛛池模板: 石泉县| 义乌市| 丽水市| 高尔夫| 普安县| 离岛区| 南充市| 余干县| 五常市| 贵德县| 鹤山市| 成武县| 洞口县| 镇沅| 遂平县| 拜泉县| 开平市| 玉门市| 白城市| 建始县| 榆中县| 右玉县| 怀远县| 宁陵县| 洞口县| 渝中区| 秦安县| 边坝县| 平利县| 西乌| 长武县| 同心县| 大方县| 莱阳市| 寿光市| 河西区| 东兰县| 济阳县| 尼玛县| 连城县| 金塔县|