原理为:
首先将JavaMail连接属性保存在一个Properties类型的实例中,包括邮件主机名、是否需要认证等,然后根据此Properties的连接属性打开一个Session会话,接着在会话中创立邮件信息Message。Message包括邮件的标题、正文、发送人、接收人等。最后邮件通过一个Transport类的实例发送,Transport类首先连接服务器,然后发送,最后关闭连接。
1.Properties类
利用Properties类来创建一个Session对象。它的匹配字符串"mail.smtp.host",属性值是发送邮件的主机,如:
Properties props=newProperties();
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 packagesamples.javabean;2
3 importjava.util.Properties;4
5 importjavax.mail.AuthenticationFailedException;6 importjavax.mail.Message;7 importjavax.mail.Session;8 importjavax.mail.Transport;9 importjavax.mail.internet.InternetAddress;10 importjavax.mail.internet.MimeMessage;11
12 importcom.sun.xml.internal.messaging.saaj.packaging.mime.MessagingException;13
14
15 public classEmail {16 String host;17 String username;18 String password;19 String from;20 String to;21 String subject;22 String content;23
24 //在构造函数中初始化一些连接变量
25 publicEmail(){26 //qqsmtp服务器
27 host="smtp.qq.com";28 //QQ账号
29 username="*****";30 //QQ密码
31 password="****";32 from="****@qq.com";//QQ号邮箱地址
33 }34
35 publicString getHost() {36 returnhost;37 }38
39 public voidsetHost(String host) {40 this.host =host;41 }42
43 publicString getUsername() {44 returnusername;45 }46
47 public voidsetUsername(String username) {48 this.username =username;49 }50
51 publicString getPassword() {52 returnpassword;53 }54
55 public voidsetPassword(String password) {56 this.password =password;57 }58
59 publicString getFrom() {60 returnfrom;61 }62
63 public voidsetFrom(String from) {64 this.from =from;65 }66
67 publicString getTo() {68 returnto;69 }70
71 public voidsetTo(String to) {72 this.to =to;73 }74
75 publicString getSubject() {76 returnsubject;77 }78
79 public voidsetSubject(String subject) {80 this.subject =subject;81 }82
83 publicString getContent() {84 returncontent;85 }86
87 public voidsetContent(String content) {88 this.content =content;89 }90 //发送邮件
91 public booleansendMail(){92 Properties props;93 Session session;94 MimeMessage message;95 try{96 //存储连接参数
97 props=newProperties();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=newMimeMessage(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(newInternetAddress(from));114 //设置目的地址
115 InternetAddress address=newInternetAddress(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
2 pageEncoding="GB18030"%>
3
4
5
6
7
Insert title here8
9
10
11
12
13
14
15
16
17 Email JavaBean的类
18 发送人:
19 发送给:
20 标题:
21 服务器地址:
22 内容:
23
24 发送是否成功:
25
26
运行结果为: