使用JavaMail群发邮件

来源:互联网 发布:淘宝如何设置分享有赏 编辑:程序博客网 时间:2024/06/05 20:19

很多时候我们有群发邮件的需求,虽然大多数邮箱都支持群发功能,但是还是有点繁杂,JavaMail提供的API功能强大,可能很方便的解决我们的问题

下面我们就开始来写我们的代码吧
首先需要准备好下面两个jar包

用于获得收件人的方法:

    public String[] getRecipients() {        File recipientsFile = new File("E:Recipients.txt");        InputStream in = null;        BufferedReader br = null;        try {            in = new FileInputStream(recipientsFile);            br = new BufferedReader(new InputStreamReader(in));            String line = null;            StringBuilder builder = new StringBuilder();            // 读入联系人            while ((line = br.readLine()) != null) {                builder.append(line);                builder.append(",");            }            // 将联系人分割为数组返回            return builder.toString().split(",");        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                if (br != null)                    br.close();                if (in != null)                    in.close();            } catch (IOException e) {                e.printStackTrace();            }        }        return null;    }

用于发送邮件的方法:

    public void sendGroupMail() throws AddressException, MessagingException {        // 得到Session        Properties props = new Properties();        props.setProperty("mail.host", "smtp.163.com");        props.setProperty("mail.smtp.auth", "true");        Authenticator authenticator = new Authenticator() {            @Override            protected PasswordAuthentication getPasswordAuthentication() {                //邮箱的用户名和密码                return new PasswordAuthentication("gyx2110", "********");            }        };        Session session = Session.getInstance(props, authenticator);        //发送邮件        MimeMessage message = new MimeMessage(session);        message.setFrom(new InternetAddress("gyx2110@163.com"));        String[] recipients = getRecipients();        for (String rec : recipients) {            //设置收件人            message.setRecipient(RecipientType.TO, new InternetAddress(rec));            //设置标题            message.setSubject("JavaMail测试邮件!");            //设置正文            message.setContent("群发邮件,如有打扰请见谅!", "text/html;charset=utf-8");            //发送            Transport.send(message);        }    }

值得一提的是我们群发的时候为了隐私,这里使用的发送方式是逐条发送,而不是批量发送,这样在正文页面就看不到有哪些人收到这封邮件了。


到这里我们只是发送了普通文体信息,大多数时我们的邮件是带有附件的,下面的我们来为邮件中添加附件。

添加附件的方法:

    public void setMultipart(MimeMessage msg) throws MessagingException,            IOException {        // 一个Multipart对象包含一个或多个BodyPart对象,来组成邮件的正文部分(包括附件)。        MimeMultipart multiPart = new MimeMultipart();        // 添加正文        MimeBodyPart partText = new MimeBodyPart();        partText.setContent("这是一封含有附件的群发邮件!", "text/html;charset=utf-8");        // 添加文件 也就 是附件        MimeBodyPart partFile = new MimeBodyPart();        File file = new File("E:mail.jar");        partFile.attachFile(file);        // 设置在收件箱中和附件名 并进行编码以防止中文乱码        partFile.setFileName(MimeUtility.encodeText(file.getName()));        multiPart.addBodyPart(partText);        multiPart.addBodyPart(partFile);        msg.setContent(multiPart);    }

发送带附件的邮件:

    public void sendMultipartMail() throws AddressException, MessagingException,            IOException {        // 得到Session        Properties props = new Properties();        props.setProperty("mail.host", "smtp.163.com");        props.setProperty("mail.smtp.auth", "true");        Authenticator authenticator = new Authenticator() {            @Override            protected PasswordAuthentication getPasswordAuthentication() {                // 邮箱的用户名和密码                return new PasswordAuthentication("gyx2110", "********");            }        };        Session session = Session.getInstance(props, authenticator);        // 发送邮件        MimeMessage message = new MimeMessage(session);        message.setFrom(new InternetAddress("gyx2110@163.com"));        // 设置收件人        message.setRecipient(RecipientType.TO, new InternetAddress(                "gyx2110@sina.com"));        // 设置标题        message.setSubject("JavaMail带附件的测试邮件!");        // 设置邮件主体        setMultipart(message);        // 发送        Transport.send(message);    }
原创粉丝点击