基于Javamail的邮件收发系统-使用说明
- 格式:doc
- 大小:473.50 KB
- 文档页数:6
【优秀文档】基于Java Mail的电子邮件收发系统毕业设
计.doc
1、••错误!未定义书签。
••…错误!未定义书签。
2••…错误!未定义书签。
666779910••错误!未定义书签。
12131415第1章概述1」讨论H的和意义1.2国内外进展趋势和现状1.3系统特点第2章相关技术和工具简介2.1Swing简介2.2JavaMail简介2.3Java平台简介2.4Eclipse简介第3章系统需求分析和总体设计.3.1用户对电子邮件系统的需求3.2产殆可行性分析3.3系统总体设计_331电子邮件系统的功能・3.3.2电子邮件收发过程・•・3.3.3服务器参数的设置第4章具体设计4.1登录功能的设计错误!未定义书签。
4.2发送邮件的设计错误!未定义书签。
4.3接收邮件的设计错误!未定义书签。
4.4邮件管理的设
2、计错误!未定义书签。
第5章系统功能的编码实现错误!未定义书签。
5.1用户登录界而的实现错误!未定义书签。
5.2主界面的实现195.3邮件配置界面的实现205.4发送邮件界面的实现215.5接收邮件界面的实现错误!未定义书签。
第6章系统实现的功能测试错误!未定义书签。
6.1登录测试错误!未定义书签。
6.2发送测试错误!未定义书签。
6.3接收邮件测试错误!未定义书签。
6.4查看邮件测试错误!未定义书签。
6.5删除邮件测试错误!未定义书签。
第7章总结错误!未定义书签。
第1页。
1.邮件1.1 邮件组成部分如果是新邮件就获取,并解析它;邮件是由邮件头和邮件体组成,在邮件头中主要包含了收件人、发件人、主题等等基础信息。
而邮件体中就包括了邮件的正文和附件等内容信息。
下图就是pop3协议下,邮件的大致内容。
1.2 发送邮件(带附件、正文带图片)QQ邮箱为例:需要QQ账号和QQ登录第三方客户端时,密码框的“授权码”(相当于密码)授权码如下获取:代码如下:public class JavaMailboxAttachment {private MimeMessage message;private Session session;private String mailHost = "";private String mailAuth = "";private String mailPort = "";private String sender_username = "";private String sender_password = "";//定义一个Properties 用于存放信息private Properties properties = new Properties();//-------------------------------发信箱---------------------------------------------public JavaMailboxAttachment(String email_type) {try {properties.put("mail.smtp.host",""); //发送邮件服务器//端口号,QQ邮箱给出了两个端口,但是另一个我一直使用不了,所以就给出这一个587properties.put("mail.smtp.port", "587"); //发送邮件端口号properties.put("mail.smtp.auth", "true");// 此处填写你的账号properties.put("er", "xxxxxxxxx@");// 此处的密码就是前面说的16位STMP授权码properties.put("mail.password", "xxxxxxxxxxxxxxxx");this.mailHost = properties.getProperty("mail.smtp.host");this.mailAuth = properties.getProperty("mail.smtp.auth");this.mailPort = properties.getProperty("mail.smtp.port");this.sender_username = properties.getProperty("er");this.sender_password = properties.getProperty("mail.password");} catch (Exception e) {e.printStackTrace();}// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName = properties.getProperty("er");String password = properties.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};session = Session.getInstance(properties,authenticator); //用户验证message = new MimeMessage(session); //将验证成功的session信息,创建一个message 对象。
JavaMail组件实现邮件功能实现邮件收发功能需要3个jar包:1.JavaMail组件保内的mail.jar和smtp.jar包2.JAF组件包⾥的activition.jar。
复制到WebRoot/WEB-INF/lib⽬录下。
⼀、编写index.jsp页⾯,具体代码如下:1 <%@ page language="java" contentType="text/html; charset=gb2312"2 pageEncoding="gb2312"%>3<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">4<html>5<head>6<meta http-equiv="Content-Type" content="text/html; charset=gb2312">7<title>welcome</title>8</head>9<body>10<form action="sendMail.jsp" method="post" name="form1">11<table width="75" border="0" align="center" cellspacing="1"12 bgcolor="#006600" class="black">13<tr bgcolor="#ffffff">14<td width="24%">收信⼈地址:</td>15<td width="76%"><input name="to" type="text" id="to"></td>16</tr>17<tr bgcolor="#ffffff">18<td >主题:</td>19<td ><input name="title" type="text" id="title"></td>20</tr>21<tr>22<td height="18" colspan="2" bgcolor="#ffffff">23信件类型24<select name="emailtype" id="emailtype">25<option value="text/plain" selected>Text</option>26<option value="text/html" selected>Html</option>27</select>28</td>29</tr>30<tr>31<td height="53" colspan="2" bgcolor="#ffffff">32<textarea rows="5" cols="50" name="content" id="content"></textarea>33</td>34</tr>35<tr align="center">36<td colspan="2" bgcolor="#ffffff">37附件1(⾃定义):38<input name="fj1" type="text" id="fj1">39 (输⼊⽂本信息)40</td>41</tr>42<tr align="center" valign="bottom">43<td colspan="2" bgcolor="#ffffff">44附件2(本地):45<input name="fj2" type="file" id="fj2" size="10">46</td>47</tr>48<tr align="center">49<td colspan="2" bgcolor="#ffffff">50附件3(远程):51<input name="fj3" type="text" id="fj3" value="http://">52 (输⼊URL)53</td>54</tr>55<tr align="center">56<td colspan="2" bgcolor="#ffffff">5758<input name="submit" type="submit" value="发送">59<input name="submit2" type="reset" value="重置">60</td>61</tr>62</table>63</form>64</body>65</html>⼆、创建sendMail.jsp页⾯,具体代码如下:<%@ page language="java" contentType="text/html; charset=gb2312"pageEncoding="gb2312"%><%request.setCharacterEncoding("gb2312"); %><%@ page import="java.util.*,javax.mail.*" %><%@ page import="javax.mail.internet.*"%><%@ page import="javax.activation.*" %><%@ page import=".*" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"> <html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>Insert title here</title></head><body><%try{String tto=request.getParameter("to");String ttitle=request.getParameter("title");String emailtype=request.getParameter("emailtype");String tcontent=request.getParameter("content");String tfj1=request.getParameter("fj1");String tfj2=request.getParameter("fj2");String tfj3=request.getParameter("fj3");//声明properities存储发件服务器信息Properties props=new Properties();props.put("mail.smtp.host", "");props.put("mail.smtp.auth", "true");//创建邮件回话Session s=Session.getInstance(props);s.setDebug(true);//创建⼀个消息对象MimeMessage message=new MimeMessage(s);InternetAddress from=new InternetAddress("393743083@");message.setFrom(from);InternetAddress to=new InternetAddress(tto);message.setRecipient(Message.RecipientType.TO, to);message.setSubject(ttitle);message.setSentDate(new Date());Multipart mm = new MimeMultipart();BodyPart mdp=new MimeBodyPart();mdp.setContent(tcontent, emailtype+";charset=gb2312");mm.addBodyPart(mdp);//附件1mdp=new MimeBodyPart();DataHandler dh=new DataHandler(tfj1,"text/plain;charset=gb2312");mdp.setFileName("text.txt");mdp.setDataHandler(dh);mm.addBodyPart(mdp);//附件2mdp=new MimeBodyPart();FileDataSource fds=new FileDataSource(tfj2);dh=new DataHandler(fds);int ddd=stIndexOf("\\");String fname=tfj2.substring(ddd);String ffname=new String(fname.getBytes("gb2312"),"ISO8859-1");mdp.setFileName(ffname);mdp.setDataHandler(dh);mm.addBodyPart(mdp);//附件3mdp=new MimeBodyPart();URL urlfj=new URL(tfj3);URLDataSource ur=new URLDataSource(urlfj);dh=new DataHandler(ur);int ttt=stIndexOf("/");String urlname=tfj3.substring(ttt);mdp.setFileName(urlname);mdp.setDataHandler(dh);mm.addBodyPart(mdp);message.setContent(mm);message.saveChanges();//发送邮件Transport transport=s.getTransport("smtp");transport.connect("",⽤户名,密码);transport.sendMessage(message, message.getAllRecipients());transport.close();%><div align="center"><p><font color="#ff6600">发送成功</font></p><br><a href="sendMail.jsp">再来⼀封</a></div><%}catch(MessagingException e){out.println(e.toString());}%></body></html> 注:腾讯邮箱需要开通smtp功能。
本软件包包括源文件和可执行的jar文件1.运行方式A 可以直接运行jar文件(电脑上必须安装jdk1.6而且关联jar文件)B 可以用eclipse导入源文件然后运行2 功能简介a.登录界面选择相应的邮箱smtp服务器(也可以自己输入),然后输入账号和密码单击登录就可登录进系统。
图1.0 登录界面b.登录成功以后界面如下图1.1 登录成功页面本页面包括基本的菜单、联系人列表和浏览区图1.2 发送邮件界面通过发送邮件界面可以对要发送的邮件进行简单的编辑。
当然双击左侧栏的联系人可以直接将联系人添加到“收件人”或“抄送人”列表中。
页面如图1.3图1.3 添加联系人列表通过简单的编辑界面可以对邮件进行简单的编辑界面如图1.4当单击添加附件按钮时弹出对话框来选择附件。
界面如图1.5选中文件单击确定后讲附件添加到附件列表中,界面如图1.6图1.6 附件列表界面当点击发送按钮式邮件将进行发送。
发送过程中会有进度条提示发送邮件的进度。
发送成功会提示邮件发送成功。
在邮件编辑区邮件会列出简单的编辑工具弹出菜单,界面如图1.7图1.7 邮件菜单编辑当单击收件夹时弹出收件夹界面,单击收件夹的同时会自动加载收件夹中的邮件信息。
收件夹界面如图1.8图1.8 收件夹界面双击收件夹中邮件列表中的信息时。
会显示该邮件的具体内容界面如图1.9图1.9 邮件内容显示选中邮件列表信息是鼠标右键会弹出相应的菜单项(删除、彻底删除邮件、刷新邮件列表信息等)界面如图2.0图2.0 收件箱邮件菜单项单选择删除时会将邮件添加到已删除邮件列表中,单击彻删除邮件时会将邮件从服务器上删除。
单击刷新邮件箱时会更新收件箱邮件列表信息。
已删除邮件列表如图2.1】图2.1 已删除邮件列表当发送成功一封新邮件时,会将已发送的邮件添加到已发送邮件列表中已发送邮件列表如图2.2当单击添加联系人按钮时会弹出添加联系人界面:界面如图2.3图2.3 添加联系人界面当在联系人界面添加联系人之后会在列表中列出添加的联系人,界面如图2.4单击删除联系人可以删除选中的联系人信息,界面如图2.5图2.5 删除联系人信息另外当有新的邮件到达时会播放新邮件到达声音,系统图盘图标也会闪动界面如图2.6图2.6 系统图标。
使用javamail接收电子邮件代码import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Properties;import javax.mail.BodyPart;import javax.mail.Flags;import javax.mail.Folder;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.Part;import javax.mail.Session;import javax.mail.Store;import javax.mail.URLName;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeUtility;/*** 有一封邮件就需要建立一个ReciveMail对象*/public class ReciveMail {private MimeMessage mimeMessage = null;private String saveAttachPath = ""; //附件下载后的存放目录private StringBuffer bodytext = new StringBuffer();//存放邮件内容private String dateformat = "yy-MM-dd HH:mm"; //默认的日前显示格式public ReciveMail(MimeMessage mimeMessage) {this.mimeMessage = mimeMessage;}public void setMimeMessage(MimeMessage mimeMessage) {this.mimeMessage = mimeMessage;}/*** 获得发件人的地址和姓名*/public String getFrom() throws Exception {InternetAddress address[] = (InternetAddress[]) mimeMessage.getFrom();String from = address[0].getAddress();if(from == null)from = "";String personal = address[0].getPersonal();if(personal == null)personal = "";String fromaddr = personal + "<" + from + ">";return fromaddr;}/*** 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同"to"----收件人"cc"---抄送人地址"bcc"---密送人地址*/public String getMailAddress(String type) throws Exception {String mailaddr = "";String addtype = type.toUpperCase(); InternetAddress[] address = null;if(addtype.equals("TO") || addtype.equals("CC")|| addtype.equals("BCC")) {if(addtype.equals("TO")) {address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.TO);} else if(addtype.equals("CC")) {address = (InternetAddress[]) mimeMessage.getRecipients();} else{address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.BCC);}if(address != null) {for(int i = 0; i < address.length; i++) {String email = address[i].getAddress();if(email == null)email = "";else{email = MimeUtility.decodeText(email);}String personal = address[i].getPersonal();if(personal == null)personal = "";else{personal = MimeUtility.decodeText(personal);}String compositeto = personal + "<" + email + ">"; mailaddr += "," + compositeto;}mailaddr = mailaddr.substring(1);}} else{throw new Exception("Error emailaddr type!");}return mailaddr;}/*** 获得邮件主题*/public String getSubject() throws MessagingException {String subject = "";try{subject = MimeUtility.decodeText(mimeMessage.getSubject());if(subject == null)subject = "";} catch(Exception exce) {}return subject;}/*** 获得邮件发送日期*/public String getSentDate() throws Exception {Date sentdate = mimeMessage.getSentDate(); SimpleDateFormat format = new SimpleDateFormat(dateformat); return format.format(sentdate);}/*** 获得邮件正文内容*/public String getBodyText() {return bodytext.toString();}/*** 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件主要是根据MimeType类型的不同执行不同的操作,一步一步的解析*/public void getMailContent(Part part) throws Exception {String contenttype = part.getContentType();int nameindex = contenttype.indexOf("name");boolean conname = false;if(nameindex != -1)conname = true;System.out.println("CONTENTTYPE: " + contenttype);if(part.isMimeType("text/plain") && !conname) {bodytext.append((String) part.getContent());} else if(part.isMimeType("text/html") && !conname) {bodytext.append((String) part.getContent());} else if(part.isMimeType("multipart/*")) {Multipart multipart = (Multipart) part.getContent();int counts = multipart.getCount();for(int i = 0; i < counts; i++) {getMailContent(multipart.getBodyPart(i));} else if(part.isMimeType("message/rfc822")) { getMailContent((Part) part.getContent());} else{}}/*** 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false" */public boolean getReplySign() throws MessagingException { boolean replysign = false;String needreply[] = mimeMessage.getHeader("Disposition-Notification-To");if(needreply != null) {replysign = true;}return replysign;}/*** 获得此邮件的Message-ID*/public String getMessageId() throws MessagingException { return mimeMessage.getMessageID();}/*** 【判断此邮件是否已读,如果未读返回返回false,反之返回true】*/public boolean isNew() throws MessagingException { boolean isnew = false;Flags flags = ((Message) mimeMessage).getFlags();Flags.Flag[] flag = flags.getSystemFlags();System.out.println("flags's length: " + flag.length);for(int i = 0; i < flag.length; i++) {if(flag[i] == Flags.Flag.SEEN) {isnew = true;System.out.println("seen Message.");break;}}return isnew;}/*** 判断此邮件是否包含附件*/public boolean isContainAttach(Part part) throws Exception { boolean attachflag = false;//String contentType = part.getContentType();if(part.isMimeType("multipart/*")) {Multipart mp = (Multipart) part.getContent();for(int i = 0; i < mp.getCount(); i++) {BodyPart mpart = mp.getBodyPart(i);String disposition = mpart.getDisposition();if((disposition != null)&& ((disposition.equals(Part.ATTACHMENT)) || (disposition.equals(Part.INLINE))))attachflag = true;else if(mpart.isMimeType("multipart/*")) {attachflag = isContainAttach((Part) mpart);} else{String contype = mpart.getContentType();if(contype.toLowerCase().indexOf("application") != -1) attachflag = true;if(contype.toLowerCase().indexOf("name") != -1) attachflag = true;}}} else if(part.isMimeType("message/rfc822")) { attachflag = isContainAttach((Part) part.getContent());}return attachflag;}/*** 【保存附件】*/public void saveAttachMent(Part part) throws Exception { String fileName = "";if(part.isMimeType("multipart/*")) {Multipart mp = (Multipart) part.getContent();for(int i = 0; i < mp.getCount(); i++) {BodyPart mpart = mp.getBodyPart(i);String disposition = mpart.getDisposition();if((disposition != null)&& ((disposition.equals(Part.ATTACHMENT)) || (disposition .equals(Part.INLINE)))) {fileName = mpart.getFileName();if(fileName.toLowerCase().indexOf("gb2312") != -1) {fileName = MimeUtility.decodeText(fileName);}saveFile(fileName, mpart.getInputStream());} else if(mpart.isMimeType("multipart/*")) { saveAttachMent(mpart);} else{fileName = mpart.getFileName();if((fileName != null)&& (fileName.toLowerCase().indexOf("GB2312") != -1)) { fileName = MimeUtility.decodeText(fileName);saveFile(fileName, mpart.getInputStream());}}}} else if(part.isMimeType("message/rfc822")) { saveAttachMent((Part) part.getContent());}}/*** 【设置附件存放路径】*/public void setAttachPath(String attachpath) {this.saveAttachPath = attachpath;}/*** 【设置日期显示格式】*/public void setDateFormat(String format) throws Exception {this.dateformat = format;}/*** 【获得附件存放路径】*/public String getAttachPath() {return saveAttachPath;}/*** 【真正的保存附件到指定目录里】*/private void saveFile(String fileName, InputStream in) throws Exception { String osName = System.getProperty("");String storedir = getAttachPath();String separator = "";if(osName == null)osName = "";if(osName.toLowerCase().indexOf("win") != -1) {separator = "\\";if(storedir == null|| storedir.equals(""))storedir = "c:\\tmp";} else{separator = "/";storedir = "/tmp";}File storefile = new File(storedir + separator + fileName);System.out.println("storefile's path: " + storefile.toString());// for(int i=0;storefile.exists();i++){// storefile = new File(storedir+separator+fileName+i);// }BufferedOutputStream bos = null;BufferedInputStream bis = null;try{bos = new BufferedOutputStream(new FileOutputStream(storefile)); bis = new BufferedInputStream(in);int c;while((c = bis.read()) != -1) {bos.write(c);bos.flush();}} catch(Exception exception) {exception.printStackTrace();throw new Exception("文件保存失败!");} finally{bos.close();bis.close();}}/*** PraseMimeMessage类测试*/public static void main(String args[]) throws Exception {Properties props = System.getProperties();props.put("mail.smtp.host", "");props.put("mail.smtp.auth", "true");Session session = Session.getDefaultInstance(props, null);URLName urln = new URLName("pop3", "", 110, null,"xxxxxx", "*******");Store store = session.getStore(urln);store.connect();Folder folder = store.getFolder("INBOX");folder.open(Folder.READ_ONLY);Message message[] = folder.getMessages();System.out.println("您有邮件: "+ message.length+ "封");ReciveMail pmm = null;for(int i = 0; i < message.length; i++) {System.out.println("==============================第"+(i+1)+"封===== ======================");pmm = new ReciveMail((MimeMessage) message[i]);System.out.println("Message " + i + " subject: " + pmm.getSubject());System.out.println("Message " + i + " sentdate: "+ pmm.getSentDate());System.out.println("Message " + i + " replysign: "+ pmm.getReplySign());System.out.println("Message " + i + " hasRead: " + pmm.isNew());System.out.println("Message " + i + " containAttachment: "+ pmm.isContainAttach((Par t) message[i]));System.out.println("Message " + i + " form: " + pmm.getFrom());System.out.println("Message " + i + " to: "+ pmm.getMailAddress("to"));System.out.println("Message " + i + " cc: "+ pmm.getMailAddress("cc"));System.out.println("Message " + i + " bcc: "+ pmm.getMailAddress("bcc"));pmm.setDateFormat("yy年MM月dd日HH:mm");System.out.println("Message " + i + " sentdate: "+ pmm.getSentDate());System.out.println("Message " + i + " Message-ID: "+ pmm.getMessageId());// 获得邮件内容===============pmm.getMailContent((Part) message[i]);System.out.println("Message " + i + " bodycontent: \r\n"+ pmm.getBodyText()); pmm.setAttachPath("c:\\ddd");pmm.saveAttachMent((Part) message[i]);}}}使用JavaMail接收邮件 2008年10月08日Blog 沈斌代码如下:package demo;import Java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.util.Properties;import javax.mail.BodyPart;import javax.mail.Folder;import javax.mail.Message;import javax.mail.Multipart;import javax.mail.Part;import javax.mail.Session;import javax.mail.Store;import sun.misc.BASE64Decoder;public class MailReceiver ...{public static void main(String[] args) ...{MailReceiver receiver = new MailReceiver();receiver.setHost("");receiver.setUsername("xxxxxxxxx");receiver.setPassword("yyyyyyyyy");receiver.setAttachPath("C:email");try ...{receiver.reveiveMail();} catch (Exception e) ...{e.printStackTrace();}}public void reveiveMail() throws Exception ...{Properties props = new Properties();Session session = Session.getDefaultInstance(props, null);Store store = session.getStore("pop3");store.connect(getHost(), getUsername(), getPassword());Folder folder = store.getFolder("INBOX");folder.open(Folder.READ_ONLY);Message message[] = folder.getMessages();System.out.println("Messages's length: " + message.length);//FetchProfile profile = new FetchProfile();//profile.add(FetchProfile.Item.ENVELOPE);//folder.fetch(message, profile);for (int i = 0; i < message.length; i++) ...{//message[i].setFlag(Flags.Flag.DELETED, true);//必须先设置:folder.open(Folder.READ_WR ITE);handleMultipart(message[i]);}if (folder != null) ...{folder.close(true);}if (store != null) ...{store.close();}}private void handleMultipart(Message msg) throws Exception ...{String disposition;Multipart mp = (Multipart) msg.getContent();int mpCount = mp.getCount();for (int m = 0; m < mpCount; m++) ...{handle(msg);BodyPart part = mp.getBodyPart(m);disposition = part.getDisposition();if (disposition != null && disposition.equals(Part.ATTACHMENT)) ...{saveAttach(part, getAttachPath());} else ...{System.out.println(part.getContent());}}}private static void handle(Message msg) throws Exception ...{System.out.println("邮件主题:" + msg.getSubject());System.out.println("邮件作者:" + msg.getFrom()[0].toString());System.out.println("发送日期:" + msg.getSentDate());}private static void saveAttach(BodyPart part, String filePath) throws Exception ...{String temp = part.getFileName();String s = temp.substring(8, temp.indexOf("?="));String fileName = base64Decoder(s);System.out.println("有附件:" + fileName);InputStream in = part.getInputStream();FileOutputStream writer = new FileOutputStream(new File(filePath + "" + fileName));byte[] content = new byte[255];while ((in.read(content)) != -1) ...{writer.write(content);}writer.close();in.close();}private static String base64Decoder(String s) throws Exception ...{BASE64Decoder decoder = new BASE64Decoder();byte[] b = decoder.decodeBuffer(s);return (new String(b));}private String host = null;private String username = null;private String password = null;private String attachPath = null;public String getAttachPath() ...{return attachPath;}public void setAttachPath(String attachPath) ...{this.attachPath = attachPath;public String getHost() ...{return host;}public void setHost(String host) ...{this.host = host;}public String getUsername() ...{return username;}public void setUsername(String username) ...{ ername = username;}public String getPassword() ...{return password;}public void setPassword(String password) ...{ this.password = password;}。
信息科学与工程学院09 届本科生毕业设计(论文)任务书学院信息科学与工程学院专业计算机科学与技术(师范)班级学号学生姓名指导教师一、论文题目基于Javamail的邮件收发系统二、内容和要求1.总体目标及性能(参数)要求(1)系统功能基本完善。
(2)系统具有良好的用户界面。
(3)系统具有较好的人机交互性、易于使用。
(4)系统可靠、稳定,具有一定的应用价值。
2.研究内容及拟采用的技术路线●研究内容:(1)邮件服务器的工作原理。
(2)DNS服务器的工作原理。
(3)SMTP、POP3、MIME协议。
(4)设计并实现基于Javamail的邮件收发系统,要求系统具有邮件接收、发送等基本功能。
●采用的技术路线:(1)开发工具采用Java+JavaMail API。
(2)数据库采用MySQL或SQL Server。
3.参考文献(10篇以上)[1] Java邮件开发详解。
张孝祥。
电子工业出版社,2007。
[2] Java高级程序设计。
王路群主编。
中国水利水电出版社, 2006 。
[3] Java课程设计。
黄明, 梁旭, 周绍斌编著。
电子工业出版社, 2006。
[4] Java开发与应用教程。
王吴迪, 赵枫朝等编著。
电子工业出版社, 2006。
[5] Java程序设计大学教程。
刘艺等编著。
机械工业出版社, 2006。
[6] Java数据库高级编程宝典。
陈天河编著。
电子工业出版社, 2005。
[7] Java程序设计与应用开发。
於东军等编著。
清华大学出版社, 2005。
[8] Java语言程序设计实训。
赵海廷主编。
武汉大学出版社, 2005。
[9] Java program design。
Cohoon, James P.,Davidson, Jack W。
McGraw-Hill Higher Education, 2004。
[10] Thinking in Java。
Eckel, Bruce。
Prentice Hall, c2000。
JavaMail接收与发送邮件一、RFC882文档简单说明RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔。
邮件头包含的内容有:1.from字段--用于指明发件人2.to字段 --用于指明收件人3.subject字段 --用于说明邮件主题字段 -- 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁5.bcc字段 -- 密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人无法看到邮件密送给了谁邮件体指的就是邮件的具体内容。
二、MIME协议简单介绍在我们的实际开发当中,一封邮件既可能包含图片,又可能包含有附件,在这样的情况下,RFC882文档规定的邮件格式就无法满足要求了。
MIME协议是对RFC822文档的升级和补充,它描述了如何生产一封复杂的邮件。
通常我们把MIME协议描述的邮件称之为MIME邮件。
MIME协议描述的数据称之为MIME消息。
对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。
三、使用JavaMail创建邮件和发送邮件JavaMail创建的邮件是基于MIME协议的。
因此可以使用JavaMail创建出包含图片,包含附件的复杂邮件。
3.1、JavaMail API的简单介绍3.2、创建邮件发送测试项目3.3、发送一封只包含文本的简单邮件1package me.gacl.main;23import java.util.Properties;4import javax.mail.Message;5import javax.mail.Session;6import javax.mail.Transport;7import javax.mail.internet.InternetAddress;8import javax.mail.internet.MimeMessage;910/**11* @ClassName: Sendmail12* @Description: 发送Email13* @author: admin14* @date: 2015-1-12 下午9:42:5615*16*/17public class Sendmail {1819/**20* @param args21* @throws Exception22*/23public static void main(String[] args) throws Exception {2425Properties prop = new Properties();26prop.setProperty("mail.host", "");27prop.setProperty("mail.transport.protocol", "smtp");28prop.setProperty("mail.smtp.auth", "true");29//使用JavaMail发送邮件的5个步骤30//1、创建session31Session session = Session.getInstance(prop);32//开启Session的debug模式,这样就可以查看到程序发送Email的运行状态33session.setDebug(true);34//2、通过session得到transport对象35Transport ts = session.getTransport();36//3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。
Java基于JavaMail实现向QQ邮箱发送邮件最近项⽬在做新闻爬⾍,想实现这个功能:爬⾍某个页⾯失败后,把这个页⾯的 url 发到邮箱。
最终实现的效果图如下,后期可以加上过滤标签、失败状态码等,⽅便分类搜索异常。
开发⼈员可以根据邮件⾥的 url 和堆栈信息,分析爬⾍失败的原因。
是不是服务器 down 了?还是爬⾍的 Dom 解析没有解析到内容?还是正则表达式对于这个页⾯不适⽤?开启SMTP服务在 QQ 邮箱⾥的设置->账户⾥开启 SMTP 服务注意开启完之后,QQ 邮箱会⽣成⼀个授权码,在代码⾥连接邮箱使⽤这个授权码⽽不是原始的邮箱密码,这样可以避免使⽤明⽂密码。
⽹上查了⼀下例⼦,根据这篇⽂章 Java Mail(⼆):JavaMail介绍及发送⼀封简单邮件的⽰例代码。
Properties props = new Properties();// 开启debug调试props.setProperty("mail.debug", "true");// 发送服务器需要⾝份验证props.setProperty("mail.smtp.auth", "true");// 设置邮件服务器主机名props.setProperty("mail.host", "");// 发送邮件协议名称props.setProperty("mail.transport.protocol", "smtp");Session session = Session.getInstance(props);//邮件内容部分Message msg = new MimeMessage(session);msg.setSubject("seenews 错误");StringBuilder builder = new StringBuilder();builder.append("url = " + "/never_cxb/article/details/50524571");builder.append("页⾯爬⾍错误");builder.append("\n data " + TimeTool.getCurrentTime());msg.setText(builder.toString());//邮件发送者msg.setFrom(new InternetAddress("**发送⼈的邮箱地址**"));//发送邮件Transport transport = session.getTransport();transport.connect("", "**发送⼈的邮箱地址**", "**你的邮箱密码或者授权码**");transport.sendMessage(msg, new Address[] { new InternetAddress("**接收⼈的邮箱地址**") });transport.close();但是报错了DEBUG SMTP: AUTH LOGIN command trace suppressedDEBUG SMTP: AUTH LOGIN failedException in thread "main" javax.mail.AuthenticationFailedException: 530Error: A secure connection is requiered(such as ssl). More information at /cgi-bin/help?id=28因为⽰例代码是⽤的163邮箱,⽽笔者是 QQ 邮箱,看 Log 分析是 QQ 邮箱需要 SSL 加密。
毕业设计(论文)( 20 届)论文(设计)题目基于Javamail的邮件收发系统作者二级学院、专业班级指导教师(职称)论文字数论文完成时间20年月日基于JavaMail的邮件收发系统摘要电子邮件在当今社会中扮演了一个很重要的角色。
越来越多的人在使用它。
而且用它的人数势必会继续增加。
本文介绍了Javamail邮件收发系统的开发背景,对国内外现有的多种成熟的电子邮件系统进行分析和比较,总结出它们的优缺点,对Javamail技术进行深入研究,提出并设计实现了基于Javamail的邮件收发系统。
本系统利用SMTP协议和POP协议从底层进行开发,利用JavaMail API为收发邮件提供与协议无关的访问。
SMTP(简单邮件传输协议)是专门用来发送邮件的。
POP (邮局协议)是专门用于接收邮件的。
JavaMail API是一种可选的、能用于读取、编写和发送电子消息的标准扩展包。
本文主要可分为四个部分。
第一部分介绍了Javamail邮件系统的意义和现状。
第二部分具体介绍了几种相关协议和Javamail API。
第三部分主要介绍了系统的开发工具JA V A语言、Eclipse及其安装过程与配置方法。
第四部分详细阐述了Javamail邮件收发系统的实现过程。
关键词:SMTP,POP,JA V AMAIL,邮件收发MAIL SYSTEM BASED ON JAVAMAILABSTRACTE-Mail play a very important role in modern times. More and more people are using it, and the number of it will larger and larger. This paper introduced the javamail system's development background, analyzed and compared some existing maturity Email system at home and abroad , summarized their advantages and disadvantages, studied deeply with the javamail technology , proposed and designed out the mail system based on javamail. This system used POP protocol and SMTP protocol to develop from the bottom, used JavaMail API to provide the visit which has nothing to do with the agreement for send and receive email. SMTP (Simple Mail Transfer Protocol) is designed to send a message. POP (Post Office Protocol) is designed to receive mail. JavaMail API is an standard expansion package which is optional, can be used to read, write and send electronic messages.This paper can be divided into four parts. The first part introduced javamail email system's significance and status. The second part introduced several related agreements and JavaMail API. The third part mainly introduced system's development tools JA V A language , Eclipse and their installation process and configuration method. The fourth part detailed javamail email system's realization process.Keywords:SMTP, POP, JA V AMAIL, Email to send and receive目录第一章绪论 (1)1.1电子邮件介绍 (1)1.2研究意义 (1)1.3研究现状 (3)第二章相关邮件协议和JavaMail API (5)2.1相关邮件协议 (5)2.2JavaMail API (6)2.2.1 JavaMail API简介 (6)2.2.2 JavaMail API核心类 (6)2.3.3 JavaMail API的应用 (8)第三章应用系统开发工具 (10)3.1Java开发语言简介 (11)3.2开发工具Eclipse (12)3.3开发软件的安装 (12)3.3.1 JA V A环境的安装与配置 (12)3.3.2 Eclipse的安装 (14)3.3.3 javamail的安装 (15)第四章JavaMail系统的实现 (16)4.1环境配置与界面搭建 (16)4.2设置邮件服务器参数的实现 (16)4.3创建与发送邮件功能的实现 (17)4.3.1 装载邮件服务器属性, 并与其建立连接 (17)4.3.2 构建邮件 (18)4.3.3 创建Transport对象发送邮件 (19)4.4接收邮件功能的实现 (20)4.4.1 获取服务器信息 (20)4.4.2 建立通信连接 (20)4.4.3显示邮件 (20)4.5删除邮件功能的实现 (22)第五章结语 (23)参考文献 (24)致谢 (25)第一章绪论本文是一项基于JavaMail的邮件系统的综合性研究,使用Sun公司提供的JavaMail API实现电子邮件的发送、电子邮件的接收等等功能。
基于Javamail的邮件收发系统使用说明书
基于Javamail的邮件收发系统是一款简单、方便、快捷的邮件系统。
它能实现邮件的接收与发送,并能完成附件的传输,具有较好的人机交互性,易于使用。
开发环境:JDK1.6 + Windows平台
开发技术:Javamail
开发工具:Eclipse3.4
运行环境:PC上需安装JDK1.6,且正确配置环境变量。
系统基本功能如下:
(1) 收取并显示POP3邮件服务器上指定邮箱的邮件;
(2) 使用SMTP邮件服务器发送邮件;
(3) 邮件附件的发送与接受;
(4) 删除邮件;
具体操作步骤如下:
1、打开javamailsystem文件夹,找到javamail.jar可执行文件,双击该执行文件,即可打开
Javamail邮件收发系统客户端软件。
进入该系统后,首先选择“POP3/SMTP设置”按钮,对收发邮件所需的邮件服务器主机、收发邮件账号及密码信息进行设置。
图1-1邮件客户端主界面
设置举例如下:
POP3属性
POP3服务器:(或或)
Email地址:shinning191@(ceshi2009ok@、qiufeng006@)
账户名:shinning191(ceshi2009ok、qiufeng006)
密码:6857191(123456、28912786)
SMTP属性
SMTP服务器:(或或)
Email地址:shinning191@(ceshi2009ok@\qiufeng006@)
账户名:shinning191(ceshi2009ok、qiufeng006)
密码:6857191(123456、28912786)
在对SMTP/POP3进行设置的时候,由于系统的缺陷,需要先对POP3进行属性设置,然后确定关闭该对话框;重新打开属性设置对话框,对SMTP进行属性设置,确定。
这样便可以正确设置完邮件服务器的属性。
此系统对上述设置的信息具有存储功能,在这里,我们采用属性文件的形式存储SMT P 和POP3邮件服务器属性设置。
相关属性值分别保存在pop3.properties和smtp.properties文
件中。
2、在设置完服务器属性值后,点击“创建邮件”按钮,进行邮件的创建与发送。
在新邮件编
辑窗体中,编辑收件人,抄送,主题,正文内容等信息,若有附件需要发送,也可以添加附件。
在编辑完成后,点击“发送”按钮,程序会根据输入的邮件信息构造邮件,并将其发送,如下图所示。
3、为了测试方便,收发邮件的账号都设置为同一账号(也可以设置为不同的账号,
但是相应的服务器设置要正确),因此在发送完新邮件后,便可以在收件箱中查
看。
点击“接收邮件”按钮,系统首先从指定接收邮件的服务器中收取邮件,并将
邮件的发件人、邮件主题以及邮件日期信息以列表形式显示出来;其次是用户在
该邮件列表中点击某封邮件时, 可以查阅该邮件的详细信息,包括邮件内容、附件
列表等。
如下图所示。
对于邮件列表中一些邮件自带的附件,用户可以点击“附件”按钮,跳出“邮件附加处理”窗口,选中附件列表中所需保存的附件“学校桌面背景.JPG”,然后点击“保存”,就可以将附件保存在自己的电脑上,如下图所示。
图1-5 保存邮件附件
4、用户对于收件箱中一些不需要保存的邮件,可以先选取要删除的邮件名,然后点击系统主
窗体的“删除邮件”按钮,系统程序会将邮件列表中当前被选中的邮件删除,并刷新显示
邮件列表,如下图所示。
在系统的设计过程中,由浅入深的实现了E-mail邮件系统的发送、接收,附件传输等基本功能,并最终实现了各个子模块的整合。
在此基础上,可以进一步添加其它的功能,比如转发邮件、回复邮件等,使其成为一个功能完善的邮件客户系统。