翻了很多资料,研究了一段时间,终于实现了功能
首先,我们发邮件需要有邮件的信息,写一个类来封装邮件的内容和主题:
/** * 主要用来封装所要发送的邮件信息 * @author Administrator * */ public class SimpleMail { //邮件中的主题 private String subject; //邮件的内容(正文) private String content; //可根据需要增加其他邮件元素 public void setSubject(String subject) { this.subject = subject; } public void setContent(String content) { this.content = content; } public String getSubject() { return subject; } public String getContent() { return content; } }
有了邮件的信息,我们就要有邮箱的登陆账号密码,然后进行验证:
import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; /** * 服务器邮箱登录验证 */ public class MailAuthenticator extends Authenticator { // 用户名(登录邮箱) private String username; // 密码 private String password; /** * 初始化邮箱和密码 * @param username 邮箱 * @param password 密码 */ public MailAuthenticator(String username, String password){ this.username = username; this.password = password; } String getPassword() { return password; } protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } String getUsername() { return username; } public void setPassword(String password) { this.password = password; } public void setUsername(String username) { this.username = username; } }
之后我们需要判断属于那种邮箱,是126的、还是163的、或者其他的
public class Const { public final static String FROMEMAIL = "organisms_master@126.com"; public final static String FROMEMAIL_PASSWORD = "master"; public static String WEB_SITE="localhost:8080"; public static String PROJECT="organisms-master"; public static String returnEmailWeb(String email) { String str = null; if (email.indexOf("@qq.com") != -1) { // qq邮箱 return "https://mail.qq.com/"; } if (email.indexOf("@126.com") != -1) { // 126 return "http://www.126.com"; } if (email.indexOf("@hotmail.com") != -1) { // hotmail return "http://www.hotmail.com"; } if (email.indexOf("@163.com") != -1 || email.indexOf("@yeah.net") != -1) { // 163 yeah return "http://email.163.com/"; } if (email.indexOf("@yahoo.com.cn") != -1 || email.indexOf("@yahoo.cn") != -1) { // yahoo return "http://mail.cn.yahoo.com/"; } if (email.indexOf("@sina.com") != -1 || email.indexOf("@vip.sina.com") != -1) { // sina return "http://mail.sina.com.cn/"; } if (email.indexOf("@gmail.com") != -1) { // gmail return "http://mail.google.com"; } if (email.indexOf("@139.com") != -1) { return "http://mail.10086.cn/"; } if (email.indexOf("@sohu.com") != -1) { return "http://mail.sohu.com/"; } return str; } public static void main(String[] args) { System.out.println(returnEmailWeb("664659008@qq.com")); System.out.println(returnEmailWeb("angel__6386@126.com")); System.out.println(returnEmailWeb("mrzhangl@hotmail.com")); System.out.println(returnEmailWeb("name@163.com")); } }
最后要发送邮件我们需要,邮件发送器,里面的注释非常清楚:
/** * 此类实现邮件的单发、群发等等,是邮件发送的核心类 * @author Administrator * */ import java.util.List; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.Message.RecipientType; 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 SimpleMailSender { // 发送邮件的props文件 private final transient Properties props = System.getProperties(); // 邮件服务器登录验证 private transient MailAuthenticator authenticator; // 邮箱session private transient Session session; /** * 初始化邮件发送器 * * @param smtpHostName * SMTP邮件服务器地址 * @param username * 发送邮件的用户名(地址) * @param password * 发送邮件的密码 */ public SimpleMailSender(final String smtpHostName, final String username, final String password) { init(username, password, smtpHostName); } /** * 初始化邮件发送器 * * @param username * 发送邮件的用户名(地址),并以此解析SMTP服务器地址 * @param password * 发送邮件的密码 */ public SimpleMailSender(final String username, final String password) { // 通过邮箱地址解析出smtp服务器,对大多数邮箱都管用 final String smtpHostName = "smtp." + username.split("@")[1]; init(username, password, smtpHostName); } /** * 初始化 * * @param username * 发送邮件的用户名(地址) * @param password * 密码 * @param smtpHostName * SMTP主机地址 */ private void init(String username, String password, String smtpHostName) { // 初始化props props.put("mail.smtp.auth", "true"); props.put("mail.smtp.host", smtpHostName); // 验证 authenticator = new MailAuthenticator(username, password); // 创建session session = Session.getInstance(props, authenticator); } /** * 发送邮件 * @param recipient收件人邮箱地址 * @param subject邮件主题 * @param content邮件内容 * @throws AddressException * @throws MessagingException */ public void send(String recipient, String subject, String content) throws AddressException, MessagingException { // 创建mime类型邮件 final MimeMessage message = new MimeMessage(session); // 设置发信人 message.setFrom(new InternetAddress(authenticator.getUsername())); // 设置收件人 message.setRecipient(RecipientType.TO, new InternetAddress(recipient)); // 设置主题 message.setSubject(subject); // 设置邮件内容 Multipart mp = new MimeMultipart("related"); MimeBodyPart mbp = new MimeBodyPart(); mbp.setContent(content.toString(), "text/html;charset=utf-8"); mp.addBodyPart(mbp); message.setContent(mp); // 设置邮件内容 // message.setContent(content.toString(), "text/html;charset=utf-8"); // 发送 Transport.send(message); } /** * 群发邮件 * * @param recipients收件人们 * @param subject * 主题 * @param content * 内容 * @throws AddressException * @throws MessagingException */ public void send(List<String> recipients, String subject, String content) throws AddressException, MessagingException { // 创建mime类型邮件 final MimeMessage message = new MimeMessage(session); // 设置发信人 message.setFrom(new InternetAddress(authenticator.getUsername())); // 设置收件人们 final int num = recipients.size(); InternetAddress[] addresses = new InternetAddress[num]; for (int i = 0; i < num; i++) { addresses[i] = new InternetAddress(recipients.get(i)); } message.setRecipients(RecipientType.TO, addresses); // 设置主题 message.setSubject(subject); // 设置邮件内容 message.setContent(content.toString(), "text/html;charset=utf-8"); // 发送 Transport.send(message); } /** * 发送邮件 * * @param recipient收件人邮箱地址 * @param mail邮件对象 * @throws AddressException * @throws MessagingException * */ public void send(String recipient, SimpleMail mail) throws AddressException, MessagingException { send(recipient, mail.getSubject(), mail.getContent()); } /** * 发送带附件的邮件 * * @param recipient * @param mail * @param file * 附件完整路径 */ public void send(String recipient, SimpleMail mail,String fileAttachment,String filename) throws Exception{ // 创建mime类型邮件 final MimeMessage message = new MimeMessage(session); // 设置发信人 message.setFrom(new InternetAddress(authenticator.getUsername())); // 设置收件人 message.setRecipient(RecipientType.TO, new InternetAddress(recipient)); // 设置主题 message.setSubject(mail.getSubject()); // 设置邮件内容 Multipart mp = new MimeMultipart(); MimeBodyPart mbp = new MimeBodyPart(); DataSource source =new FileDataSource(fileAttachment); mbp.setDataHandler(new DataHandler(source)); mbp.setFileName(filename); mp.addBodyPart(mbp); // 设置邮件内容 message.setContent(mp); // 发送 Transport.send(message); } /** * 群发邮件 * * @param recipients * 收件人们 * @param mail * 邮件对 象 * @throws AddressException * @throws MessagingException */ public void send(List<String> recipients, SimpleMail mail) throws AddressException, MessagingException { send(recipients, mail.getSubject(), mail.getContent()); } public static void main(String[] args) throws Exception { /* 单发 */ SimpleMail sm = new SimpleMail(); sm.setSubject("最近提示"); sm.setContent("我是<a href=\"http://www.baidu.com\">百度</a>"); SimpleMailSender sms = new SimpleMailSender(Const.FROMEMAIL, Const.FROMEMAIL_PASSWORD); /* sms.send(list, subject, content)可以变成群发 */ sms.send("664659008@qq.com", sm); } }
下面写一个jsp测试一下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>用户注册</title> <script type="text/javascript" src="<%=path%>/js/jquery-1.7.1.min.js"></script> <script type="text/javascript" src="<%=path%>/js/jquery1.9.validate.js" ></script> <script type="text/javascript" src="<%=path%>/bootstrap/js/bootstrap.min.js"></script> <link rel="stylesheet" media="screen" href="<%=path%>/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="<%=path%>/bootstrap/css/bootstrap-responsive.min.css"> <style type="text/css"> body { padding-top: 40px; padding-bottom: 40px; background-color: #f5f5f5; } .form-signin { max-width: 430px; padding: 19px 29px 29px; margin: 0 auto 20px; background-color: #fff; border: 1px solid #e5e5e5; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05); -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05); box-shadow: 0 1px 2px rgba(0,0,0,.05); } .form-signin .form-signin-heading, .form-signin .checkbox { margin-bottom: 10px; } .form-signin input[type="text"], .form-signin input[type="password"] { font-size: 16px; height: auto; margin-bottom: 15px; padding: 7px 9px; } .input-block-level-width { display: block; width: 60%; min-height: 30px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .error-input-box{ border: 1px solid #F00; } .errors { color:red; font-family: Tahoma, Verdana; font-size:9pt; } </style> </head> <body> <div > <form id="registerForm" action="<%=path%>/account/accountAction!doRegister.action" method="post" > 账号:<input type="text" name="user.username" /><span></span> <br /> 密码:<input type="password" name="user.password" /><span></span> <br /> 邮箱:<input type="text" name="user.email" /><span></span> <br /> <input type="submit" value="注册"/> </form> </div> <!-- /container --> </body> </html> <script type="text/javascript"> $(document).ready(function(){ $("#registerForm").validate({ event: "submit", rules: { "user.username" : { //非空判断 required: true, minlength:4, maxlength:10 }, "user.password" : { required: true }, "user.email" : { required: true, //邮箱格式 email:true } }, messages: { "user.username" : { required: "请输入用户名", minlength:"长度不能小于{0}", maxlength:"长度不能长于{0}" }, "user.password" : { required: "请输入密码" }, "user.email" : { required: "请输入邮箱", email:"邮箱格式不正确" } }, errorPlacement: function(error, element) { element.next().html("<font color='red'>"+error.html()+"</font>"); element.keyup(function(){ element.next().html(""); }); }, showErrors: function(errorMap, errorList) { this.defaultShowErrors(); },onfocusout : false }); }); </script>
BootStrap这一个很有用,可以到网上看看,找它的中文网站,包含了很多前端的技术,希望对你们有用。
希望对你们有帮助!!!
转载于:https://blog.51cto.com/7915791/1353353