开发一个能发送邮件的应用,前人种的树,借鉴 参考大牛的代码,做的小应用。

大概是这样的:

其中SMTP密码,并非用户名所对应的登录密码,而是在打开

163信箱这个服务时,自己设置的授权码,按步骤即可轻松打开这个服务,并获得授权码,其中,本次实验的主要是163信箱,host地址也是163信箱,刚开始一直设置的smtp.qq.com,但是一直报错,又有流传说qq邮箱的话问题比较大一点,所以用的网易163邮箱。

试验了一下,发现能用,并成功的发送了邮件。

好的,开始进入正题:

首先是准备阶段,需要备好4个jar包,activation,log4j-1.2.15,commons-email-1.3,还有一个mail包,如果你找不到资源,请访问这里,如果链接失效,楼主是好人,大胆的留下邮箱,我给你发资源,只要不怕我在邮件数量哪里稍微写得大一点,不过貌似大一点的话,会被接收邮件者自动收入到垃圾站,而且由于这里用的是163信箱,尽管可以向qq邮箱发送邮件,但是会有点小问题,先不说问题,可以确保邮件一定能收到。把所述的四个jar包拷贝到WEB-INF目录下的lib文件夹,并bulid path,如图:

如果想创建的不是web项目,而是java项目,则只需右键创建的java项目名,新建一个叫lib的文件夹,并把jar包拷贝进去即可。

先写一个meil类:

package cim.it.object;import java.io.Serializable;
//host name sender receiver username password subject message
public class Meil implements Serializable {public static final String ENCODEING="UTF-8";//编码方式private String host;//端口private String name;//用户名private String sender;//发送者private String receiver;//接受者private String username;//账号名private String password;//密码private String subject;//表题private String message;//内容public String getHost() {return host;}public void setHost(String host) {this.host = host;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSender() {return sender;}public void setSender(String sender) {this.sender = sender;}public String getReceiver() {return receiver;}public void setReceiver(String receiver) {this.receiver = receiver;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}
}

什么?你说我mail拼成了meil...

然后写一个MeilUtil类,这个类比较重要,里边是如何发送的邮件:

package cim.it.object;
import javax.enterprise.inject.spi.Bean;
import org.apache.*;
import org.apache.commons.mail.HtmlEmail;
import org.apache.log4j.Logger;
@SuppressWarnings("unused")
public class MeilUtil {protected final Logger logger=Logger.getLogger(getClass());public  boolean send(Meil meil){HtmlEmail email= new HtmlEmail();try{email.setHostName(meil.getHost());email.setCharset(meil.ENCODEING);email.addTo(meil.getReceiver());email.setFrom(meil.getSender(), meil.getName());email.setAuthentication(meil.getUsername(), meil.getPassword());email.setSubject(meil.getSubject());email.setMsg(meil.getMessage());email.send();//发送邮件if(logger.isDebugEnabled()){logger.debug(meil.getSender()+"发送邮件到"+meil.getReceiver());}return true;}catch(Exception e){e.printStackTrace();logger.info(meil.getSender()+"发送邮件到"+meil.getReceiver()+"失败");return false;}}}

如果,创建的 是java项目,只需要写一个main方法跑一下就行了:

package cim.it.object;import java.util.Scanner;public class send {public static void  main(String args[]){Scanner cin=new Scanner(System.in);Meil mail=new Meil();//实体化meil类mail.setHost("smtp.163.com");//网易163信箱的端口,别的邮箱不是这个mail.setSender("18839125992@163.com");//发送者邮箱mail.setReceiver("18839125992@163.com");//接受者邮箱mail.setUsername("18839125992@163.com");//用户名mail.setPassword("*************");//填自己的操作码mail.setSubject("2016-8-2 10:21:06");String message=cin.next();System.out.println(message);//自行输入邮件内容//mail.setMessage("hehehe");mail.setMessage(message);//for(int i=0;i<1;i++)//不要坏坏的打这个for循环的主意//{new MeilUtil().send(mail);//发送System.out.println("sueecess!");//}}}

如果中间遇到了这个问题,如图:

要么是pop3,SMTP服务没有开,要么就是发送者邮箱填的不是163信箱。

如果发送成功后依然会有两行警告:

需要在src中创建一个文件(不是文件夹)文件名为  log4j.properties   ,内容为:

# Configure logging for testing: optionally with log file
log4j.rootLogger=WARN, stdout
# log4j.rootLogger=WARN, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%nlog4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

如果创建的是web项目,则需要写一个servlet:

package cim.it.object;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class sendmessage extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {try{request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");Meil mail=new Meil();mail.setHost("smtp.163.com");String sender=request.getParameter("address");String receiver=request.getParameter("receiver");String username=request.getParameter("username");String password=request.getParameter("password");String subject=request.getParameter("subject");String message =request.getParameter("message");String num=request.getParameter("number");int Num=Integer.valueOf(num);mail.setSender(sender);//发送者的邮箱mail.setReceiver(receiver);//接受对象mail.setUsername(username);//用户名mail.setPassword(password);//不是信箱密码,为设置POP3/SMTP/IMAP时,设置的 密码mail.setSubject(subject);//邮件主题mail.setMessage(message);//邮件内容mail.setHost("smtp.163.com");//设置邮箱端口//MeilUtil meil=;for(int i=0;i<Num;i++)//发送次数{new MeilUtil().send(mail);//发送邮件}request.setAttribute("msg", "邮件发送成功");request.getRequestDispatcher("/success.jsp").forward(request, response);//页面跳转}catch (Exception e){}
//      request.setCharacterEncoding("utf-8");
//      response.setContentType("text/html;charset=utf-8");
//      Meil mail=new Meil();
//      mail.setHost("smtp.163.com");
//      String sender=request.getParameter("address");
//      String receiver=request.getParameter("receiver");
//      String username=request.getParameter("username");
//      String password=request.getParameter("password");
//      String subject=request.getParameter("subject");
//      String message =request.getParameter("message");
//      String num=request.getParameter("number");
//      int Num=Integer.valueOf(num);
//      mail.setSender(sender);//发送者的邮箱
//      mail.setReceiver(receiver);//接受对象
//      mail.setUsername(username);//用户名
//      mail.setPassword(password);//不是信箱密码,为设置POP3/SMTP/IMAP时,设置的 密码
//      mail.setSubject(subject);//邮件主题
//      mail.setMessage(message);//邮件内容
//      mail.setHost("smtp.163.com");//设置邮箱端口
//      //MeilUtil meil=;
//      for(int i=0;i<Num;i++)//发送次数
//      {
//          new MeilUtil().send(mail);//发送邮件
//      }
//
//      request.setAttribute("msg", "邮件发送成功");
//      request.getRequestDispatcher("/success.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

然后写一个几秒后跳转的success.jsp

:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>发送成功</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body> <!-- url后面的为目标地址-->
<meta http-equiv="Refresh" content="5;url=use.jsp">
<center><table> <tr> <td width="181" height="30" class="FontBlack">  该页面</td> <td width="22" align="center" class="FontBlack"><div id="time">5</div></td> <td width="194" align="left" class="FontBlack">秒后自动跳转</td> </tr>
</table>
</center>
</body> <script language="JavaScript">
var times=6;
clock();
function clock()
{
window.setTimeout('clock()',1000);
times=times-1;
time.innerHTML =times;
}
</script>
</html>

其中跳转到,也就是最开始的页面,调用servlet那个页面,use.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'use.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><center><div><h1>欢迎使用</h1><form action="servlet/sendmessage" method="post"><table><tr><td width="88" align="right"><font size="1">发送者邮箱:</font></td><td colspan="2"><input type="text" name="address" value="${address }" style="width:200;height:25;"/></td></tr><tr><td width="88" align="right"><font size="1">接受者邮箱:</font></td><td colspan="2"><input type="text" name="receiver" value="${receiver }" style="width:200;height:25;"/></td></tr><tr><td width="88" align="right"><font size="1">用户名:</font></td><td colspan="2"><input type="text" name="username" value="${username }" style="width:200;height:25;"/></td></tr><tr><td width="88" align="right"><font size="1">SMTP密码:</font></td><td colspan="2"><input type="password" name="password" style="width:200;height:25;"/></td></tr><tr><td width="88" align="right"><font size="1">邮件主题:</font></td><td colspan="2"><input type="text" name="subject" value="${subject }" style="width:200;height:25;"/></td></tr><tr><td width="88" align="right"><font size="1">邮件内容:</font></td><td colspan="2"><input type="text" name="message" value="${message }" style="width:200;height:25;"/></td></tr><tr><td width="88" align="right"><font size="1">邮件数量:</font></td><td colspan="2"><input type="text" name="number" value="${number }" style="width:200;height:25;"/></td></tr><tr><td colspan="3" align="center"><input type="submit" value="发送邮件" style="width:130;height:30;"/></td></tr> </table></form><font color="red" size="2"> ${msg }</font>  </div></center></body>
</html>

这样,就做成了所述应用,记得慎填邮件数量,否则会被自动转到垃圾信箱的,上午写好的。就在刚才qq一直提示这个:

我会告诉你这是因为早上给自己发了几封邮件,并错误的填写了邮件数量?

还有,开发这个中途会有好多异常和错误,百度查找了很久 ,如果在开发这个应用中遇到了难解决的异常,私信,评论均可,会热心提供帮助。

强调一下,不要错误填写使用邮件数量。

喏,错误使用的 后果。

web开发 开发一个能发送邮件的应用相关推荐

  1. 使用 ABAP 开发的一个基于 Web Socket 的小工具,能提高程序员日常工作效率

    程序员区别于其他岗位的一个优势是,我们可以充分利用自己掌握的编程语言,将平日一些琐碎的,重复的日常工作,通过代码来实现自动化,从而省下更多的时间来投入到技术含量更高的工作中,提高工作效率. 本文介绍一 ...

  2. web策略类游戏开发(四)一个可以承载万人在线的架构

    web策略类游戏开发(四)一个可以承载万人在线的架构 Webgame现在已经开始需要进入大统一服务器时代,每个游戏区域容纳的玩家数量将从现在的几万人发展到几十万人,因此在新的背景下,webgame如何 ...

  3. [Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序

    本系列前两部分已经介绍了如何配置Ruby on Rails开发环境,现在终于进入正题啦! Part1.开发前的准备 本次的主要任务是开发第一个Rails程序.需要特别指出的是,本次我选用了一个(Paa ...

  4. 想成为一个Web前端开发工程师,需要掌握哪些知识?

    前端工程师已经成为目前互联网企业极具竞争力的人才,为了招聘到优秀的Web前端开发工程师,企业不断的提升薪资水平.因此,有越来越多的人加入到了学习Web前端行列.那么,想成为一名web前端开发工程师需要 ...

  5. 想成为一个Web前端开发工程师,需要掌握的详细知识总结

    前端工程师已经成为目前互联网企业极具竞争力的人才,企业不断提升薪资水平为了招聘到优秀的Web前端开发工程师.因此,越来越多的人想要学习Web前端.那么呢?Web前端的学习路线是什么? 想成为一个Web ...

  6. jroo,已开源,一个java web快速开发工具

    2019独角兽企业重金招聘Python工程师标准>>> 代码在:http://code.google.com/p/jroo/. 演示地址:http://jeecms1.x8.fjjs ...

  7. SuperDog——一个基于netty的web服务器开发项目

      项目GitHub地址:https://github.com/HelloWorld-Ian/SuperDog   这是我在实习期间开发的一个项目demo,简单来说是一个基于netty框架的web服务 ...

  8. 一个java web 快速开发脚手架思路

    一个java web 快速开发脚手架思路 认证与鉴权 表 用户表.角色表.接口表.管理员表.用户角色关联表.角色接口关联表.接口分类表 代码生成 表 代码生成配置简单表.代码生成配置完整表 表说明 代 ...

  9. 怎样成长为一个优秀的 Web 前端开发工程师?

    链接:http://www.zhihu.com/question/19554845/answer/16755476 来源:知乎 首先,优秀的Web前端开发工程师要在知识体系上既要有广度和深度!做到这两 ...

最新文章

  1. 与Jeff Sutherland谈敏捷领导力
  2. 按失真类型分类整理TID2008
  3. Github系列之二:开源 一行代码实现多形式多动画的推送小红点WZLBadge(iOS)
  4. 你的Wi-Fi 还安全吗?全球重大漏洞WPA2 KRACK 详细分析报告
  5. SAP 电商云 Spartacus UI 的 CORS 设置
  6. ubuntu nginx添加站点配置失效处理
  7. Fedora 13 正确安装 VirtualBox 3.2.x 的 步骤
  8. 如何在秋招中拿到offer?
  9. 5G模块M.2座子管脚和封装分析
  10. Windows批处理(.bat)常用命令教程
  11. JMeter自动化测试工具超详细基础讲解(一)
  12. 【安卓学习之第三方库】 消息推送之阿里云推送
  13. 其他浏览器可以上网,只有谷歌浏览器不行解决方案
  14. log4j从入门到了解
  15. 【PMAC】Chapter2:Pewin Pro32出现EAccessViolation
  16. 使用echarts生成海友网企业全国分布地图
  17. 判断机器大端还是小端
  18. 星环科技:坚持国产自主路线,突破大数据的细分应用场景
  19. android小程序-电子钢琴-滑动连续响应
  20. FOFA网络空间搜索引擎

热门文章

  1. 基于Ajax提交formdata数据、错误信息展示和局部钩子、全局钩子的校验。
  2. iOS百度地图的相关开发(一)
  3. 微信用户量破6.5亿 首超移动QQ
  4. 传统 Ajax 已死,Fetch 永生
  5. PHP单例模式经典讲解
  6. 在IIS8添加WCF服务支持
  7. Jmeter_模板设置默认请求参数
  8. 19、SOAP安装,运用与比对结果解释
  9. 记一次java-selenium自动抢红包最简单案例1
  10. js this指向分析