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格式  
   }

}

关注下方微信公众号“Java精选”(w_z90110),回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。

Java精选专注程序员推送一些Java开发知识,包括基础知识、各大流行框架(Mybatis、Spring、Spring Boot等)、大数据技术(Storm、Hadoop、MapReduce、Spark等)、数据库(Mysql、Oracle、NoSQL等)、算法与数据结构、面试专题、面试技巧经验、职业规划以及优质开源项目等。其中一部分由小编总结整理,另一部分来源于网络上优质资源,希望对大家的学习和工作有所帮助。

评论

分享:

支付宝

微信