JavaBean的实例--邮件发送JavaBean:基于Javax.mail
原理为:
首先将JavaMail连接属性保存在一个Properties类型的实例中,包括邮件主机名、是否需要认证等,然后根据此Properties的连接属性打开一个Session会话,接着在会话中创立邮件信息Message。Message包括邮件的标题、正文、发送人、接收人等。最后邮件通过一个Transport类的实例发送,Transport类首先连接服务器,然后发送,最后关闭连接。
1.Properties类
利用Properties类来创建一个Session对象。它的匹配字符串"mail.smtp.host",属性值是发送邮件的主机,如:
Properties props=new Properties(); props.put("mail.smtp.host","smtp.abcd.com");//可以换上你的smtp主机名
2.Session
Session类代表一个邮件会话。每个基于mail的应用程序至少有一个Session,也可以有任意多个。Session对象需要获得处理邮件的SMTP服务器。可以通过用一个Properties对象传递连接信息,来创建一个Session。


Session sendMailSession; sendMailSession=Session.getInstance(props,null);
3.Transport类
邮件既可以被发送也可以被接受。JavaMail提供了两个不同的类来完成这两个功能:Transport和Store。Transport用来发送信息,而Store用来接收信息。发送邮件只需要用到Transport对象,不需要用到Store类。
构造方法为:

构造例子:
Transport transport;
tranport=sendMailSession.getTransport("smtp");
JavaMail的Session对象提供了getTransport方法初始化Transport,初始化时类型为字符串的参数声明了对象所要使用的协议,如”smtp”。JavaMail内置了很多协议的实现方法,包括IMAP、SMTP和POP3。
4.Message
Message对象将存储世纪发送的电子邮件信息。Message对象被作为一个MimeMessage来创建,并且需要指明选择哪一个JavaMail的session。
Message newMessage=new MimeMessage(sendMailSession);
下面的实例是通过一个QQ发送一个邮件到另一个QQ:
发送邮件的JavaBean为:
1 package samples.javabean; 2 3 import java.util.Properties; 4 5 import javax.mail.AuthenticationFailedException; 6 import javax.mail.Message; 7 import javax.mail.Session; 8 import javax.mail.Transport; 9 import javax.mail.internet.InternetAddress; 10 import javax.mail.internet.MimeMessage; 11 12 import com.sun.xml.internal.messaging.saaj.packaging.mime.MessagingException; 13 14 15 public class Email { 16 String host; 17 String username; 18 String password; 19 String from; 20 String to; 21 String subject; 22 String content; 23 24 //在构造函数中初始化一些连接变量 25 public Email(){ 26 // qqsmtp服务器 27 host="smtp.qq.com"; 28 // QQ账号 29 username="*****"; 30 // QQ密码 31 password="****"; 32 from="****@qq.com";//QQ号邮箱地址 33 } 34 35 public String getHost() { 36 return host; 37 } 38 39 public void setHost(String host) { 40 this.host = host; 41 } 42 43 public String getUsername() { 44 return username; 45 } 46 47 public void setUsername(String username) { 48 this.username = username; 49 } 50 51 public String getPassword() { 52 return password; 53 } 54 55 public void setPassword(String password) { 56 this.password = password; 57 } 58 59 public String getFrom() { 60 return from; 61 } 62 63 public void setFrom(String from) { 64 this.from = from; 65 } 66 67 public String getTo() { 68 return to; 69 } 70 71 public void setTo(String to) { 72 this.to = to; 73 } 74 75 public String getSubject() { 76 return subject; 77 } 78 79 public void setSubject(String subject) { 80 this.subject = subject; 81 } 82 83 public String getContent() { 84 return content; 85 } 86 87 public void setContent(String content) { 88 this.content = content; 89 } 90 //发送邮件 91 public boolean sendMail(){ 92 Properties props; 93 Session session; 94 MimeMessage message; 95 try{ 96 //存储连接参数 97 props=new Properties(); 98 //smtp主机 99 props.put("mail.smtp.host", host); 100 //需要身份验证 101 props.put("mail.smtp.auth", "true"); 102 //获得一个邮件session 103 session=Session.getDefaultInstance(props,null); 104 //新建一个邮件信息 105 message=new MimeMessage(session); 106 if(from==null||from==""){ 107 throw new Exception("Error Email Address in From."); 108 } 109 if(to==null||to==""){ 110 throw new Exception("Error Email Address in To."); 111 } 112 //设置源地址 113 message.setFrom(new InternetAddress(from)); 114 //设置目的地址 115 InternetAddress address=new InternetAddress(to); 116 message.addRecipient(Message.RecipientType.TO, address); 117 //设置主题 118 message.setSubject(subject); 119 //邮件内容 120 message.setText("123"); 121 message.saveChanges(); 122 // 设置邮件传输 123 Transport transport=session.getTransport("smtp"); 124 // 连接主机 125 transport.connect(username, password); 126 // 发送邮件 127 transport.sendMessage(message, message.getAllRecipients()); 128 // 关闭传输 129 transport.close(); 130 return true; 131 }catch(AuthenticationFailedException e1){ 132 e1.printStackTrace(); 133 return false; 134 }catch(MessagingException e2){ 135 e2.printStackTrace(); 136 return false; 137 }catch(Exception e3){ 138 e3.printStackTrace(); 139 return false; 140 } 141 } 142 }
接着在jsp中调用这个JavaBean:
1 <%@ page language="java" contentType="text/html; charset=GB18030" 2 pageEncoding="GB18030"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <%--通过useBean标签初始化一个JavaBean --%> 11 <jsp:useBean id="email" class="samples.javabean.Email"scope="page"></jsp:useBean> 12 <%--通过setProperty标签设置JavaBean的属性. --%> 13 <jsp:setProperty property="to" name="email" value="330647881@qq.com"/> 14 <jsp:setProperty property="subject" name="email" value="Send Email"/> 15 <jsp:setProperty property="content" name="email" value="Test Content"/> 16 <%--通过getProperty标签获取JavaBean的属性。 --%> 17 Email JavaBean的类<%=email.getClass().getName() %><br> 18 发送人:<jsp:getProperty property="from" name="email"/><br> 19 发送给:<jsp:getProperty property="to" name="email"/><br> 20 标题:<jsp:getProperty property="subject" name="email"/><br> 21 服务器地址:<jsp:getProperty property="host" name="email"/><br> 22 内容:<jsp:getProperty property="content" name="email"/><br> 23 <%--调用sendMail方法发送邮件 --%> 24 发送是否成功:<%=email.sendMail() %> 25 </body> 26 </html>
运行结果为:



浙公网安备 33010602011771号