java发送邮件

来源:互联网 发布:网眼空间绑定域名教程 编辑:程序博客网 时间:2024/06/17 16:31

需要依赖的jar

<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>


基本信息类需要 继承  javax.mail.Authenticator

package data.test.my.email;


import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;


public class AuthEmail extends Authenticator {
    private String passWord;
    private String userName;


    public String getPassWord() {
        return passWord;
    }


    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }


    public String getUserName() {
        return userName;
    }


    public void setUserName(String userName) {
        this.userName = userName;
    }


    public AuthEmail(String passWord, String userName) {
        this.passWord = passWord;
        this.userName = userName;
    }


    // 该方法必须
    public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(this.userName, this.passWord);
    }
}


实际发送类

package data.test.my.email;


import java.util.List;
import java.util.Properties;


import javax.mail.Message.RecipientType;
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;


public class SimpleMailSender {
    /**
     * 发送邮件的props文件
     */
    private final transient Properties props = System.getProperties();
    /**
     * 邮件服务器登录验证
     */
    private transient AuthEmail 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 AuthEmail(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 data.test.my.email;


public class MailSendFactory {
    /**
     * 服务邮箱
     */
    private static SimpleMailSender serviceSms = null;


    /**
     * 获取邮箱
     * 
     * @param type 邮箱类型
     * @return 符合类型的邮箱
     */
    public static SimpleMailSender getSender(String type) {
        if (type.equals("my")) {
            if (serviceSms == null) {
                serviceSms = new SimpleMailSender("douniwan@166.com", "578945612");
            }
            return serviceSms;
        }
        return null;
    }
}


主方法测试使用

package data.test.my.email;


import java.util.ArrayList;
import java.util.List;


import javax.mail.MessagingException;
import javax.mail.internet.AddressException;


public class MailEmail {
    public static void main(String[] args) {
        // 发送邮件
        SimpleMailSender sms = MailSendFactory.getSender("my");
        List<String> recipients = new ArrayList<String>();
        recipients.add("douniwan@qq.com");
        recipients.add("douniwan@gmail.com");
        try {
            for (String recipient : recipients) {
                sms.send(recipient, "价格变动", "您关注的物品" + " 六神花露水   降价了,由" + "12.3 元降到    13.2 元,降幅达"
                        + " -10 元人民币。赶快购物吧。");
            }
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}


原创粉丝点击