java发送邮件(一)

通过javamail原生态api发送邮件,以下代码中,通过调用SendMailUtil类的sendMail方法即可发送邮件,这种方式只能发送普通文本内容,像那种发送html格式内容的邮件,其实现思路差不多,需要在邮件内容中添加<html><body>等标签,还有就是通过调用velocity模板文件发送邮件,这种方式稍复杂,暂时没实现:

import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
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;
import javax.mail.internet.MimeUtility;
import javax.mail.internet.MimeMessage.RecipientType;

public class SimpleMailSender {
    /**
     * 邮件服务器登录验证
     */
    private transient MailAuthenticator authenticator;
    /**
     * 邮箱session
     */
    private transient Session session;
    /**
     * 初始化邮件发送器
     */
    public SimpleMailSender() {
        init();
    }
 
    /**
     * 初始化
     * @param  userName 发送邮件的用户名(地址)
     * @param  password  密码
     * @param  smtpHostName SMTP主机地址
     */
    private void init() {
        Properties props = new Properties();
        // 初始化props
        props.put("mail.smtp.auth", "true");
        //  从配置文件中读取
       props.put("mail.smtp.host", ConfigUtil.getProperty("mail.host"));
       props.put("mail.smtp.port", ConfigUtil.getProperty("mail.port"));  
       String userName = ConfigUtil.getProperty("mail.userName");
       String password = ConfigUtil.getProperty("mail.password");
       // 验证:用户名应该去掉@后面的值
       if(userName.indexOf("@") > 0) {
           authenticator = new MailAuthenticator(userName.substring(0, userName.indexOf("@")), password);
       } else {
           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(ConfigUtil.getProperty("mail.userName")));
       // 设置收件人
       message.setRecipient(RecipientType.TO, new InternetAddress(recipient));
       // 设置主题
       message.setSubject(subject);
       // 设置邮件内容
       message.setContent(content.toString(), "text/html;charset=utf-8");
       // 发送
       Transport.send(message);
    }
}

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
public class MailAuthenticator extends Authenticator{
    private String userName;
    private String passWord;
    public MailAuthenticator(String userName, String passWord) {
        this.userName = userName;
        this.passWord = passWord;
    }

    protected PasswordAuthentication getPasswordAuthentication() {
       return new PasswordAuthentication(userName, passWord);
    }
    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 class SendMailUtil {
    private static Logger logger = Logger.getLogger(SendMailUtil.class);
    // 任务调度器,产生指定数量的线程池,防止创建过多的线程,造成内存溢出
    private static ExecutorService service;
    static {
        service = Executors.newFixedThreadPool(10);
    }
    /**
    * 发送邮件
    * @param toEmail 邮件接受者
    * @param subject 邮件主题
    * @param content 邮件内容
    */
    public static void sendMail(final String recipient, final String subject, final String content) {
    service.execute(new Thread() {
        @Override
        public void run() {
            try {
                SimpleMailSender sender = new SimpleMailSender();
                sender.send(recipient, subject, content);
            } catch (Exception e) {
                logger.error("发送邮件到:"+recipient+"失败!",e);
            }
        }
    });
}
    public static void main(String[] args) {
        // [email protected]
        sendMail("[email protected]", "测试", "hello,你好");
    }
}


你可能感兴趣的:(java发送邮件(一))