邮件发送程序(添加附件发送)

目标:实现一个基于Web的可以发送附件的邮件程序。(涉及的知识点:文件上传+邮件发送)

知识点引入:

文件上传:开发的Web应用是基于HTTP协议的,工作在Request/Response模式下。在这种模式下,用户通过浏览器访问Web应用中的内容,都会先通过浏览器给服务器发送一个对资源的请求,服务器接到这个请求后,会把用户所请求的资源返回给浏览器。接下来的一点很少有人会思考到:其实文件上传与浏览器发送请求性质相同,都是向服务器传递信息。一般情况下,浏览器给服务器发送的请求信息都是一些简单的文本信息,而服务器返回给用户的信息是比较复杂的信息,会包括头信息,文本信息,图片文件的内容等。而通过浏览器上传文件给服务器,与正常的访问不同,用户通过浏览器给服务器发送的是比较复杂的信息,而浏览器返回的可能是简单的信息。(这段话没有什么实际的价值,但是本人觉得挺有意思的,可以将文件上传与发送请求联系在一起。)

JavaMail:在javaweb应用中,我们非常需要电子邮件的功能。sun公司已经为我们准备好了JavaMail技术,专门帮助处理邮件相关。使用JavaMail技术需要在本机安装邮件服务器,本篇博客使用的是Apache Commons Email组件编写,所以对JavaMail不做介绍。

关于邮件发送,我们对相关的协议做基本的了解:

  1. SMTP( Simple Mail Transfer Protocol ):电子邮件发送协议。当我们使用客户端程序发送邮件时,客户端程序先把邮件发送给我们设置SMTP服务器,然后SMTP服务器再根据收件人的地址,把邮件中转给接受方的SMTP服务器,以便让邮件收件人最终使用POP3或者IMAP方式收取邮件。JavaMail API不包含SMIP的服务程序,所以使用JavaMail技术发送邮件,需要其他SMTP服务器的支持。
  2. POP3协议(Post Office Protocol V3):是一种收取邮件的协议,通过这个协议,可以让邮件客户端程序把存在POP3服务器上的邮件接收到本机上进行处理。
  3. IMAP协议(Internet Message Access Protocol):IMAP是更加高级的用于接收邮件的协议。
  4. MIME协议(Multipurpose Internet Mail Extensions):它不是邮件传输协议,但对传输内容的文本、附件及其他内容定义了格式。

程序开工:

准备工作:此次程序用到的jar文件上传:https://download.csdn.net/download/tobe_coder/10653981

 注册一个新浪邮箱,进入设置,——》客户端POP/imap/smtp——》将POP/smtp服务状态开启。

sendAttachmentMail.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>发送邮件</title>
</head>
<body><h3>发送邮件程序</h3>
<%--enctype="multipart/form-data"注意此属性设置,此属性是表单上传文件必不可少的参数--%>
<form action="sendAttachmentMail" method="post" enctype="multipart/form-data">收件人:<input type="text" name="to"/><br>发件人:<input type="text" name="from"/><br>主题:<input type="text" name="topic"><br>添加附件:<input type="file" name="attach"><br>正文:<textarea cols="50" rows="30" name="content"></textarea><br><input type="submit" value="提交"/><input type="reset" value="重置"/>
</form>
</body>
</html>
SendAttachmentMailServlet:
/*** 编写可以发送附件的邮件发送程序* 结合使用邮件发送和文件上传实现*/
@WebServlet(value="/sendAttachmentMail",initParams = {@WebInitParam(name = "savePath",value = "uploads")})
public class SendAttachmentMailServlet extends HttpServlet {private String savePath; //上传文件的存储路径ServletContext application;private Map<String,String> parameters=new HashMap();@Overridepublic void init(ServletConfig config) throws ServletException { //初始化savePath=config.getInitParameter("savePath"); //取到文件的存储路径application=config.getServletContext();//初始化ServletContext}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");File file=doAttachment(request);//获取上传的文件try {//此类是能发送带附件邮件的行为MultiPartEmail email=new MultiPartEmail();email.setCharset("utf-8");email.setHostName("smtp.sina.com"); //不要将smtp写成stmpemail.setAuthentication("test@sina.com","123456");email.addTo(parameters.get("to"));email.setFrom(parameters.get("from"));email.setSubject(parameters.get("topic"));email.setMsg(parameters.get("content"));if (file!=null){//如果存在附件EmailAttachment attachment=new EmailAttachment();  //创建一个邮件的附件对象attachment.setPath(file.getPath());   //设置路径到附件attachment.setDescription(EmailAttachment.ATTACHMENT);//附件的描述attachment.setName(file.getName());  //附件的名称email.attach(attachment);  //将附件绑定到邮件上}email.send();//邮件发送} catch (EmailException e) {e.printStackTrace();request.setAttribute("sendmail.message","邮件发送不成功");}request.setAttribute("sendmail.message","邮件发送成功");request.getRequestDispatcher("/sendResult.jsp").forward(request,response);}/***    将文件上传到服务器* @param request* @return*/public File doAttachment(HttpServletRequest request){File file=null;DiskFileItemFactory factory=new DiskFileItemFactory();ServletFileUpload upload=new ServletFileUpload(factory);try {//获取所上传的所有文件和参数的集合对象 from必须要有enctype="multipart/form-data"属性设置,//标记中有"entype"属性,该表单提交之后不能通过request.getParameter("name")取值List items=upload.parseRequest(request);Iterator itr=items.iterator();while(itr.hasNext()){FileItem item= (FileItem) itr.next();if(item.isFormField()){//如果是表单项的情况,将属性和值进行存储parameters.put(item.getFieldName(),item.getString("utf-8"));}else{//如果是file类型的表单if(item.getName()!=null&&!item.getName().equals("")){//item.getName()上传文件在客户端的完整路径名称File tempFile=new File(item.getName());//根据给定的路径名创建一个新的文件实例,ServletContext容器的路径+文件名file=new File(application.getRealPath("/")+savePath,tempFile.getName());item.write(file);}}}} catch (FileUploadException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}return file;}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}
}

邮件发送成功页面sendResult.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>邮件发送成功页面</title>
</head>
<body><p>${requestScope['sendmail.message']}</p>
<p><a href="sendMail">返回</a></p>
</body>
</html>

程序的相关方法查询api文档:http://tool.oschina.net/apidocs/

相关资源:common-email.jar,fileupload.jar,commons-io.jar包在Apache官网下载。

注:学习的初始阶段,博客比较粗糙。以后细节再补充,如有错误或者疑问,欢迎沟通。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/51929.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

邮件发送功能-带附件

JAVA邮件发送的大致过程是这样的的&#xff1a; 1、构建一个properties文件&#xff0c;该文件中存放SMTP服务器地址等参数。 2、通过构建的properties文件和javax.mail.Authenticator具体类来创建一个javax.mail.Session。Session的创建&#xff0c;就相当于登录邮箱一样。剩下…

Edge浏览器打不开任何网页!!!

错误代码: STATUS_INVALID_IMAGE_HASH 1、电脑搜索注册表 win键&#xff0c;然后输入“注册表” 2、增加项 找到路径&#xff1a;“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge” 没有Edge的&#xff0c;直接在Microsoft下新建一个Edge文件夹 在Edge下&#…

未安装360系列应用情况下,Edge浏览器主页被360篡改,一直显示360导航

文章目录 修改浏览器设置系统扫描修复 修改浏览器设置 进入Edge浏览器进行以下操作&#xff1a; 右上角...图标&#xff0c;找到【设置】菜单&#xff0c;进入浏览器设置&#xff1b;左边菜单栏&#xff0c;找到【开始、主页和新建标签页】选项&#xff0c;进行操作&#xff…

vscode Live Server插件无法启动edge浏览器

平台 系统&#xff1a;mac os 10.14.6 默认浏览器 mircosoft edge vscode 相关参数 Version: 1.68.0 (Universal) Commit: 4af164ea3a06f701fe3e89a2bcbb421d2026b68f Date: 2022-06-08T11:44:00.250Z (1 mo ago) Electron: 17.4.7 Chromium: 98.0.4758.141 Node.js: …

Microsoft Edge 浏览器如何打开Axure RP文件

1.安装Microsoft Edge 浏览器 2.右上角如图点击进入扩展页面&#xff0c;搜索“Axure RP”-获取-安装 3.再次打开“扩展”查看已扩展的程序&#xff0c;启用&#xff0c;并点击“详细信息” 4.勾选“允许访问文件url” 5.选中本地文件夹中的index.html文件-选择打开方式&#…

edge浏览器ie模式设置方法介绍

1、打开edge浏览器&#xff0c;点击右上角的三个点&#xff0c;进入设置 2、选择默认浏览器 3、开启允许在internet explorer模式下重新加载网站 4、重启浏览器后&#xff0c;点击edge浏览器右上角的三个点&#xff0c;在更多工具中&#xff0c;可选择在internet explorer模式下…

Microsoft Edge浏览器只能在地址栏输入地址进入,不能进行搜索

Micrisoft Edge不能用搜索栏搜索 问题解决 问题 Microsoft Edge浏览器只能在web栏搜索网站&#xff0c;而不能用搜索栏搜索。 而且有一个很奇怪的现象&#xff0c;当我在搜索栏中搜索的时候&#xff0c;搜索内容自动填充进了web栏中&#xff0c;而搜索栏没有任何东西&#xff…

Edge 安装 CSDN 浏览器助手

################################################## 目录 Edge 安装 CSDN 浏览器助手 为什么一定要用谷歌或者微软浏览器&#xff1f; 获取 CSDN 浏览器助手插件包 手动 Edge 浏览器安装 CSDN 助手插件 ################################################## Edge 安装 …

浏览器发器POST请求

浏览器按F12或打开开发者工具&#xff0c;在console(控制台)标签页下输入 fetch(new Request(http://localhost:8080/power/font/getToken,{method:POST, headers: {Content-Type: application/x-www-form-urlencoded},body:"userName000&password123456" })).t…

新版Windows Edge浏览器关闭浏览器后出现自动重启问题

把启动增强和关闭Microsoft Edge后继续运行后台应用&#xff0c; 这两个开关关闭

【Edge】解决Edge游览器龟速下载问题

Edge游览器输入 edge://flags/#enable-parallel-downloadings 第一项Default改为改为Enabled 重启游览器即可

联想小新Win11系统如何将新建标签页设置为Edge浏览器首页

首先我们先打开Edge浏览器&#xff0c;点击右上角 选择 设置 然后选择 开始、主页和新建标签页 在 Microsoft Edge启动时 选择 打开新建标签页 这是我们再打开 Microsoft Edge浏览器&#xff0c;但是界面依然没有改变&#xff0c;这如何修改呢&#xff1f; 打开联想小…

Edge浏览器被306导航页面劫持篡改

Edge浏览器被360页面劫持 一、解决方案 1、右键edge浏览器图标----》属性 2、查看属性–》快捷方式 可以看到目标里后面跟随了一个网址。 http://511zdqdkj.yc.anhuang.net/ 我们将这个网址粘贴到浏览器里&#xff0c;可以看到打开的就是360主页。 3、删除后面的网址 4、…

edge和google浏览器打不开!记录一个解决方法!

2023年5月28日早上 使用小黑盒加速器加速EPIC后&#xff0c;edge和谷歌的浏览器就打不开了&#xff0c;国内的浏览器能打开&#xff1a;如小智浏览器。 网络上的解决方法没有用 这是我找到的解决链接&#xff1a;Bing搜索没法用的解决办法&#xff08;附Google和edge的详细解…

通过改变浏览器Cookie切换当前网站马甲

浏览器可以随时保存Cookie&#xff0c;以及随时更换Cookie&#xff1b;通过切换Cookie就可以切换当前登录用户。下面详细详细说明浏览器中Cookie应用步骤&#xff1a; 一、登录第一个测试用户 1、打开浏览器&#xff0c;打开论坛输入用户apple的帐号密码和验证码&#xff0c;注…

2022-强烈推荐的7款浏览器插件

目录 1.Tampermonkey 2.ADGUARD拦截广告插件 3.csdn插件 4.globalSpeed 5.IDM ​6.wappalyzer 7.Hackbar 1.Tampermonkey 是一款免费的浏览器扩展和最为流行的用户脚本管理器&#xff0c;它适用于 Chrome, Microsoft Edge, Safari, Opera Next, 和 Firefox。 这是我安装的油…

算力时代加速狂奔,移动云将携手千万开发者并肩同行

随着我国“东数西算”工程的推进&#xff0c;算力网络正成为国家、社会、产业发展的战略要求&#xff0c;在数字中国建设进程中发挥着重要引擎作用。中国移动作为我国数字经济发展的“排头兵”&#xff0c;锚定“世界一流信息服务科技创新公司”核心定位&#xff0c;移动云是中…

国产GPU芯片迎来突破,算力全球第一,中文编程也有好消息

苦&#xff0c;芯片久矣&#xff0c;终&#xff0c;迎来突破&#xff0c;实在振奋人心&#xff01; 最近&#xff0c;国产GPU芯片传来了好消息&#xff0c;国产自研首款通用芯片&#xff0c;以每秒千万亿次的计算能力&#xff0c;创全球算力记录&#xff0c;芯片领域实现跨越式…

研究03丨ahr999屯币指数逐行代码深度剖析

今天我们分享关于屯币指数的原理和代码复现两个话题&#xff0c;屯币指数ahr999我简单搜了搜&#xff0c;是某位大神不知道那里来的逻辑点子&#xff0c;创建定义了这么一个震荡指标算法。该指标算法通过这两天的学习和复现&#xff0c;实际上就是一个类似咱们做期货或股票当中…

迈向高算力、跨域融合新拐点,智能座舱各路玩家如何卡位?

当前&#xff0c;中国车联网发展进入平稳增长周期&#xff0c;5G、V2X市场迎来拐点。 借助数字化转型驱动&#xff0c;互联化、数字化、个性化的智能座舱&#xff0c;以及与之强关联的座舱域控制器方案正实现快速发展和落地。 高工智能汽车研究院监测数据显示&#xff0c;202…