JavaMail:集收发邮件、下载附件功能的简单Web应用(修改) 推荐
2010-07-27 22:41
465 查看
在前面的文章 JavaMail:在Web应用下完整接收、解析复杂邮件 中只是实现了基本的登录邮箱、查看邮件、下载附件的功能而已,就少了个在线编辑邮件正文并发送的功能,总是感觉不够意思,所以花点时间再写了几个 HTML 、JSP 文件把这个基本功能也添加进去。
下面的功能是为了和上篇文章中的邮件接收、解析功能合并的,具体的内容可以浏览 JavaMail:在Web应用下完整接收、解析复杂邮件 。如此一来,输入邮箱相关信息并登录邮箱,就能同时编辑邮件和浏览邮箱中的所有邮件以及下载附件了。
需求:
1、提供一个邮箱用户名、密码登录的页面,此时得有一个邮箱类型的下拉框可选,例如我们平常所用的邮箱有:163、126、qq、sina、sohu 等等;如下图:
2、填写了邮箱信息后弹出编辑纯文本邮件正文的页面(关于同时上传附件的功能再找个时间也实现一下,呵呵…),此时页面的下半部分则是直接连接 POP3 服务器获得邮箱中的所有邮件,如下图:
3、编辑好邮件的纯文本正文内容之后,则可点击“发送”按钮将邮件发送出去了。
注:在我的代码中,与 SMTP 服务器的连接、用户身份认证是在点击“发送”之后才引发的,这与上面的连接 POP3 服务器获取邮箱所有邮件的设计决定时机不同,看看代码就清楚了,如下图:
下面这张截图是乱码未解决之前在控制台打印出的结果,看一下下面的 ???跟上面框起来的正文,就是这里除了问题。
上面是启动 Tomcat 服务器之后的控制台,由于 setDebug(true) 所以会输出与 SMTP 服务器通信的过程中的交互信息,看样子是发送成功了。登录 test_hao@sina.cn 邮箱查看邮件是否发送成功,如下图:
下面仍然是乱码未解决之前的截图:
嗯嗯,邮件时收到了,可是邮件中的中文乱码了,这个问题暂时还找不出原因,得再考虑考虑…
其实,乱码的原因在于下面的代码中 sendMails.jsp 文件标上背景颜色的一句代码,需要将 HTML 页面请求的编码显式地设置为 GBK 或 gb2312,即 request.setCharacterEncoding("gbk"); 这样子从 writeMails.html 页面获得的 subject 和 body 才不会以默认的编码方式传入进来。
下面是具体的代码实现,省略了上一篇文章中的所有内容,此外,代码中有好几处是默认写上了邮箱的用户名、密码,以及收件人的邮箱地址,下面有标出来了。
程序代码:
index.html
loginMailbox.jsp
WriteMails.html
sendMails.jsp
实际上,上面在设置邮件纯文本正文时,完全可以不使用 MimeMultipart 、MimeBodyPart 等对象,直接用 mail.setContent(body, "text/plain;charset=gbk"); 指定 MIME 类型和字符集编码即可。不过我是为了以后要实现上传附件的功能而保留这样的代码的。
小结:
1、只是很简陋地实现了发送纯文本邮件正文功能,上传添加附件的功能有待实现;
2、中文乱码了,得找出问题所在;已解决了;
3、在这几篇文章中,都感觉到自己对于一些代码文件的命名很乱,自己也找不着头绪,%>_<% ,这个要引起注意,因为也为此耗了些许时间;
4、程序的逻辑结构很糟糕,自己感觉是拼凑起来的,因为事先总是不善于在纸上有了大概构思、设计之后才真正动手,经验严重不足。
我的相关文章:
JavaMail:在Web应用下完整接收、解析复杂邮件
JavaMail:邮件发送以及sina、163、QQ服务器不同的解析结果(附图)
JavaMail:创建内含附件、图文并茂的邮件
下面的功能是为了和上篇文章中的邮件接收、解析功能合并的,具体的内容可以浏览 JavaMail:在Web应用下完整接收、解析复杂邮件 。如此一来,输入邮箱相关信息并登录邮箱,就能同时编辑邮件和浏览邮箱中的所有邮件以及下载附件了。
需求:
1、提供一个邮箱用户名、密码登录的页面,此时得有一个邮箱类型的下拉框可选,例如我们平常所用的邮箱有:163、126、qq、sina、sohu 等等;如下图:
2、填写了邮箱信息后弹出编辑纯文本邮件正文的页面(关于同时上传附件的功能再找个时间也实现一下,呵呵…),此时页面的下半部分则是直接连接 POP3 服务器获得邮箱中的所有邮件,如下图:
3、编辑好邮件的纯文本正文内容之后,则可点击“发送”按钮将邮件发送出去了。
注:在我的代码中,与 SMTP 服务器的连接、用户身份认证是在点击“发送”之后才引发的,这与上面的连接 POP3 服务器获取邮箱所有邮件的设计决定时机不同,看看代码就清楚了,如下图:
下面这张截图是乱码未解决之前在控制台打印出的结果,看一下下面的 ???跟上面框起来的正文,就是这里除了问题。
上面是启动 Tomcat 服务器之后的控制台,由于 setDebug(true) 所以会输出与 SMTP 服务器通信的过程中的交互信息,看样子是发送成功了。登录 test_hao@sina.cn 邮箱查看邮件是否发送成功,如下图:
下面仍然是乱码未解决之前的截图:
嗯嗯,邮件时收到了,可是邮件中的中文乱码了,这个问题暂时还找不出原因,得再考虑考虑…
其实,乱码的原因在于下面的代码中 sendMails.jsp 文件标上背景颜色的一句代码,需要将 HTML 页面请求的编码显式地设置为 GBK 或 gb2312,即 request.setCharacterEncoding("gbk"); 这样子从 writeMails.html 页面获得的 subject 和 body 才不会以默认的编码方式传入进来。
下面是具体的代码实现,省略了上一篇文章中的所有内容,此外,代码中有好几处是默认写上了邮箱的用户名、密码,以及收件人的邮箱地址,下面有标出来了。
程序代码:
index.html
<hmtl> <head> <title>蚂蚁-->邮箱登录页面</title> </head> <body> <form action="loginMailbox.jsp" method="post"> 服务器:<select name="server"> <option value="126.com">126.com</option> <option value="163.com">163.com</option> <option value="sina.com">sina.com</option> <option value="sohu.com">sohu.com</option> <option value="qq.com">qq.com</option> </select></br> 用户名:<input name="user" value="testhao" type="text"></br> 密码:  <input name="pwd" value="123456" type="password"></br> <input type="submit" value="登录"> <input type="reset" value="重置"></br> </form> </body> </html>
loginMailbox.jsp
<%@ page language="java" import="java.util.*,javax.mail.*" pageEncoding="gbk"%> <% // 初始化SMTP、POP3服务器的主机名 String server = request.getParameter("server"); String smtpServer = "smtp." + server; String pop3Server = "pop3." + server; // 邮箱用户名、密码 String user = request.getParameter("user"); String pwd = request.getParameter("pwd"); // 用当前会话对象session保存发件人、用户名、密码 session.setAttribute("from", user+"@"+server); session.setAttribute("user", user); session.setAttribute("pwd", pwd); // 创建SMTP服务器的属性文件并初始化 Properties smtpProps = new Properties(); smtpProps.setProperty("mail.transport.protocol", "smtp"); smtpProps.setProperty("mail.smtp.host", smtpServer); smtpProps.setProperty("mail.smtp.auth", "true"); // 根据属性文件获得javax.mail.Session对象,并保存之 Session smtpSession = Session.getInstance(smtpProps); smtpSession.setDebug(true); session.setAttribute("smtpSession", smtpSession); // 创建POP3服务器的属性文件并初始化 Properties pop3Props = new Properties(); pop3Props.setProperty("mail.store.protocol", "pop3"); pop3Props.setProperty("mail.pop3.host", pop3Server); // 根据属性文件获得javax.mail.Session对象,并保存之 Session pop3Session = Session.getInstance(pop3Props); //pop3Session.setDebug(true);//这里如果为true的话控制台输出太多了 session.setAttribute("pop3Session", pop3Session); %> <frameset rows="30%,*"> <frame src="/JavaMail/WriteMails.html?user=<%=user%>&pwd=<%=pwd%>" scrolling="yes"> <frame src="/JavaMail/POP3Login.jsp?user=<%=user%>&pwd=<%=pwd%>" scrolling="yes"> </frameset>
WriteMails.html
<html> <body bgcolor="#d0d0d0" > <form action="sendMails.jsp" method="post"> 收件人:<input name="to" value="test_hao@sina.cn" type="text"></br> 主题:  <input name="subject" value="我的主题!" type="text"></br> 正文:</br> <textarea name="body" rows="3" cols="40">我是正文部分!!! </textarea></br> <input type="submit" value="发送"> <input type="reset" value="重置"></br> </form> </body> </html>
sendMails.jsp
<%@ page import="javax.mail.*,java.util.Properties,javax.mail.internet.*" contentType="text/html;charset=gbk" %> <% // 从会话对象session中获得已保存的用户名、密码、发件人 String user = (String)session.getAttribute("user"); String pwd = (String)session.getAttribute("pwd"); String from = (String)session.getAttribute("from"); // 获取HTML页面请求中的收件人、主题、正文 request.setCharacterEncoding("gbk"); String to = request.getParameter("to"); String subject = request.getParameter("subject"); String body = request.getParameter("body"); // 从会话对象session中获得javax.mail.Session对象,创建Message对象 Session smtpSession = (Session)session.getAttribute("smtpSession"); Message mail = new MimeMessage(smtpSession); // 设置Message对象中的收件人、发件人、主题、正文 mail.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); mail.setFrom(new InternetAddress(from)); mail.setSubject(subject); // 将纯文本的正文放到Multipart对象中,以避免中文乱码 MimeMultipart allParts = new MimeMultipart("alternative"); MimeBodyPart textBody = new MimeBodyPart(); textBody.setContent(body, "text/html;charset=gbk"); allParts.addBodyPart(textBody); mail.setContent(allParts); mail.saveChanges(); // 保存修改后的Message对象 try{ // 获得Transport对象并连接SMTP服务器,由于属性文件中 // 已设置了SMTP服务器的主机名,此处可用null省略之 Transport transport = smtpSession.getTransport(); transport.connect(null, user, pwd); // 发送邮件 transport.sendMessage(mail, mail.getRecipients(Message.RecipientType.TO)); transport.close(); }catch(Exception e){ e.printStackTrace(); } out.println("邮件发送成功!!!"); System.out.println("邮件发送成功!!!"); %>
实际上,上面在设置邮件纯文本正文时,完全可以不使用 MimeMultipart 、MimeBodyPart 等对象,直接用 mail.setContent(body, "text/plain;charset=gbk"); 指定 MIME 类型和字符集编码即可。不过我是为了以后要实现上传附件的功能而保留这样的代码的。
小结:
1、只是很简陋地实现了发送纯文本邮件正文功能,上传添加附件的功能有待实现;
2、中文乱码了,得找出问题所在;已解决了;
3、在这几篇文章中,都感觉到自己对于一些代码文件的命名很乱,自己也找不着头绪,%>_<% ,这个要引起注意,因为也为此耗了些许时间;
4、程序的逻辑结构很糟糕,自己感觉是拼凑起来的,因为事先总是不善于在纸上有了大概构思、设计之后才真正动手,经验严重不足。
我的相关文章:
JavaMail:在Web应用下完整接收、解析复杂邮件
JavaMail:邮件发送以及sina、163、QQ服务器不同的解析结果(附图)
JavaMail:创建内含附件、图文并茂的邮件
相关文章推荐
- JavaMail:集收发邮件、下载附件功能的简单Web应用
- php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)
- php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)
- javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)
- php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)
- javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)
- 使用javamail实现发送简单邮件和带有附件的邮件
- Web简单的发送邮件激活功能(带附件)
- 使用javaMail收邮件 支持附件下载
- asp.net带附件功能的简单发送邮件
- 基于JavaMail的Java实现简单邮件发送功能
- JavaMail简单收发邮件
- JavaMail收发邮件(包含附件)
- 用javamail发送邮件(带附件)的简单实例
- javaMail解析邮件内容和下载附件
- loner_li web版 简单的发送邮件功能实现(带上传附件)
- 使用JavaMail收发邮件,解决了中文附件名问题
- 使用javaMail收邮件 支持附件下载
- JavaMail实现邮件发送的简单封装(包括文本、图片、html、附件)
- 借助javaMail来实现邮件的收发功能之知识篇