说明:1。本实例需要用到javamail-1.4.3和jaf-1_0_2-upd2。附件中有它们的下载,关于它们的介绍可以去google一下。
2。使用javaMail需要一个邮件服务器,我使用的是cmail,它很小,试用版的可以用于学习,按装之前请确保你装了IIS服务,因为它自带有一个.NET写的邮件服务。在下面附件中可以下载。
一:简单的邮件发送
<form action="SendText" method="post">
<table border="0" align="center" width="80%">
<tr>
<td align="right">From:</td>
<td>
<input type="text" name="from">
</td>
</tr>
<tr>
<td align="right">To:</td>
<td>
<input type="text" name="to">
</td>
</tr>
<tr>
<td align="right">Subject:</td>
<td>
<input type="text" name="subject">
</td>
</tr>
<tr>
<td align="right">Context:</td>
<td>
<textarea rows="5" cols="30" name="context"></textarea>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" value="发送">
</td>
</tr>
</table>
</form>
Servlet如下:
/**
* 使用javaMail发送简单的邮件
*
* @author 张明学
*
*/
public class SendText extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 7107039219761248959L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("GBK");
String from = request.getParameter("from");
String to = request.getParameter("to");
String subject = request.getParameter("subject");
String context = request.getParameter("context");
// 发送的邮件服务器的地址
String mailServer = "PC200904071715";//按装cmail就是你的机器名
Properties prop = System.getProperties();
// 设置邮件的传输协议
prop.put("mail.transport.protocal", "smtp");
prop.put("mail.smtp.host", mailServer);
prop.put("mail.smtp.port", "25");
// 是否通过验证;一般为true,false不能通过验证
prop.put("mail.smtp.auth", "false");
// 建立邮件发送的连接
// Session 类定义了一个基本邮件会话(session)。所有其它类都是经由这个session 才得以生效。
// Session 对象用 java.util.Properties 对象获取信息,如邮件服务器、用户名、密码及整个应用程序中共享的其它信息。
// Session类的构造器是私有的(private)。您可以得到单个缺省 session,它能用 getDefaultInstance() 方法被共享:
// 或者,您还可以用 getInstance() 创建一个独立的 session:
Session jmailSession = Session.getDefaultInstance(prop,
new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//需要邮件服务器的管理员账号与密码
return new PasswordAuthentication("admin", "");
}
});
// 创建要发送的消息,这由 Message 类来完成。因为 Message 是个抽象类,必需用一个子类,多数情况下为 javax.mail.internet.MimeMessage。
Message jmailMessage = new MimeMessage(jmailSession);
// 设置相关的邮件属性
try {
// Address 确定信件地址,Address是个抽象类,用的是javax.mail.internet.InternetAddress
// 若希望名字紧挨着电子邮件显示,也可以把它传递给构造器:jmailMessage.setFrom(new InternetAddress(from,"admin"));
jmailMessage.setFrom(new InternetAddress(from));
/**
* javax.mail.Message.RecipientType.TO:一对一的发送
* javax.mail.Message.RecipientType.CC:抄送
* javax.mail.Message.RecipientType.BCC:秘密抄送
*/
jmailMessage.setRecipient(javax.mail.Message.RecipientType.TO,new InternetAddress(to));
// 用setSubject()方法设置 subject(主题)
jmailMessage.setSubject(subject);
jmailMessage.setSentDate(new Date());
// 使用 MimeMessage,而且消息是纯文本格式,您就可以用 setText() 方法,它只需要代表实际内容的参数,( MIME 类型缺省为 text/plain)
jmailMessage.setText(context);
// 邮件发送
// 消息发送的最后一部分是使用Transport类。这个类用协议指定的语言发送消息(通常是 SMTP)。它是抽象类,仅调用静态send()方法
Transport.send(jmailMessage);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
// request.getRequestDispatcher("ok.jsp").forward(request, response);
response.sendRedirect("ok.jsp");
}
}
HTML格式的邮件发送:
<form action="SendHtml" method="post">
<table border="0" align="center" width="80%">
<tr>
<td align="right">From:</td>
<td>
<input type="text" name="from">
</td>
</tr>
<tr>
<td align="right">To:</td>
<td>
<input type="text" name="to">
</td>
</tr>
<tr>
<td align="right">Subject:</td>
<td>
<input type="text" name="subject">
</td>
</tr>
<tr>
<td align="right">Context:</td>
<td>
<textarea rows="5" cols="30" name="context"></textarea>
</td>
</tr>
<tr>
<td align="right">格式:</td>
<td>
<select name="type">
<option value="text/plain">文本格式</option>
<option value="text/html">HTML格式</option>
</select>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" value="发送">
</td>
</tr>
</table>
</form>
Servlet如下:
public class SendHtml extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = -8794915632056125770L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("GBK");
String from = request.getParameter("from");// 发件人
String to = request.getParameter("to");// 收件人
String subject = request.getParameter("subject");// 主题
String context = request.getParameter("context");// 内容
String type = request.getParameter("type");
// 邮件服务器的地址
String mailServer = "PC200904071715";
// 设置邮件的传输协议信息
Properties transProp = System.getProperties();
// 邮件服务器地址
transProp.put("mail.smtp.host", mailServer);
// 邮件传输协议中的接收协议:smtp
transProp.put("mail.transport.protocol", "smtp");
// 是否通过验证
transProp.put("mail.smtp.auth", "true");
// 服务器端口
transProp.put("mail.smtp.port", "25");// 默认端口25
// 建立邮件发送的连接
javax.mail.Session mailSession = javax.mail.Session.getDefaultInstance(
transProp, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("admin", "");
}
});
// 邮件信息载体
javax.mail.Message mailMessage = new javax.mail.internet.MimeMessage(mailSession);
try {
// 设置发件人
mailMessage.setFrom(new InternetAddress(from));
// 设置收件人
mailMessage.setRecipient(RecipientType.TO, new InternetAddress(to));
// 多个收件人设置
// InternetAddress[] addresss = new InternetAddress[]{new InternetAddress(to)};
// mailMessage.setRecipients(RecipientType.TO, addresss);
// 设置主题
mailMessage.setSubject(subject);
// 发送时间
mailMessage.setSentDate(new Date());
Multipart mp = new MimeMultipart();
MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(context, type+";charset=GB2312");
mp.addBodyPart(mbp);
mailMessage.setContent(mp);
javax.mail.Transport.send(mailMessage);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
response.sendRedirect("ok.jsp");
}
}