JavaMail使用.docx
- 文档编号:24640334
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:31
- 大小:25.96KB
JavaMail使用.docx
《JavaMail使用.docx》由会员分享,可在线阅读,更多相关《JavaMail使用.docx(31页珍藏版)》请在冰豆网上搜索。
JavaMail使用
JavaMail使用
在Web应用程序的开发中,经常会有处理邮件的需求,在J2EE中提供了邮件处理的API,使用这些API,可以非常方便地接收和发送邮件。
1、邮件协议简介
SMTP(SimpleMialTransferProtocol)即简单邮件传输协议,它提供了一种可靠而且有效的电子邮件传输协议,SMTP主要用于系统之间传递邮件信息,而且还可以提供来信有关的通知服务。
在发送电子邮件的时候,可以选择这个协议,在JavaMail中提供了对SMTP协议的支持。
POP(PostOfficeProtocol)即邮局协议,而POP3则是POP协议的第三个版本,这个协议规定了用户连接到邮件服务器和接收邮件的规则,是Internet电子邮件的第一个离线协议标准。
简单说POP3就是在接收电子邮件的简单通信协议,用户在接收邮件的时候可以选择使用这个协议,在JavaMail中同样支持这个电子邮件协议。
2、开发环境的配置
拷贝相关jar包到lib目录下,或配置在classpath中即可
3、一个简单的例子
为了方便程序的演示,提供了一个测试邮箱,邮箱的地址为jjqibmbld@,密码为123。
这个邮箱的SMTP服务器地址为,POP3服务器地址为。
以下程序演示的是用上面的邮箱向jjq@发送邮件的例子(TestJavaMail.java)
packagecom.fendou;
importjava.util.Properties;
importjavax.mail.Authenticator;
importjavax.mail.Message;
importjavax.mail.PasswordAuthentication;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeMessage;
classMyAuthenticatorextendsAuthenticator{
Stringname;
Stringpassword;
publicMyAuthenticator(Stringname,Stringpassword){
this.name=name;
this.password=password;
this.getPasswordAuthentication();
}
@Override
protectedPasswordAuthenticationgetPasswordAuthentication(){
returnnewPasswordAuthentication(name,password);
}
}
publicclassTestJavaMail{
publicstaticvoidmain(String[]args)throwsException{
//发送邮箱的用户名和密码
Stringname="jjqibmbld";
Stringpassword="123456";
Propertiesprops=System.getProperties();
//设置smtp主机
props.put("mail.smtp.host","");
//设置smtp验证属性
props.put("mail.smtp.auth","true");
MyAuthenticatorauth=newMyAuthenticator(name,password);
//获得邮件会话对象
Sessionsession=Session.getDefaultInstance(props,auth);
//创建MIME邮件对象
MimeMessagemessage=newMimeMessage(session);
//设置邮件发送人
message.setFrom(newInternetAddress("jjqibmbld@"));
//设置邮件收件人
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("jjq@"));
//设置邮件主题
message.setSubject("我的第一封测试邮件");
//设置邮件正文
message.setText("我的邮件内容");
//创建SMTP邮件协议发送对象
Transporttransport=session.getTransport("smtp");
//取得与邮件服务器的连接
transport.connect((String)props.get("mail.smtp.host"),name,password);
//通过邮件服务器发送邮件
transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO));
transport.close();
}
}
那么如何发送带有附件的E-mail呢,如下例子(TestJavaMailAttachment.java)
packagecom.fendou1;
importjava.util.Properties;
importjavax.activation.DataHandler;
importjavax.activation.FileDataSource;
importjavax.mail.Authenticator;
importjavax.mail.BodyPart;
importjavax.mail.Message;
importjavax.mail.PasswordAuthentication;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeBodyPart;
importjavax.mail.internet.MimeMessage;
importjavax.mail.internet.MimeMultipart;
classMyAuthenticatorextendsAuthenticator{
Stringname;
Stringpassword;
publicMyAuthenticator(Stringname,Stringpassword){
this.name=name;
this.password=password;
this.getPasswordAuthentication();
}
@Override
protectedPasswordAuthenticationgetPasswordAuthentication(){
returnnewPasswordAuthentication(name,password);
}
}
publicclassTestJavaMailAttachment{
publicstaticvoidmain(String[]args)throwsException{
//发送邮箱的用户名和密码
Stringname="jjqibmbld";
Stringpassword="123";
Propertiesprops=System.getProperties();
//设置smtp主机
props.put("mail.smtp.host","");
//设置smtp验证属性
props.put("mail.smtp.auth","true");
MyAuthenticatorauth=newMyAuthenticator(name,password);
//获得邮件会话对象
Sessionsession=Session.getDefaultInstance(props,auth);
//创建MIME邮件对象
MimeMessagemessage=newMimeMessage(session);
//设置邮件发送人
message.setFrom(newInternetAddress("jjqibmbld@"));
//设置邮件收件人
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("jjq@"));
//设置邮件主题
message.setSubject("我的第一封测试邮件");
///////////////////////////////////
//以下是改动内容
//设置邮件正文
//message.setText("我的邮件内容");
//设置上传的正文
BodyPartbpContent=newMimeBodyPart();
bpContent.setText("jjq");
//设置上传的文件
BodyPartbpAttachment=newMimeBodyPart();
FileDataSourcefileds=newFileDataSource("c:
\\1.jpeg");
bpAttachment.setDataHandler(newDataHandler(fileds));
bpAttachment.setFileName("1.jpeg");
MimeMultipartmp=newMimeMultipart();
mp.addBodyPart(bpContent);
mp.addBodyPart(bpAttachment);
message.setContent(mp);
message.saveChanges();
///////////////////////////
//创建SMTP邮件协议发送对象
Transporttransport=session.getTransport("smtp");
//取得与邮件服务器的连接
transport.connect((String)props.get("mail.smtp.host"),name,password);
//通过邮件服务器发送邮件
transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO));
transport.close();
}
}
4、结合web项目,制作一个发送文本邮件的例子(主要对上述代码进行封装)
此程序,用户可以在jsp页面上输入要发送邮件的内容和地址,通过表单把邮件的内容提交给一个Servlet处理,这个Servlet调用一个JavaBean进行邮件发送。
为了方便演示,默认发送邮件的地址为jjqibmbld@
JSP代码如下(SendTextMail.jsp)
<%@pagelanguage="java"import="java.util.*"pageEncoding="gb2312"%>
使用JavaMail发送文本邮件示例:
收信人:
发信人:
主题:
内容:
Servlet代码如下(SendTextMail.java)
packageservlets;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importbeans.TextMail;
publicclassSendTextMailextendsHttpServlet{
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsIOException,ServletException{
//设置是新浪邮箱的SMTP地址
Stringhost="";
//设置邮箱账户名称
Stringname="jjqibmbld";
//设置邮箱帐号密码
Stringpassword="123";
//设置邮件内容
TextMailmail=newTextMail(host,name,password);
mail.setFrom(request.getParameter("from"));
mail.setTo(request.getParameter("to"));
mail.setSubject(request.getParameter("subject"));
mail.setText(request.getParameter("content"));
response.setContentType("text/html");
response.setCharacterEncoding("gb2312");
PrintWriterout=response.getWriter();
//发送邮件
if(mail.send())
out.print("
");
else
out.print("
");
}
}
JavaBean的代码如下(TextMail.java)
packagebeans;
importjava.util.Properties;
importjavax.mail.BodyPart;
importjavax.mail.Message;
importjavax.mail.MessagingException;
importjavax.mail.NoSuchProviderException;
importjavax.mail.Session;
importjavax.mail.Transport;
importjavax.mail.internet.AddressException;
importjavax.mail.internet.InternetAddress;
importjavax.mail.internet.MimeMessage;
/**
*功能:
向指定的邮箱地址发送一封文本邮件
*/
publicclassTextMail{
privateMimeMessagemessage;
privatePropertiesprops;
privateSessionsession;
privateStringname="";
privateStringpassword="";
/**
*完成发送邮件的初始化工作
*@paramhost
*/
publicTextMail(Stringhost,Stringname,Stringpassword)
{
this.name=name;
this.password=password;
props=System.getProperties();
//设置SMTP主机
props.put("mail.smtp.host",host);
//设置SMTP验证属性
props.put("mail.smtp.auth","true");
//获得邮件会话对象
MyAuthenticatorauth=newMyAuthenticator(name,password);
session=Session.getDefaultInstance(props,auth);
//创建MIME邮件对象
message=newMimeMessage(session);
}
/**
*设置邮件发送人
*@paramfrom
*/
publicvoidsetFrom(Stringfrom)
{
try{
message.setFrom(newInternetAddress(from));
}catch(AddressExceptione){
e.printStackTrace();
}catch(MessagingExceptione){
e.printStackTrace();
}
}
/**
*设置邮件收件人
*@paramto
*/
publicvoidsetTo(Stringto)
{
try{
message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
}catch(AddressExceptione){
e.printStackTrace();
}catch(MessagingExceptione){
e.printStackTrace();
}
}
/**
*设置邮件主题
*@paramsubject
*/
publicvoidsetSubject(Stringsubject)
{
try{
message.setSubject(subject);
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*设置邮件正文
*@paramtext
*/
publicvoidsetText(Stringtext){
try{
message.setText(text);
}catch(MessagingExceptione){
e.printStackTrace();
}
}
/**
*发送邮件
*@return
*/
publicbooleansend(){
try{
//创建SMTP邮件协议发送对象
Transporttransport=session.getTransport("smtp");
//取得与邮件服务器的连接
transport.connect((String)props.get("mail.smtp.host"),name,password);
//通过邮件服务器发送邮件
transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO));
transport.close();
returntrue;
}catch(NoSuchProviderExceptione){
e.printStackTrace();
returnfalse;
}catch(MessagingExceptione){
e.printStackTrace();
returnfalse;
}
}
}
其中用到一个辅助类来验证stmp的合法性,其代码如下(MyAuthenticator.java)
packagebeans;
importjavax.mail.Authenticator;
importjavax.mail.PasswordAuthentication;
publicclassMyAuthenticatorextendsAuthenticator{
Stringname;
Stringpassword;
publicMyAuthenticator(Stringname,Stringpassword){
this.name=name;
this.password=password;
getPasswordAuthentication();
}
protectedPasswordAuthenticationget
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JavaMail 使用