第四章 JavaMail和Servlet
发送邮件的工作原理:
1:客户端把邮件发送给-------->发信服务器---->发送到目的地
2:发信服务器是各大电子邮箱的服务器。一般在前面加上smtp。比如:
smtp.sina.com,smtp.163.com,smtp.126.com等
3:只要去申请一个免费的电子邮箱,就可以获得一个发信服务器
发送邮件必须需要两个包:
mail,activation包。这两个包可以在
jakarta-tomcat-4.1.31\common\lib下面找到。一定要复制到
web模块下面WebMod\WEB-INF\lib下面
发送邮件需要导入的包:
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
发送邮件的涉及到的类
A:Properties类:
用来指定发信服务器,和使用发信服务器时是否需要身份验证:
Properties props = new Properties();//创建一个Properties的实例
props.put("mail.smtp.host", "smtp.sina.com");//设置发信服务器
props.put("mail.smtp.auth", "true");//要经过身份验证
B:Session类,会话类。要发邮件必须要创建一个Session类
Session session = Session.getInstance(props);
C:MimeMessage类.用来指定发送邮件的标题,文本,等
MimeMessage message = new MimeMessage(session);//得到MimeMessage的实例
message.setFrom(new InternetAddress("chengyuqing110@sina.com"));//设置发件人
message.addRecipients(Message.RecipientType.TO,"chengyu-qing@163.com,chengyu-qing@tom.com"); //设置收件人,可以同时指定多个收件人
message.setSubject("主题");//设置邮件的主题
message.setText("内容文本");//设置邮件的内容文本
D:Transport类。用来把邮件进行实际的发送
Transport transport = session.getTransport("smtp");//得到Transport类的一个实例
transport.connect(host, username, password);//连接发信服务器
transport.sendMessage(message, message.getAllRecipients());//发送邮件
transport.close();//发送之后关闭
说明:
1:选择发信人邮箱一定要是发信服务器里面申请的邮箱
比如:
如果发信服务器-------->smtp.sina.com
则发信人邮箱一定要是sina的邮箱,否则会出现错误
发送带有附件的邮件
具备知识:
要发送附件,必须有Multipart类。这个类用来负责管理附件,
一个Multipart类同多个MimeBodyPart构成。每一个MimeBodyPart就代表一个附件
如果要发送附件,则"文本"也代表一个附件。文本是附件的第一个MimeBodyPart
String host = "smtp.sina.com";
String from = "chengyuqing110@sina.com";
String to = "chengyu-qing@163.com";
String username = "chengyuqing110";
String password = "12345678";
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
Session session = Session.getInstance(props);
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipients(Message.RecipientType.TO,to);
message.setSubject("这是试验");
//===设置附件的正文=======================================
MimeBodyPart bp1=new MimeBodyPart();
bp1.setText("正文");
//===============设置附件==================================
MimeBodyPart bp2=new MimeBodyPart();
bp2.setDataHandler(new DataHandler(new FileDataSource("c:\\过滤器.ppt")));
bp2.setFileName(MimeUtility.encodeText("c:\\过滤器.ppt")); //处理中文
//================================加入附件里面=======================
Multipart mp=new MimeMultipart();
mp.addBodyPart(bp1);
mp.addBodyPart(bp2);
message.setContent(mp);
//==================================================================
Transport transport = session.getTransport("smtp");
transport.connect(host, username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
//====================================================================
收邮件
String Uid =request.getParameter("txtUid");//邮件服务器的用户名
String Pwd =request.getParameter("txtPwd");//邮件服务器的密码
String Host =request.getParameter("txtHost");//邮件服务器的主机名,一般是pop.sina.com或pop.163.com
Properties props = new Properties();
Session Getsession=Session.getDefaultInstance(props);//建立session
Store store = Getsession.getStore("pop3");
store.connect(Host,Uid,Pwd);
Folder folder=store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message[] message=folder.getMessages();
message[i].getSubject()//得到邮件的主题
message[i].getSentDate().toLocaleString()//得到发信日期
Multipart p=(Multipart)message[i].getContent(); //得到一个Multipart,去读出附件
p.getBodyPart(0).getContent().toString();得到邮件的文本
//===========================================================================
评论