最近因项目的需要,做了注册邮件验证的功能,所以整理了一下java简单的邮件发送,需要用的mail.jar 请自己在网上下载
一。定义一个封装邮件内容的类,代码如下
二,定义验证邮件的实体类,即用来验证邮件地址和密码是否可用
三。就是编写我们真正用来发送邮件的类
好了,下面我们来写个测试类来发送邮件
好了可以成功收到短信了,在myeclipse下编写此功能的时候可能会无法成功,并且报错,如果发生错误可能是jar包冲突,那么你删除myeclipse下自带的mail功能的jar包即可
一。定义一个封装邮件内容的类,代码如下
- package net.bolue.mail;
- /**
- * 简单邮件
- * @author bruisefree
- *
- */
- public class SimpleMail {
- protected String subject;//邮件主题
- protected String content;//邮件内容
- 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;
- }
- }
二,定义验证邮件的实体类,即用来验证邮件地址和密码是否可用
- package net.bolue.mail;
- import javax.mail.Authenticator;
- import javax.mail.PasswordAuthentication;
- /**
- * 邮箱验证实体
- * @author bruisefree
- *
- */
- 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;
- }
- }
三。就是编写我们真正用来发送邮件的类
- package net.bolue.mail;
- import java.util.List;
- import java.util.Properties;
- import javax.mail.MessagingException;
- import javax.mail.Session;
- import javax.mail.Transport;
- import javax.mail.internet.AddressException;
- import javax.mail.internet.InternetAddress;
- import javax.mail.internet.MimeMessage;
- import javax.mail.internet.MimeMessage.RecipientType;
- /**
- * 发送邮件的类
- * @author Administrator
- *
- */
- 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, Object 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);
- // 设置邮件内容
- 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, Object 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 recipients
- * 收件人们
- * @param mail
- * 邮件对象
- * @throws AddressException
- * @throws MessagingException
- */
- public void send(List<String> recipients, SimpleMail mail)
- throws AddressException, MessagingException {
- send(recipients, mail.getSubject(), mail.getContent());
- }
- }
好了,下面我们来写个测试类来发送邮件
- package net.bolue.mail;
- import javax.mail.MessagingException;
- import javax.mail.internet.AddressException;
- public class MailSendFactory {
- /**
- * 服务邮箱
- */
- private static SimpleMailSender serviceSms = null;
- /**
- * 获取邮箱
- *
- * @param type 邮箱类型
- * @return 符合类型的邮箱
- */
- public static SimpleMailSender getSender() {
- if (serviceSms == null) {
- serviceSms = new SimpleMailSender("wlf_service@163.com", "123456");
- }
- return serviceSms;
- }
- public static void main(String[] args) throws AddressException, MessagingException{
- SimpleMailSender mailSender = MailSendFactory.getSender();
- SimpleMail mail = new SimpleMail();
- mail.setContent("你可以收到邮件了");
- mail.setSubject("邮件测试");
- mailSender.send("czy.keith@qq.com", mail);
- }
- }
好了可以成功收到短信了,在myeclipse下编写此功能的时候可能会无法成功,并且报错,如果发生错误可能是jar包冲突,那么你删除myeclipse下自带的mail功能的jar包即可