一、设计内容
基于SMTP协议,编写程序模拟邮件系统收发邮件的运行过程。要求具有如下功能: 1、 用户能够注册,登录; 2、 用户能够注册; 3、 用户登录后 ? 查看并编辑用户注册信息; ? 可以发信给其它用户,可以连上公网,给公网任何邮箱发邮件(如QQ邮箱); ? 查看来信,对来信进行回复; ? 可以收取来信中的附件,并存储到计算机上;
二、所用到的知识
IDE:Eclipse 数据库:mysql 技术:Servlet+Jsp+mybatis+javamail 协议:SMTP实现邮件发送,POP3实现邮件收取
三、需求分析
模拟邮箱系统主要分为注册、登录、查看和更改个人注册信息、发送邮件、查看收件箱五大模块。用户注册并登录后,可查看个人注册信息、修改个人信息、绑定自己的公网邮箱后,可以向任意邮箱发送邮件、可以查看自己的收件箱
四、运行效果
1、登录与注册
输入用户名和密码进行登录。若密码错误则显示
或者注册新的用户名和密码
2、信息管理
登录后显示: 点击注册信息,可以填写或者更改个人信息
3、邮件发送与收取
发送邮件,可支持向公网所有邮箱发送邮件
五、部分核心代码
代码结构:
1、SendServlet.java(实现邮件发送)
public static void send_email(String toEmail,String subjects,String contents,String myaddress,String myauthenticator2) throws IOException, AddressException, MessagingException{
String to = toEmail;
String subject = subjects;
String content = contents;
String myaddress1 = myaddress;
String myauthenticator1 = myauthenticator2;
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.qq.com");
properties.put("mail.smtp.port", "25");
properties.put("mail.smtp.auth", "true");
Authenticator authenticatorTemp = new Email_Authenticator(myaddress1, myauthenticator1);
javax.mail.Session sendMailSession = javax.mail.Session.getDefaultInstance(properties, authenticatorTemp);
MimeMessage mailMessage = new MimeMessage(sendMailSession);
mailMessage.setFrom(new InternetAddress(myaddress1));
mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
mailMessage.setSubject(subject, "UTF-8");
mailMessage.setSentDate(new Date());
Multipart mainPart = new MimeMultipart();
BodyPart html = new MimeBodyPart();
html.setContent(content.trim(), "text/html; charset=utf-8");
mainPart.addBodyPart(html);
mailMessage.setContent(mainPart);
Transport.send(mailMessage);
}
2、ReceiveServlet.java(实现邮件收取)
String username = (String)request.getSession().getAttribute("username");
User user =getUserByUsername(username);
String address = user.getAddress();//邮箱地址
String authenticator = user.getAuthenticator();//邮箱授权码
String host = "pop.qq.com";//访问邮件服务器pop.qq.com
String protocol = "pop3";//使用pop3协议
Properties props = new Properties();
// 使用的协议(JavaMail规范要求)
props.setProperty("mail.store.protocal", protocol);
// 发件人的邮箱的 SMTP服务器地址
props.setProperty("mail.pop3.host", host);
// QQ邮箱,设置SSL加密(必须要加密)
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
} catch (GeneralSecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sf.setTrustAllHosts(true);
props.put("mail.pop3.ssl.enable", "true");
props.put("mail.pop3.ssl.socketFactory", sf);
// 获取默认session对象
Session session = Session.getDefaultInstance(props);
session.setDebug(false);
// 获取Store对象
Store store = null;
try {
store = session.getStore(protocol);
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 通过POP3服务器的登陆认证
try {
store.connect(host, address, authenticator);
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 获得收件箱
Folder folder = null;
try {
folder = store.getFolder("INBOX");
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//设置邮件状态
try {
folder.open(Folder.READ_WRITE);
} catch (MessagingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}// 打开收件箱
六、原理解析
1、如何实现邮件的发送
可以与QQ邮箱进行绑定并使用SMTP协议,SMTP协议是简单邮件传输协议,SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。 SMTP协议包括了连接建立、邮件传送和连接释放三个具体过程,建立的是TCP连接,SMTP协议调用TCP协议的25号端口进行监听。
2、如何实现邮件的读取
使用POP3协议,POP3协议提供了一种对邮件消息进行排队的标准机制,这样接收者以后才能检索邮件。 POP3协议也运行在TCP/IP之上,并且在默认端口110上进行监听。 将邮件的主题、发件人、发送时间、邮件大小、邮件正文分别存在数组中,通过Session传值,然后读取。
3、与公网邮箱的绑定
打开公网邮箱页面(如qq邮箱),打开邮箱的POP3/SMTP服务,获取其授权码,将公网邮箱号与授权码填入项目个人信息栏中就可以连接上公网。
七、资源下载与学习
1、源码文件
eclipse工程,导入项目,配置好数据库和相关设置就可以直接运行 计算机网络课程设计:基于SMTP协议的模拟邮件系统
2、设计报告
计算机网络课程设计报告
3、模块设计图(visio设计)
计算机网络课设 模拟邮件系统模块设计图
|