JAVA MAIL是利用现有的邮件账户发送邮件的工具,当用户注册账号时,通过JAVA Mail的操控让程序自动发送邮件,这一机制被广泛的用在注册激活和垃圾邮件的发送等方面。


JavaMail发送邮件需要用到mail.jar和activtion.jar两个jar包,javaMail参考API文档地址

http://www.oracle.com/technetwork/java/javamail/index-138643.html

JAVA邮件发送的简单描述如下:

1、构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法。此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利。
2、构建一个properties文件,该文件中存放SMTP服务器地址等参数。
3、通过构建的properties文件和javax.mail.Authenticator具体类来创建一个javax.mail.Session。Session的创建,就相当于登录邮箱一样。剩下的自然就是新建邮件。
4、构建邮件内容,一般是javax.mail.internet.MimeMessage对象,并指定发送人,收信人,主题,内容等等。
5、使用javax.mail.Transport工具类发送邮件。


首先是继承自javax.mail.Authenticator的一个具体类。getPasswordAuthentication()方法也就是构建一个PasswordAuthentication对象并返回,具体类代码如下:

package com.util.mail;

import javax.mail.*;

public class CustomerAuthenticator extends Authenticator{  
    private String userName;  
    private String password;  
       
    public CustomerAuthenticator(){  
    }  
    public CustomerAuthenticator(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;
    }


邮件发送信息类,代码如下:

package com.util.mail;

import java.util.Properties;

public class MailSenderInfo {
    // 发送邮件的服务器的IP和
    private String host;
    // 端口
    private String port = "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.host);
        p.put("mail.smtp.port", this.port);
        p.put("mail.smtp.auth", validate ? "true" : "false");
        return p;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public String getPort() {
        return port;
    }

    public void setPort(String port) {
        this.port = port;
    }

    public boolean isValidate() {
        return validate;
    }

    public void setValidate(boolean validate) {
        this.validate = validate;
    }

    public String[] getAttachFileNames() {
        return attachFileNames;
    }

    public void setAttachFileNames(String[] fileNames) {
        this.attachFileNames = fileNames;
    }

    public String getFromAddress() {
        return fromAddress;
    }

    public void setFromAddress(String fromAddress) {
        this.fromAddress = fromAddress;
    }

    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 String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String textContent) {
        this.content = textContent;
    }

    public String[] getToAddress() {
        return toAddress;
    }

    public void setToAddress(String[] toAddress) {
        this.toAddress = toAddress;
    }
}


邮件发送工具类,代码代码如下:

package com.util.mail;

import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
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.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;

public class MailSender {
    /**
     * 发送纯文本内容
     * www.yoodb.com
     * @param mailInfo
     * @return
     */
    public boolean sendTextMail(MailSenderInfo mailInfo) {
        // 判断是否需要身份认证
        CustomerAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        if (mailInfo.isValidate()) {
            // 如果需要身份认证,则创建一个密码验证器
            authenticator = new CustomerAuthenticator(mailInfo.getUserName(),mailInfo.getPassword());
        }
        // 根据邮件会话属性和密码验证器构造一个发送邮件的session
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        try {
            // 根据session创建一个邮件消息
            Message mailMessage = new MimeMessage(sendMailSession);
            // 创建邮件发送者地址
            Address from = new InternetAddress(mailInfo.getFromAddress());
            // 设置邮件消息的发送者
            mailMessage.setFrom(from);
            // 创建邮件的接收者地址,并设置到邮件消息中
            // 创建邮件的接收地址(数组)
            String[] to = mailInfo.getToAddress();
            InternetAddress[] sendTo = new InternetAddress[to.length];
            for (int i = 0; i < to.length; i++) {
                System.out.println("邮件发送到:" + to[i]);
                sendTo[i] = new InternetAddress(to[i]);
            }
            mailMessage.setRecipients(RecipientType.TO, sendTo);
            // 设置邮件消息的主题
            mailMessage.setSubject(mailInfo.getSubject());
            // 设置邮件消息发送的时间
            mailMessage.setSentDate(new Date());
            // 设置邮件消息的主要内容
            String mailContent = mailInfo.getContent();
            mailMessage.setText(mailContent);
            // 发送邮件
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }

    /**
     * 发送HMTL内容
     * www.yoodb.com
     * @param mailInfo
     * @return
     */
    public boolean sendHtmlMail(MailSenderInfo mailInfo) {
        // 判断是否需要身份认证
        CustomerAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        // 如果需要身份认证,则创建一个密码验证器
        if (mailInfo.isValidate()) {
            authenticator = new CustomerAuthenticator(mailInfo.getUserName(),mailInfo.getPassword());
        }
        // 根据邮件会话属性和密码验证器构造一个发送邮件的session
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        try {
            // 根据session创建一个邮件消息
            Message mailMessage = new MimeMessage(sendMailSession);
            // 创建邮件发送者地址
            Address from = new InternetAddress(mailInfo.getFromAddress());
            // 设置邮件消息的发送者
            mailMessage.setFrom(from);
            // 创建邮件的接收地址(数组)
            String[] to = mailInfo.getToAddress();
            InternetAddress[] sendTo = new InternetAddress[to.length];
            for (int i = 0; i < to.length; i++) {
                System.out.println("邮件发送到:" + to[i]);
                sendTo[i] = new InternetAddress(to[i]);
            }
            mailMessage.setRecipients(RecipientType.TO, sendTo);
            // 设置邮件消息的主题
            mailMessage.setSubject(mailInfo.getSubject());
            // 设置邮件消息发送的时间
            mailMessage.setSentDate(new Date());
            // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
            Multipart mainPart = new MimeMultipart();
            // 创建一个包含HTML内容的MimeBodyPart
            BodyPart html = new MimeBodyPart();
            // 设置HTML内容 建立第一部分: 文本正文
            html.setContent(mailInfo.getContent(), "text/html; charset=UTF-8");
            mainPart.addBodyPart(html);
            // 将MiniMultipart对象设置为邮件内容 建立第二部分:附件
            mailMessage.setContent(mainPart);
            if (mailInfo.getAttachFileNames() != null
                    && mailInfo.getAttachFileNames().length > 0) {
                for (int i = 0; i < mailInfo.getAttachFileNames().length; i++) {
                    if (!mailInfo.getAttachFileNames()[i].equals("")) {
                        // 建立第二部分:附件
                        html = new MimeBodyPart();
                        // 获得附件
                        DataSource source = new FileDataSource(mailInfo.getAttachFileNames()[i]);
                        // 设置附件的数据处理器
                        html.setDataHandler(new DataHandler(source));
                        // 设置附件文件名
                        html.setFileName(mailInfo.getAttachFileNames()[i]);
                        // 加入第二部分
                        mainPart.addBodyPart(html);
                    }
                }
            }
            // 发送邮件
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }
}


测试类,代码如下:

package com.util;

import com.sp.platform.util.mail.MailSenderInfo;
import com.sp.platform.util.mail.SimpleMailSender;

public class MailTest {
public static void main(String[] args){  
        //这个类主要是设置邮件  
     MailSenderInfo mailInfo = new MailSenderInfo();   
     mailInfo.setHost("smtp.163.com");   
     mailInfo.setPort("25");   
     mailInfo.setValidate(true);   
     mailInfo.setUserName("xxxx@xxx.com");   
     mailInfo.setPassword("XXXXXXX");//您的邮箱密码   
     mailInfo.setFromAddress("xxxx@xxx.com");
     mailInfo.setToAddress(new String[]{"xxxx@xxx.com"});
     mailInfo.setSubject("注册邮箱激活");
     StringBuffer html = new StringBuffer();
     
     mailInfo.setContent(html.toString());   
     //这个类主要来发送邮件  
     SimpleMailSender sms = new SimpleMailSender();  
         //sms.sendTextMail(mailInfo);//发送文体格式   
         sms.sendHtmlMail(mailInfo);//发送html格式  
   }

}


评论

分享:

支付宝

微信