最近帮朋友做个网站,实现用邮箱订阅功能,所以现在把这个发送邮件的功能放在这里,算是这两天工作的总结吧!

首先,想要实现订阅功能,要把邮箱保存,但是这个做的是个小网站,前后台交互的太少了,所以我就直接保存在了文件里面,用到的时候,直接读取。

下面是保存邮箱号到本地文件的代码。

  1. package ccom.llf.smfp;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.File;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileReader;
  7. import java.io.FileWriter;
  8. import java.io.IOException;
  9. import java.io.PrintWriter;
  10.  
  11. import javax.servlet.ServletException;
  12. import javax.servlet.http.HttpServlet;
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.servlet.http.HttpServletResponse;
  15.  
  16. public class SendEmail extends HttpServlet {
  17. /**
  18. * 如果是get请求就重写doget方法,如果是其他的也是一样对应的
  19. */
  20. @Override
  21. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  22. String filename =this.getClass().getClassLoader().getResource("/").getPath()+"email.text";
  23. String filename1 =this.getClass().getClassLoader().getResource("/").getPath()+"count.text";
  24. /*filename = filename.substring(1, filename.length());
  25. filename1 = filename1.substring(1, filename1.length());*/
  26. response.setContentType("application/text; charset=utf-8");
  27. PrintWriter out = response.getWriter();
  28.  
  29. //判断该邮箱时候已经订阅过
  30. FileReader fr=new FileReader(filename);
  31. BufferedReader br=new BufferedReader(fr);
  32. String line="";
  33. String[] arrs=null;
  34. while ((line=br.readLine())!=null) {
  35. if(line.equals(request.getParameter("SendEmail").toString()+"\t")){
  36. out.write("1");
  37. return;
  38. }
  39. }
  40. br.close();
  41. fr.close();
  42.  
  43. FileWriter writer = new FileWriter(filename, true);
  44. //writer.write(request.getParameter("SendEmail").toString()+ ";"+"/r/n");
  45. writer.write(request.getParameter("SendEmail").toString()+"\t\n");
  46. writer.close();
  47.  
  48. File f = new File(filename1);
  49. int count = 0;
  50. if (!f.exists()) {
  51. writeFile(filename1, 100);
  52. }
  53. try {
  54. BufferedReader in = new BufferedReader(new FileReader(f));
  55. try {
  56. count = Integer.parseInt(in.readLine())+1;
  57. writeFile(filename1, count);
  58. out.write(String.valueOf(count));
  59. } catch (NumberFormatException e) {
  60. e.printStackTrace();
  61. } catch (IOException e) {
  62. e.printStackTrace();
  63. }
  64. } catch (FileNotFoundException e) {
  65. e.printStackTrace();
  66. }
  67.  
  68. }
  69.  
  70. public static void writeFile(String filename, int count) {
  71.  
  72. try {
  73. PrintWriter out = new PrintWriter(new FileWriter(filename));
  74. out.println(count);
  75. out.close();
  76. } catch (IOException e) {
  77. e.printStackTrace();
  78. }
  79. }
  80.  
  81. }

这里用到的就是简单的输入输出流 ,就不做过多的讲解。

下面当腰发邮件的时候,需要开启邮箱smtp服务,获取授权码。

我们的是qq邮箱,这里以qq邮箱为例,在QQ邮箱的设置——>账号——>下拉有个pop3/smtp服务  开启,获取授权码。。发邮件的时候,就用到授权码,不直接用密码,这样防止账户安全吧。

  1. package com.poi;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.File;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileOutputStream;
  8. import java.io.OutputStream;
  9. import java.io.OutputStreamWriter;
  10. import java.io.UnsupportedEncodingException;
  11. import java.util.Properties;
  12.  
  13. import javax.activation.DataHandler;
  14. import javax.activation.DataSource;
  15. import javax.activation.FileDataSource;
  16. import javax.mail.BodyPart;
  17. import javax.mail.Message;
  18. import javax.mail.Multipart;
  19. import javax.mail.Session;
  20. import javax.mail.Transport;
  21. import javax.mail.internet.InternetAddress;
  22. import javax.mail.internet.MimeBodyPart;
  23. import javax.mail.internet.MimeMessage;
  24. import javax.mail.internet.MimeMultipart;
  25.  
  26. public class SendMail2 {
  27.  
  28. private String host = "smtp.qq.com"; // smtp服务器
  29. private static String from = ""; // 发件人邮箱号
  30. private static String to = ""; // 收件人邮箱号
  31. private String affix = ""; // 附件地址
  32. private String affixName = ""; // 附件名称
  33. private static String user = ""; // 用户名
  34. private static String pwd = ""; // 授权码
  35. private String subject = "hello"; // 邮件标题
  36.  
  37. public void setAddress(String from, String to, String subject) {
  38. this.from = from;
  39. this.to = to;
  40. this.subject = subject;
  41. }
  42.  
  43. public void setAffix(String affix, String affixName) {
  44. this.affix = affix;
  45. this.affixName = affixName;
  46. }
  47.  
  48. public void send(String host, String user, String pwd) {
  49. this.host = host;
  50. this.user = user;
  51. this.pwd = pwd;
  52.  
  53. Properties props = new Properties();
  54.  
  55. // 设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)
  56. props.put("mail.smtp.host", host);
  57. // 需要经过授权,也就是有户名和密码的校验,这样才能通过验证
  58. props.put("mail.smtp.auth", "true");
  59. props.put("mail.smtp.port", 465);
  60. props.put("mail.smtp.ssl.enable", true);
  61. // 用刚刚设置好的props对象构建一个session
  62. Session session = Session.getDefaultInstance(props);
  63.  
  64. // 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
  65. // 用(你可以在控制台(console)上看到发送邮件的过程)
  66. session.setDebug(true);
  67.  
  68. // 用session为参数定义消息对象
  69. MimeMessage message = new MimeMessage(session);
  70. try {
  71. // 加载发件人地址
  72. message.setFrom(new InternetAddress(from));
  73. // 加载收件人地址
  74. message.addRecipient(Message.RecipientType.TO, new InternetAddress(
  75. to));
  76. // 加载标题
  77. message.setSubject(subject);
  78.  
  79. // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
  80. Multipart multipart = new MimeMultipart();
  81.  
  82. // 设置邮件的文本内容
  83. BodyPart contentPart = new MimeBodyPart();
  84. contentPart.setText("第二种方法···");
  85. multipart.addBodyPart(contentPart);
  86. // 添加附件
  87. BodyPart messageBodyPart = new MimeBodyPart();
  88. DataSource source = new FileDataSource(affix);
  89. // 添加附件的内容
  90. messageBodyPart.setDataHandler(new DataHandler(source));
  91. // 添加附件的标题
  92. // 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
  93. sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
  94. messageBodyPart.setFileName("=?GBK?B?"
  95. + enc.encode(affixName.getBytes()) + "?=");
  96. multipart.addBodyPart(messageBodyPart);
  97.  
  98. // 将multipart对象放到message中
  99. message.setContent(multipart);
  100. // 保存邮件
  101. message.saveChanges();
  102. // 发送邮件
  103. Transport transport = session.getTransport("smtp");
  104. // 连接服务器的邮箱
  105. transport.connect(host, user, pwd);
  106. // 把邮件发送出去
  107. transport.sendMessage(message, message.getAllRecipients());
  108. transport.close();
  109. } catch (Exception e) {
  110. e.printStackTrace();
  111. }
  112. }
  113.  
  114. public static void main(String[] args) {
  115. //先往你的本地写一个文件,这样附件就坑定存在了。
  116. File file = new File("D:\\22.cvg");
  117. try {
  118. OutputStream os = new FileOutputStream(file);
  119. BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os,
  120. "utf-8"));
  121. bw.write("hello");
  122. bw.close();
  123. os.close();
  124. } catch (Exception e) {
  125. // TODO Auto-generated catch block
  126. e.printStackTrace();
  127. }
  128.  
  129. SendMail2 cn = new SendMail2();
  130. // 设置发件人地址、收件人地址和邮件标题
  131. cn.setAddress(from, to, user);
  132. // 设置要发送附件的位置和标题
  133. cn.setAffix("D:\\22.cvg", "22.cvg");
  134. // 设置smtp服务器以及邮箱的帐号和密码
  135. cn.send("smtp.qq.com", from,pwd);
  136. }
  137. }

这样我们就可以发送邮件了。。。

使用java发送QQ邮件的总结的更多相关文章

  1. java mail Received fatal alert: handshake_failure java 无法发送邮件问题 java 发送qq邮件(含源码)

     java 无法发送邮件问题 java 发送qq邮件 报错:java mail Received fatal alert: handshake_failure (使用ssl) javax.mail.M ...

  2. Java发送QQ邮件

    面试的时候被问到这个问题,别人问我用Java发过邮件没有,被问得一脸懵逼.然后就研究了一下,不是很难,按照网上的方法折腾了几天就搞出来了. 首先,使用QQ邮箱发送邮件之前需要在邮箱里面配置,开启pop ...

  3. 使用java发送QQ邮件

    使用java发送邮件的时候,需要先下载两个jar包,连接如下: JavaMail mail.jar 1.4.5 JAF(版本 1.1.1) activation.jar 然后将这连个包导入,博主用的是 ...

  4. Java实现QQ邮件发送

    首先我们需要两个jar包,点击下面即可下载这两个包: JavaMail mail.jar 1.4.5 JAF(版本 1.1.1) activation.jar 我们这里采用QQ邮箱发送邮件为例,代码如 ...

  5. Java实现QQ邮件发送客户端

    目录 一.前言:QQ邮件发送程序 二.封装SMTP操作 三.实现多线程接收 四.QQ邮件客户端界面设计 1.连接按钮 2.发送按钮 五.QQ邮件发送效果演示 六.总结 一.前言:QQ邮件发送程序 在上 ...

  6. CI框架使用PHPmail插件发送QQ邮件:

    有助请顶,不好请评.0:33 2016/3/12CI框架使用PHPmail插件发送QQ邮件:发送成功,不过修改了主机参数,还包含了一个phpmail中的一个另外的文件,详见下方:参见:http://c ...

  7. 5分钟 wamp下php phpmaile发送qq邮件 2015最新方法说明

    13:40 2015/11/20 5分钟 wamp下php phpmaile发送qq邮件 2015最新方法说明 关键点:现在qq邮箱开通smtp服务后会给你一个很长的独立新密码,发邮件配置中的密码需要 ...

  8. 【python】脚本连续发送QQ邮件

    今天习得用python写一个连续发送QQ邮件的脚本,经过测试,成功给国内外的服务器发送邮件,包括QQ邮箱.163邮箱.google邮箱,香港科技大学的邮箱和爱丁堡大学的邮箱.一下逐步解答相关技巧. 首 ...

  9. python3:利用SMTP协议发送QQ邮件+附件

    转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...

随机推荐

  1. elixir mac环境

    1.升级brew brew update 2.安装 erlang brew install erlang 3.安装Elixir: brew install elixir 终端 iex iex> ...

  2. 优雅的实现多类型列表的Adapter

    1引言 在开发中经常会遇到,一个列表(RecyclerView)中有多种布局类型的情况.前段时间,看到了这篇文章 [译]关于 Android Adapter,你的实现方式可能一直都有问题(http:/ ...

  3. 【java8】为java8的foreach正名

    首先为自己没有经过严格测试得出的错误结论感到抱歉,原博文,测试完感觉自己发现了一个新bug,后来思前想后觉得不应该是这样的,如果效率差的这么多,jdk的开发人员会不去优化它吗,但是怎么重复测试任然得到 ...

  4. Promise 初步

    在JavaScript的世界中,所有代码都是单线程执行的. 由于这个“缺陷”,导致JavaScript的所有网络操作,浏览器事件,都必须是异步执行.异步执行可以用回调函数实现: function ca ...

  5. springboot学习入门之五---开发Web应用之JSP篇

    转载:http://tengj.top/2017/03/13/springboot5/ 1整体结构 整体的框架结构,跟前面介绍Thymeleaf的时候差不多,只是多了webapp这个用来存放jsp的目 ...

  6. selenium&phantomjs实战--漫话爬取

    为什么直接保存当前网页,而不是找到所有漫话链接,再有针对性的保存图片? 因为防盗链的原因,当直接保存漫话链接图片时,只能保存到防盗链的图片. #!/usr/bin/env python # _*_ c ...

  7. Oracle EBS 获取说明性弹性域全局数据元

    SELECT b.flex_value_set_id, t.application_column_name, t.form_left_prompt FROM fnd_descriptive_flexs ...

  8. Semaphore-信号灯机制

    我们创建一个可扩展大小的线程池,并且需要在线程池内同时让有限数目的线程并发运行时,就需要用到Semaphore(信号灯机制),Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目 ...

  9. 一些centos 6和centos 7的区别

      CentOS 6(OLE 6,RHEL 6类似) CcnetOS 7(OLE 7,RHEL 7类似) 影响 默认文件系统 ext4 xfs 大量小文件在ext4上工作性能较好在64位linux中, ...

  10. Python初学者第二十三天 函数进阶(2)装饰器

    装饰器: 需求----> 写一个功能,测试其他同事函数的调用效率. 第一版:功能版 import time def func(): time.sleep(0.2) print('非常复杂') d ...