博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaMail
阅读量:5123 次
发布时间:2019-06-13

本文共 9723 字,大约阅读时间需要 32 分钟。

目录

JavaMail学习

发送文本、发送html模板、群发、发送附件

预备

POM

javax.mail
mail
1.4.7

开始

javax.mail.Session:上下文环境信息,如服务器的主机名、端口号、协议名称等  javax.mail.Message:邮件模型,发送邮件和接收邮件的媒介,封装了邮件的信息,如发件人、收件人、邮件标题、邮件内容等  javax.mail.Transport:连接邮件SMTP服务器,发送邮件  javax.mail.Store:连接邮件POP3、IMAP服务器,收取邮件

定义发送者信息mail.properties

#Sender Authusername=发送者邮箱账户password=发送者邮箱密码#Sender Infofrom.address=发送者邮箱地址#Sender Server(这里测试发送者使用QQ邮箱)mail.smtp.host=smtp.qq.commail.smtp.auth=truemail.smtp.port=587

定义配置读取类MailConfig.java

package com;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class MailConfig {    private static Properties properties;    public static Properties getProperties() {        if (null == properties) {            properties = new Properties();            InputStream stream = MailDemo.class.getClassLoader().getResourceAsStream("mail.properties");            try {                properties.load(stream);                stream.close();            } catch (IOException e) {                e.printStackTrace();            }        }        return properties;    }    public static String getHost() {        return getProperties().getProperty("mail.smtp.host");    }    public static String getPort() {        return getProperties().getProperty("mail.smtp.port");    }    public static String getUserName() {        return getProperties().getProperty("username");    }    public static String getPassword() {        return getProperties().getProperty("password");    }    public static String getFromAddress() {        return getProperties().getProperty("from.address");    }    public static boolean getAuth() {        return "true".equalsIgnoreCase(getProperties().getProperty("mail.smtp.auth"));    }}

定义认证类DemoAuthenticator.java

/** * 认证信息 */package com;import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;public class DemoAuthenticator extends Authenticator {        //用户名    private String userName ;    //用户密码    private String password ;    public DemoAuthenticator() {    }    public DemoAuthenticator(String username, String password) {        this.userName = username;        this.password = password;    }    @Override    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;    }}

定义邮件内容类MailDetail.java

/*** * 邮件详情 */package com;public class MailDetail {    // 邮件接收者的地址    private String toAddress;    // 邮件主题    private String subject;    // 邮件的文本内容    private String content;    // 邮件附件的文件名    private String[] attachFileNames;    public String getToAddress() {        return toAddress;    }    public void setToAddress(String toAddress) {        this.toAddress = toAddress;    }    public String getSubject() {        return subject;    }    public void setSubject(String subject) {        this.subject = subject;    }    public String getContent() {        return content;    }    public void setContent(String content) {        this.content = content;    }    public String[] getAttachFileNames() {        return attachFileNames;    }    public void setAttachFileNames(String[] attachFileNames) {        this.attachFileNames = attachFileNames;    }}

定义发送器类

package com;import java.io.IOException;import java.util.Date;import java.util.Properties;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.MimeMultipart;import javax.mail.internet.MimeUtility;/** * 简单邮件(不带附件的邮件)发送器 */public class SimpleMailSender {    /**     * 以文本格式发送邮件     *      * @param detail     *            待发送的邮件的信息     */    public static boolean sendTextMail(MailDetail detail) {        // 判断是否需要身份认证        DemoAuthenticator authenticator = null;        Properties pro = MailConfig.getProperties();        System.out.println("是否需要验证:" + (MailConfig.getAuth() == true));        if (MailConfig.getAuth()) {            // 如果需要身份认证,则创建一个密码验证器            authenticator = new DemoAuthenticator(MailConfig.getUserName(), MailConfig.getPassword());        }        // 根据邮件会话属性和密码验证器构造一个发送邮件的session        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);        try {            // 根据session创建一个邮件消息            Message mailMessage = new MimeMessage(sendMailSession);            // 创建邮件发送者地址            Address from = new InternetAddress(MailConfig.getFromAddress());            // 设置邮件消息的发送者            mailMessage.setFrom(from);            // 创建邮件的接收者地址,并设置到邮件消息中            Address to = new InternetAddress(detail.getToAddress());            mailMessage.setRecipient(Message.RecipientType.TO, to);            //循环add可以实现群发            //mailMessage.addRecipient(Message.RecipientType.TO, to);            // 设置邮件消息的主题            mailMessage.setSubject(detail.getSubject());            // 设置邮件消息发送的时间            mailMessage.setSentDate(new Date());            // 设置邮件消息的主要内容            String mailContent = detail.getContent();            mailMessage.setText(mailContent);            mailMessage.saveChanges();            // 发送邮件方式一            /*             * mailMessage.saveChanges(); // implicit with send() Transport             * transport = sendMailSession.getTransport("smtp");             * transport.connect(MailProperties.getHost(),             * MailProperties.getUserName(), MailProperties.getPassword());             * transport.sendMessage(mailMessage,             * mailMessage.getAllRecipients()); transport.close();             */            // 发送邮件方式二            Transport.send(mailMessage);            return true;        } catch (MessagingException ex) {            ex.printStackTrace();        }        return false;    }    /**     * 以HTML格式发送邮件     *      * @param detail     *            待发送的邮件信息     */    public static boolean sendHtmlMail(MailDetail detail) {        // 判断是否需要身份认证        DemoAuthenticator authenticator = null;        Properties pro = MailConfig.getProperties();        // 如果需要身份认证,则创建一个密码验证器        if (MailConfig.getAuth()) {            authenticator = new DemoAuthenticator(MailConfig.getUserName(), MailConfig.getPassword());        }        // 根据邮件会话属性和密码验证器构造一个发送邮件的session        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);        try {            // 根据session创建一个邮件消息            Message mailMessage = new MimeMessage(sendMailSession);            // 创建邮件发送者地址            Address from = new InternetAddress(MailConfig.getFromAddress());            // 设置邮件消息的发送者            mailMessage.setFrom(from);            // 创建邮件的接收者地址,并设置到邮件消息中            Address to = new InternetAddress(detail.getToAddress());            // Message.RecipientType.TO属性表示接收者的类型为TO            mailMessage.setRecipient(Message.RecipientType.TO, to);            // 设置邮件消息的主题            mailMessage.setSubject(detail.getSubject());            // 设置邮件消息发送的时间            mailMessage.setSentDate(new Date());            // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象            Multipart mainPart = new MimeMultipart();            // 创建一个包含HTML内容的MimeBodyPart            BodyPart html = new MimeBodyPart();            // 设置HTML内容            html.setContent(detail.getContent(), "text/html; charset=utf-8");            mainPart.addBodyPart(html);            // 添加附件            MimeBodyPart mimeBodyPart = new MimeBodyPart();            mimeBodyPart.attachFile("C:\\Apps\\QQ\\Plugin\\Com.Tencent.QQVip\\Misc\\CustomFont\\101\\qie17b.png");            mimeBodyPart.setFileName(MimeUtility.encodeWord("测试附件.png"));            mainPart.addBodyPart(mimeBodyPart);            // 将MiniMultipart对象设置为邮件内容            mailMessage.setContent(mainPart);            mailMessage.saveChanges();            // 发送邮件            Transport.send(mailMessage);            return true;        } catch (MessagingException ex) {            ex.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return false;    }}

测试Demo

public static void main(String[] args) {        MailDetail detail = new MailDetail();        detail.setToAddress(接收者邮箱地址);        detail.setSubject("测试邮箱标题WithHtml");        detail.setContent(readTemplate());        //发送文本        boolean result = SimpleMailSender.sendTextMail(detail);        //发送html格式        //boolean result = SimpleMailSender.sendHtmlMail(detail);        // 发送文体格式        if(result){            System.out.println("发送成功...");        }else{            System.out.println("发送失败...");        }    }

附加(读取文本)

private static String readTemplate() {        StringBuilder builder = new StringBuilder();        String encoding = "UTF-8";        InputStreamReader read = null;        try {            read = new InputStreamReader(MailDemo.class.getClassLoader().getResourceAsStream("temp.html"), encoding);             BufferedReader bufferedReader = new BufferedReader(read);            String lineTxt = null;            while ((lineTxt = bufferedReader.readLine()) != null) {                builder.append(lineTxt);            }            read.close();        } catch (Exception e) {            System.out.println("读取文件内容出错");            e.printStackTrace();        }        return builder.toString();    }

转载于:https://www.cnblogs.com/vmask/p/8728680.html

你可能感兴趣的文章
免费的论文查重网站
查看>>
C语言程序第一次作业
查看>>
leetcode-Sort List
查看>>
中文词频统计
查看>>
了解node.js
查看>>
想做移动开发,先看看别人怎么做
查看>>
Eclipse相关集锦
查看>>
虚拟化架构中小型机构通用虚拟化架构
查看>>
继承条款effecitve c++ 条款41-45
查看>>
Java泛型的基本使用
查看>>
1076 Wifi密码 (15 分)
查看>>
noip模拟赛 党
查看>>
bzoj2038 [2009国家集训队]小Z的袜子(hose)
查看>>
Java反射机制及其Class类浅析
查看>>
Postman-----如何导入和导出
查看>>
移动设备显示尺寸大全 CSS3媒体查询
查看>>
图片等比例缩放及图片上下剧中
查看>>
【转载】Linux screen 命令详解
查看>>
background-clip,background-origin
查看>>
Android 高级UI设计笔记12:ImageSwitcher图片切换器
查看>>