背景描述

当下,信息量呈指数式增长,智能化时代大多数信息会通过手机短信、电子邮件进行发送,诸如验证码、广告、垃圾信息等。因此,作为新时代的java萌新,学会使用java发送邮件必不可缺。

问:为啥这里不介绍短信方式?
答:短信是通过三大运营商(移动、联通、电信)发送,要想使用,必须调用收费接口,收费标准与提供平台有关,个人开发者可以忽略此方式。

前提

学习编写程序发送邮件需要哪些知识?

  1. 了解邮箱的SMTP服务器地址
  2. 了解SMTP协议以及端口号

实例

下面将通过实例来进行讲解。

  • 首先,创建邮件实体类EmailInfo,主要属性包括:邮件标题、内容、发件人
// 邮件标题
private String title;
// 邮件内容
private String content;
// 收件人
private List<String> receivers = new ArrayList<String>();
  • 然后,创建邮件操作工具类EmailUtil,定义发送者SMTP服务器地址、端口、邮箱地址等信息
// 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
private static String mailserver = "smtp.163.com"; // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
private static String sender = "xxx@163.com"; // 发件人
private static int smtpPort = 25;
// smtp服务器的认证资料
private static String username = "xxx@163.com"; // 发件人邮箱账号
private static String password = "xxx"; // 发件人邮箱密码
//是否初始化
private static boolean isInited = false;
private static boolean isUse = true;
  • 接着,定义服务器认证资料信息
HtmlEmail email = new HtmlEmail();
// 通过Gmail Server 发送邮件
email.setHostName(mailserver);
email.setSmtpPort(smtpPort);
//设定smtp服务器的认证资料信息
email.setAuthentication(username, password);
email.setStartTLSEnabled(false);
email.setSSLOnConnect(false);
  • 最后,设置邮件标题、内容以及收件人信息
email.setFrom(sender); // 设定发件人
email.addTo(info.getReceivers().toArray(new String[info.getReceivers().size()])); // 设定收件人
email.setCharset("UTF-8"); // 设定内容的语言集
email.setDebug(true);
email.setSubject(info.getTitle()); // 设定主题
email.setHtmlMsg(info.getContent()); // 设定邮件内容
email.send();// 发送邮件

测试

编写测试方法

public static void main(String[] args) {
        // 邮件通知
        EmailInfo emailInfo = new EmailInfo();
        emailInfo.setTitle("dc天气");
        emailInfo.setContent("今天天气晴,18-25°C");
        emailInfo.getReceivers().add("xxx@qq.com");
        EmailUtil.sendMail(emailInfo);
    }

查看邮箱信息

java发送邮件解决乱码 java发邮件要收费吗_Email

完整程序

  • pom.xml
<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-email</artifactId>
            <version>1.5</version>
        </dependency>
  • EmailInfo
public class EmailInfo {
    // 邮件标题
    private String title;
    // 邮件内容
    private String content;
    // 收件人
    private List<String> receivers = new ArrayList<String>();

    public EmailInfo() {}

    public EmailInfo(String title, String content, List<String> receivers) {
        this.title = title;
        this.content = content;
        this.receivers = receivers;
    }
    // get、set
}
  • EmailUtil
public class EmailUtil {
    // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
    private static String mailserver = "smtp.163.com"; // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
    private static String sender = "xxx@163.com"; // 发件人
    private static int smtpPort = 25;
    // smtp服务器的认证资料
    private static String username = "xxx@163.com"; // 发件人邮箱账号
    private static String password = "xxx"; // 发件人邮箱密码
    //是否初始化
    private static boolean isInited = false;
    private static boolean isUse = true;

    public static int sendMail(EmailInfo info) {
        if (!isInited) {
            isInited = true;
        }
        if (!isUse) {
            System.err.println("邮箱设置不启用");
            return 1;
        }
        HtmlEmail email = new HtmlEmail();
        // 通过Gmail Server 发送邮件
        email.setHostName(mailserver);
        email.setSmtpPort(smtpPort);
        //设定smtp服务器的认证资料信息
        email.setAuthentication(username, password);
        email.setStartTLSEnabled(false);
        email.setSSLOnConnect(false);
        try {
            email.setFrom(sender); // 设定发件人
            email.addTo(info.getReceivers().toArray(new String[info.getReceivers().size()])); // 设定收件人
            email.setCharset("UTF-8"); // 设定内容的语言集
            email.setDebug(true);
            email.setSubject(info.getTitle()); // 设定主题
            email.setHtmlMsg(info.getContent()); // 设定邮件内容
            email.send();// 发送邮件

        } catch (EmailException e) {
            e.printStackTrace();
            return 1;
        }
        return 0;
    }
}

总结

看到这里,通过java实现发送邮件就完成了,读者们可以结合本人的前面的一个简易爬虫博客编写天气的推送程序。