javaWEB邮件测试
新建一个工具类:
Mail.java
该类的主要关键点是:1、设置系统属性。也就是你是用什么协议来进行邮件发送的,邮件协议有很多在种,比如impt,smpt,prop等协议,
我现在测试用的是smpt协议,smpt协议里也分为很多种,以为有不同的邮箱QQ,126,新浪等,所以就有不同的smpt系统属性了(注:这些
都可以再网上查到),我用的协议是smpt.qq.com,通过property将它存到map集合里面:props.put("host","smpt.qq.com")
2、准备获取邮件回话对象,通过mail.jar包中Session.getDefaultInstance()来获取回话。
3、准备创建MIME邮件对象,jar包自带的MimeMessage(session)方法
4、设置smtp身份认证:props.put("mail.smtp.auth", "true");
5、定义邮件主题:mimeMsg.setSubject(mailSubject);6、
6、定义邮件内容:bp.setContent("" + mailBody, "text/html;charset=GBK");
7、设置发信人:mimeMsg.setFrom(new InternetAddress(from));
8、定义收信人:mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
9、定义抄送人:mimeMsg.setRecipients(Message.RecipientType.CC, (Address[]) InternetAddress .parse(copyto));
以下是源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | package com.util; import java.util.Properties; import javax.mail.Address; 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 Mail { private MimeMessage mimeMsg; private Session session; private Properties props; private Multipart mp; private static String smtp = "smtp.qq.com" ; // smtp服务器 private static String from = "你的邮箱账号@qq.com" ; // 邮件显示名称 private static String copyto = "" ; // 抄送人邮件地址 private static String subject = "找回密码" ; // 邮件标题 private static String username = "邮箱账号" ; // 发件人真实的账户名 private static String password = "密码" ; // 发件人密码 public Mail(String smtp) { setSmtpHost(smtp); createMimeMessage(); } public void setSmtpHost(String hostName) { System.out.println( "设置系统属性:mail.smtp.host=" + hostName); if (props == null ) { props = System.getProperties(); } props.put( "mail.smtp.host" , hostName); } public boolean createMimeMessage() { try { System.out.println( "准备获取邮件会话对象!" ); session = Session.getDefaultInstance(props, null ); } catch (Exception e) { System.out.println( "获取邮件会话错误!" + e); return false ; } System.out.println( "准备创建MIME邮件对象!" ); try { mimeMsg = new MimeMessage(session); mp = new MimeMultipart(); return true ; } catch (Exception e) { System.out.println( "创建MIME邮件对象失败!" + e); return false ; } } /*定义SMTP是否需要验证*/ public void setNeedAuth( boolean need) { System.out.println( "设置smtp身份认证:mail.smtp.auth = " + need); if (props == null ) props = System.getProperties(); if (need) { props.put( "mail.smtp.auth" , "true" ); } else { props.put( "mail.smtp.auth" , "false" ); } } public void setNamePass(String name, String pass) { username = name; password = pass; } /*定义邮件主题*/ public boolean setSubject(String mailSubject) { System.out.println( "定义邮件主题!" ); try { mimeMsg.setSubject(mailSubject); return true ; } catch (Exception e) { System.err.println( "定义邮件主题发生错误!" ); return false ; } } /*定义邮件正文*/ public boolean setBody(String mailBody) { try { BodyPart bp = new MimeBodyPart(); bp.setContent( "" + mailBody, "text/html;charset=GBK" ); mp.addBodyPart(bp); return true ; } catch (Exception e) { System.err.println( "定义邮件正文时发生错误!" + e); return false ; } } /*设置发信人*/ public boolean setFrom(String from) { System.out.println( "设置发信人!" ); try { mimeMsg.setFrom( new InternetAddress(from)); //发信人 return true ; } catch (Exception e) { return false ; } } /*定义收信人*/ public boolean setTo(String to) { if (to == null ) return false ; System.out.println( "定义收信人!" ); try { mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); return true ; } catch (Exception e) { return false ; } } /*定义抄送人*/ public boolean setCopyTo(String copyto) { if (copyto == null ) return false ; try { mimeMsg.setRecipients(Message.RecipientType.CC, (Address[]) InternetAddress .parse(copyto)); return true ; } catch (Exception e) { return false ; } } /*发送邮件模块*/ public boolean sendOut() { try { mimeMsg.setContent(mp); mimeMsg.saveChanges(); System.out.println( "邮件发送中...." ); Session mailSession = Session.getInstance(props, null ); Transport transport = mailSession.getTransport( "smtp" ); transport.connect((String) props.get( "mail.smtp.host" ), username, password); transport.sendMessage(mimeMsg, mimeMsg .getRecipients(Message.RecipientType.TO)); System.out.println( "发送成功!" ); transport.close(); return true ; } catch (Exception e) { System.err.println( "邮件失败!" + e); return false ; } } /*调用sendOut方法完成发送*/ public static boolean sendAndCc(String to,String content) { Mail theMail = new Mail(smtp); theMail.setNeedAuth( true ); // 验证 if (!theMail.setSubject(subject)) return false ; if (!theMail.setBody(content)) return false ; if (!theMail.setTo(to)) return false ; if (!theMail.setCopyTo(copyto)) return false ; if (!theMail.setFrom(from)) return false ; theMail.setNamePass(username, password); if (!theMail.sendOut()) return false ; return true ; } // public static void main(String[] args) { // String smtp = "smtp.qq.com";// smtp服务器 // String from = "邮箱账号@.qq.com";// 邮件显示名称 // String to = "收件人账号@qq.com";// 收件人的邮件地址,必须是真实地址 // String copyto = "";// 抄送人邮件地址 // String subject = "测试邮件";// 邮件标题 // String content = "你好!这是测试邮件,请不要回复";// 邮件内容 // String username = "你的邮箱账号";// 发件人真实的账户名 // String password = "密码";// 发件人密码 // Mail.sendAndCc(smtp, from, to, copyto, subject, content, username, password); // } } |
以上代码,经过测试,可以运行成功。注意:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
当出现以上错误时,恭喜您已经离接收邮件不远了,否则请您解决好所有的异常后再来看这个帖子。
javax.mail和javax.activation这两个包已经在javaEE5当中属于基础包了,就是JDK中自带了已经,但是里面的方法与现在外面的mail.jar和activation.jar有一些出入,所以初学者在直接copy别人代码的时候往往会出现上面的错误。
废话不多说下面是解决方法
进到
X:\Program Files\MyEclipse 6.5\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806\data\libraryset\EE_5
这个路径里,可以看到javaee.jar,用rar把这个文件打开,然后进到javax文件夹里,删除mail.jar和activation.jar(我的javaee.jar里,这两个东西是文件夹,总之删掉就OK,不过要注意备份一下)
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率
· AI Agent爆火后,MCP协议为什么如此重要!