java发送邮件带url、html
来源:互联网 发布:最短路径算法复杂度 编辑:程序博客网 时间:2024/05/22 01:40
代码也是在网上扒的,自己用到了也整理了下方便以后再用。
创建一个密码验证器类
package com.mail.test;import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;public class MailAuthenticator extends Authenticator {public MailAuthenticator(String userName,String userPwd){this.userAccout = userName;this.userPassword = userPwd;}private String userAccout;private String userPassword;public String getUserAccout() {return userAccout;}public void setUserAccout(String userAccout) {this.userAccout = userAccout;}public String getUserPassword() {return userPassword;}public void setUserPassword(String userPassword) {this.userPassword = userPassword;}@Overrideprotected PasswordAuthentication getPasswordAuthentication() {// TODO Auto-generated method stubreturn new PasswordAuthentication(userAccout, userPassword);}}
邮箱实体类:
package com.mail.test;import java.util.Properties;public class MainInfo {// 发送邮件的服务器的IP和端口 private String mailServerHost; private String mailServerPort = "25"; // 邮件发送者的地址 private String fromAddress; // 邮件接收者的地址 private String toAddress; // 登陆邮件发送服务器的用户名和密码 private String userName; private String password; // 是否需要身份验证 private boolean validate = false; // 邮件主题 private String subject; // 邮件的文本内容 private String content; // 邮件附件的文件名 private String[] attachFileNames; /** * 获得邮件会话属性 */ public Properties getProperties(){ Properties p = new Properties(); p.put("mail.smtp.host", this.mailServerHost); p.put("mail.smtp.port", this.mailServerPort); p.put("mail.smtp.auth", validate ? "true" : "false"); return p; }public String getMailServerHost() {return mailServerHost;}public void setMailServerHost(String mailServerHost) {this.mailServerHost = mailServerHost;}public String getMailServerPort() {return mailServerPort;}public void setMailServerPort(String mailServerPort) {this.mailServerPort = mailServerPort;}public String getFromAddress() {return fromAddress;}public void setFromAddress(String fromAddress) {this.fromAddress = fromAddress;}public String getToAddress() {return toAddress;}public void setToAddress(String toAddress) {this.toAddress = toAddress;}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 boolean isValidate() {return validate;}public void setValidate(boolean validate) {this.validate = validate;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String[] getAttachFileNames() {return attachFileNames;}public void setAttachFileNames(String[] attachFileNames) {this.attachFileNames = attachFileNames;} }
邮件发送类:
package com.mail.test;import java.util.Date;import java.util.Properties;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.Multipart;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;public class MailSender {/** * * @title sendMailText * @description 发送纯文本形式邮件 * @date 2016-4-26 下午11:13:06 * @param mainInfo * @return boolean */public boolean sendMailText(MainInfo mainInfo) {Properties props = mainInfo.getProperties();MailAuthenticator mailauthenticator = null;if (mainInfo.isValidate()) {// 如果需要身份认证,则创建一个密码验证器mailauthenticator = new MailAuthenticator(mainInfo.getFromAddress(),mainInfo.getPassword());}Session sendMailSession = Session.getDefaultInstance(props,mailauthenticator);Message sendMailMessage = new MimeMessage(sendMailSession);try {Address from = new InternetAddress(mainInfo.getFromAddress());sendMailMessage.setFrom(from);// 创建邮件的接收者地址,并设置到邮件消息中Address to = new InternetAddress(mainInfo.getToAddress());sendMailMessage.setRecipient(Message.RecipientType.TO, to);// 设置邮件消息的主题sendMailMessage.setSubject(mainInfo.getSubject());// 设置邮件消息发送的时间sendMailMessage.setSentDate(new Date());// 设置邮件消息的主要内容sendMailMessage.setText(mainInfo.getContent());// 发送邮件Transport.send(sendMailMessage);return true;} catch (AddressException e) {// TODO Auto-generated catch blockSystem.out.println("邮件地址有误。。");e.printStackTrace();return false;} catch (MessagingException e) {// TODO Auto-generated catch blocke.printStackTrace();return false;}}/** * * @title sendMailHtml * @description 发送带有html的邮件 * @date 2016-4-26 下午11:13:26 * @param mainInfo * @return boolean */public boolean sendMailHtml(MainInfo mainInfo) {Properties props = mainInfo.getProperties();MailAuthenticator mailauthenticator = null;if (mainInfo.isValidate()) {// 如果需要身份认证,则创建一个密码验证器mailauthenticator = new MailAuthenticator(mainInfo.getFromAddress(),mainInfo.getPassword());}Session sendMailSession = Session.getDefaultInstance(props,mailauthenticator);Message sendMailMessage = new MimeMessage(sendMailSession);try {Address from = new InternetAddress(mainInfo.getFromAddress());sendMailMessage.setFrom(from);// 创建邮件的接收者地址,并设置到邮件消息中Address to = new InternetAddress(mainInfo.getToAddress());sendMailMessage.setRecipient(Message.RecipientType.TO, to);// 设置邮件消息的主题sendMailMessage.setSubject(mainInfo.getSubject());// 设置邮件消息发送的时间sendMailMessage.setSentDate(new Date());// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象Multipart mainPart = new MimeMultipart();// 创建一个包含HTML内容的MimeBodyPartBodyPart html = new MimeBodyPart();// 设置HTML内容html.setContent(mainInfo.getContent(), "text/html; charset=utf-8");mainPart.addBodyPart(html);// 将MiniMultipart对象设置为邮件内容sendMailMessage.setContent(mainPart);// 发送邮件Transport.send(sendMailMessage);return true;} catch (AddressException e) {System.out.println("邮件地址有误。。");e.printStackTrace();return false;} catch (MessagingException e) {e.printStackTrace();return false;}}}
组织发送内容,包含url、html,测试发送:
package com.mail.test;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;public class MailTest {public static void main(String[] args) {try {MailSender sender = new MailSender();MainInfo mainInfo = new MainInfo();mainInfo.setMailServerHost("smtp.163.com"); //imap.exmail.qq.commainInfo.setMailServerPort("25");mainInfo.setUserName("烦烦烦");mainInfo.setFromAddress("*******");mainInfo.setPassword("*******");mainInfo.setToAddress("*******");mainInfo.setSubject("测试内容标题");StringBuffer url = new StringBuffer();url.append("http://locahost:8080");url.append("noa");url.append("/reportFindPassword/updatePassword.action?");url.append("employeeCode=123456");url.append("&employeeName="+URLEncoder.encode("发送邮件测试", "UTF-8"));url.append("&pemployeeCode=123456");url.append("&pemployeeName="+URLEncoder.encode("哈哈", "UTF-8"));url.append("&email=*******@***.com");url.append("&dateTime=20160418162538");StringBuffer content = new StringBuffer();content.append("<div><div style='margin-left:4%;'>");content.append("<p style='color:red;'>");content.append("啊啊啊(123456)您好:</p>");content.append("<p style='text-indent: 2em;'>您正在使用密码找回功能,请点击下面的链接完成密码找回。</p>");content.append("<p style='text-indent: 2em;display: block;word-break: break-all;'>");content.append("链接地址:<a style='text-decoration: none;' href='"+url.toString()+"'>"+url.toString()+"</a></p>");content.append("</div>");content.append("<ul style='color: rgb(169, 169, 189);font-size: 18px;'>");content.append("<li>为了保障您帐号的安全,该链接有效期为12小时。</li>");content.append("<li>该链接只能使用一次,请周知。</li>");content.append("<li>如果该链接无法点击,请直接复制以上网址到浏览器地址栏中访问。</li>");content.append("<li>请您妥善保管,此邮件无需回复。</li>");content.append("</ul>");content.append("</div>");mainInfo.setContent(content.toString());mainInfo.setValidate(true);sender.sendMailHtml(mainInfo);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}
其中链接中包含的中文做URL转码,
最后的邮件为:
此类邮件URL需要做校验,如果链接中只包含一个标示,则只对当前标示加密,如果所有参数都暴露在地址栏中可以将所有参数拼起来用MD5或者其他方式加密后存放在该URL中,例如为validateCode,此次也要对validateCode的值做encode转换,不然特殊符号在URL中会自动转换,之后只对validateCode校验即可知道该链接是否正确。
demo下载地址
欢迎大家指正讨论。
1 0
- java发送邮件带url、html
- java发送带附件邮件
- Java邮件发送带附件
- java发送邮件带附件
- Java发送邮件(带附件)
- Java发送邮件(带附件)
- Java 发送带附件邮件
- Java发送邮件(带附件)
- Java发送邮件(带附件)
- java发送邮件带附件
- java发送带附件邮件
- javamail发送文本邮件、HTML邮件及带附件邮件
- javamail 发送 带附件的 html邮件
- Sendmail 发送带附件的 html 邮件
- C#发送带图片HTML邮件
- java - HtmlEmail发送html邮件
- 用java实现的邮件系统六(javamail发送复杂邮件-带附件和html)
- java邮件开发(8、用spring发送HTML嵌套图片并带附件)
- 经典排序之归并排序
- Redis的AOF持久化-Redis学习笔记四
- 第四次c++作业
- [C++]资源管理
- 树状数组
- java发送邮件带url、html
- mysql连接字符串
- iOS—ViewController的生命周期分析和使用
- 深入理解HTTP Session
- sublime使用基础
- like关键字优化
- 串行还是并行
- @property的属性详解
- c++第4次实验-分数的累积