使用java发送QQ邮件的总结
程序员文章站
2022-04-16 09:10:21
最近帮朋友做个网站,实现用邮箱订阅功能,所以现在把这个发送邮件的功能放在这里,算是这两天工作的总结吧! 首先,想要实现订阅功能,要把邮箱保存,但是这个做的是个小网站,前后台交互的太少了,所以我就直接保存在了文件里面,用到的时候,直接读取。 下面是保存邮箱号到本地文件的代码。 这里用到的就是简单的输入 ......
最近帮朋友做个网站,实现用邮箱订阅功能,所以现在把这个发送邮件的功能放在这里,算是这两天工作的总结吧!
首先,想要实现订阅功能,要把邮箱保存,但是这个做的是个小网站,前后台交互的太少了,所以我就直接保存在了文件里面,用到的时候,直接读取。
下面是保存邮箱号到本地文件的代码。
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 71 public static void writefile(string filename, int count) { 72 73 try { 74 printwriter out = new printwriter(new filewriter(filename)); 75 out.println(count); 76 out.close(); 77 } catch (ioexception e) { 78 e.printstacktrace(); 79 } 80 } 81 82 }
这里用到的就是简单的输入输出流 ,就不做过多的讲解。
下面当腰发邮件的时候,需要开启邮箱smtp服务,获取授权码。
我们的是qq邮箱,这里以qq邮箱为例,在qq邮箱的设置——>账号——>下拉有个pop3/smtp服务 开启,获取授权码。。发邮件的时候,就用到授权码,不直接用密码,这样防止账户安全吧。
package com.poi; import java.io.bufferedreader; import java.io.bufferedwriter; import java.io.file; import java.io.filenotfoundexception; import java.io.fileoutputstream; import java.io.outputstream; import java.io.outputstreamwriter; import java.io.unsupportedencodingexception; import java.util.properties; import javax.activation.datahandler; import javax.activation.datasource; import javax.activation.filedatasource; import javax.mail.bodypart; import javax.mail.message; import javax.mail.multipart; import javax.mail.session; import javax.mail.transport; import javax.mail.internet.internetaddress; import javax.mail.internet.mimebodypart; import javax.mail.internet.mimemessage; import javax.mail.internet.mimemultipart; public class sendmail2 { private string host = "smtp.qq.com"; // smtp服务器 private static string from = ""; // 发件人邮箱号 private static string to = ""; // 收件人邮箱号 private string affix = ""; // 附件地址 private string affixname = ""; // 附件名称 private static string user = ""; // 用户名 private static string pwd = ""; // 授权码 private string subject = "hello"; // 邮件标题 public void setaddress(string from, string to, string subject) { this.from = from; this.to = to; this.subject = subject; } public void setaffix(string affix, string affixname) { this.affix = affix; this.affixname = affixname; } public void send(string host, string user, string pwd) { this.host = host; this.user = user; this.pwd = pwd; properties props = new properties(); // 设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器) props.put("mail.smtp.host", host); // 需要经过授权,也就是有户名和密码的校验,这样才能通过验证 props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", 465); props.put("mail.smtp.ssl.enable", true); // 用刚刚设置好的props对象构建一个session session session = session.getdefaultinstance(props); // 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使 // 用(你可以在控制台(console)上看到发送邮件的过程) session.setdebug(true); // 用session为参数定义消息对象 mimemessage message = new mimemessage(session); try { // 加载发件人地址 message.setfrom(new internetaddress(from)); // 加载收件人地址 message.addrecipient(message.recipienttype.to, new internetaddress( to)); // 加载标题 message.setsubject(subject); // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件 multipart multipart = new mimemultipart(); // 设置邮件的文本内容 bodypart contentpart = new mimebodypart(); contentpart.settext("第二种方法···"); multipart.addbodypart(contentpart); // 添加附件 bodypart messagebodypart = new mimebodypart(); datasource source = new filedatasource(affix); // 添加附件的内容 messagebodypart.setdatahandler(new datahandler(source)); // 添加附件的标题 // 这里很重要,通过下面的base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码 sun.misc.base64encoder enc = new sun.misc.base64encoder(); messagebodypart.setfilename("=?gbk?b?" + enc.encode(affixname.getbytes()) + "?="); multipart.addbodypart(messagebodypart); // 将multipart对象放到message中 message.setcontent(multipart); // 保存邮件 message.savechanges(); // 发送邮件 transport transport = session.gettransport("smtp"); // 连接服务器的邮箱 transport.connect(host, user, pwd); // 把邮件发送出去 transport.sendmessage(message, message.getallrecipients()); transport.close(); } catch (exception e) { e.printstacktrace(); } } public static void main(string[] args) { //先往你的本地写一个文件,这样附件就坑定存在了。 file file = new file("d:\\22.cvg"); try { outputstream os = new fileoutputstream(file); bufferedwriter bw = new bufferedwriter(new outputstreamwriter(os, "utf-8")); bw.write("hello"); bw.close(); os.close(); } catch (exception e) { // todo auto-generated catch block e.printstacktrace(); } sendmail2 cn = new sendmail2(); // 设置发件人地址、收件人地址和邮件标题 cn.setaddress(from, to, user); // 设置要发送附件的位置和标题 cn.setaffix("d:\\22.cvg", "22.cvg"); // 设置smtp服务器以及邮箱的帐号和密码 cn.send("smtp.qq.com", from,pwd); } }
这样我们就可以发送邮件了。。。
上一篇: SpringAOP术语
下一篇: 数据分析算法---线性回归(初识)