博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaBean的实例--邮件发送JavaBean:基于Javax.mail
阅读量:4986 次
发布时间:2019-06-12

本文共 5576 字,大约阅读时间需要 18 分钟。

原理为:

  首先将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             //获得一个邮件session103             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  4  5  6 
7 Insert title here 8 9 10 <%--通过useBean标签初始化一个JavaBean --%>11
12 <%--通过setProperty标签设置JavaBean的属性. --%>13
14
15
16 <%--通过getProperty标签获取JavaBean的属性。 --%>17 Email JavaBean的类<%=email.getClass().getName() %>
18 发送人:
19 发送给:
20 标题:
21 服务器地址:
22 内容:
23 <%--调用sendMail方法发送邮件 --%>24 发送是否成功:<%=email.sendMail() %>25 26

运行结果为:

 

 

 

转载于:https://www.cnblogs.com/Jim-Huang/archive/2012/11/01/2749576.html

你可能感兴趣的文章
[Ramada] Build a Functional Pipeline with Ramda.js
查看>>
[Express] Level 4: Body-parser -- Delete
查看>>
c++模板分离式编译时无法解析外部符号
查看>>
SQL Server 2008 收缩日志 删除日志
查看>>
telnet命令 测试端口连接是否正常
查看>>
数据库 sharding
查看>>
Java中long和Long有什么区别 (转载)
查看>>
HDU4336 Card Collector(期望 状压 MinMax容斥)
查看>>
P2590 [ZJOI2008]树的统计
查看>>
09:矩阵乘法
查看>>
【第一周】进度条
查看>>
Hibernate 异常:“@OneToOne or @ManyToOne on XXX references an unknown entity: XXX”
查看>>
Activity之多启动图标
查看>>
UVa 11825 (状压DP) Hackers' Crackdown
查看>>
http://localhost:8080/默认访问root项目
查看>>
pseudo-class与pseudo-element的不同点与相同点
查看>>
怎么在SQL查询的结果里加行号?
查看>>
hdu1400Mondriaan's Dream
查看>>
数学题
查看>>
ios IAP 内购验证
查看>>