随笔-57  评论-202  文章-17  trackbacks-0
      利用JavaMail的API可以快速的实现发送邮件的功能。下面是我使用的一个简单的实例,实现了简单的文本邮件的发送。

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

import org.apache.log4j.
*;

/**
 * <p>Title: 发送邮件程序</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;
  }


  
/**
   * 发送文本邮件
   * @param from 发送者地址
   * @param to 接收者地址
   * @param title 邮件标题
   * @param content 邮件内容
   * @throws MessagingException 邮件发送错误
   
*/

  
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 小米 阅读(2206) 评论(7)  编辑  收藏 所属分类: Java

评论:
# 关于JavaMail的问题(第一部分) 2005-08-05 17:10 | kk
我写了个JavaMail的简单实例 ,程序运行的时候,没问题,就是发信发不到邮箱里,以下是我的代码

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>
发送邮件成功!
</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";
//发送方的邮件地址
String to = toName;
//来自方的邮件地址
String from = fromName;
//发送主题
String subject = subjectText;
//发送内容!
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

----------------------------------------------
提交表单后,显示的信息,邮件发送成功,但是邮箱里收不到邮件。

我在本上建的邮件服务器。用的是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";
//发送方的邮件地址
String to = "admin@620.com";
//来自方的邮件地址
String from = "missvrc@yahoo.com.cn";
//发送主题
String subject = "JSP Rules!";
//发送内容!
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();
}
}
}

运行上面这个程序,往的服务器上发送没有问题,但改成struts后,就不知道为什么了。

谢谢了,高手。  回复  更多评论
  
# re: JavaMail的简单实例 2005-08-08 14:25 | 小米
对不起,最近很忙,很少时间上来看看。其实我觉得这样发评论的方式来问问题是不太好的,因为一般来说不可能时时上来看自己的博客。我看了下你的问题,觉得有下面两点想问问:
1.Action中是否正确的收到了来到View层的参数值;
2.邮件没有发送出去,有没有返回什么错误信息?  回复  更多评论
  
# 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
发关成功,但在邮箱里没有这个邮件  回复  更多评论
  

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


网站导航: