`

JAVA Mail多抄送人有抄送内容亲测可用

阅读更多

      大周一的,上班没带耳机

pom文件依赖

<!--mail-->
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.5.6</version>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>smtp</artifactId>
    <version>1.5.2</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>mailapi</artifactId>
    <version>1.5.2</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>
package com.ssm.boot.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

/**
 * Created by my on 2018/5/14.
 */
public class MailService {
    private static String defaultSenderName = "########";// 默认的发件人用户名,defaultEntity用得到
    private static String defaultSenderPass = "########";// 默认的发件人密码,defaultEntity用得到
    private static String defaultSmtpHost = "smtp.163.com";// 默认的邮件服务器地址,defaultEntity用得到

    private String smtpHost; // 邮件服务器地址
    private String sendUserName; // 发件人的用户名
    private String sendUserPass; // 发件人密码

    private MimeMessage mimeMsg; // 邮件对象
    private Session session;
    private Properties props;
    private Multipart mp;// 附件添加的组件
    private List<FileDataSource> files = new LinkedList<FileDataSource>();// 存放附件文件
    private void init() {
        if (props == null) {
            props = System.getProperties();
        }
        props.put("mail.smtp.host", smtpHost);
        props.put("mail.smtp.auth", "true"); // 需要身份验证
        session = Session.getDefaultInstance(props, null);
        // 置true可以在控制台(console)上看到发送邮件的过程
        session.setDebug(true);
        // 用session对象来创建并初始化邮件对象
        mimeMsg = new MimeMessage(session);
        // 生成附件组件的实例
        mp = new MimeMultipart();
    }

    private MailService(String smtpHost, String sendUserName, String sendUserPass, String to, String cc, String mailSubject, String mailBody,List<String> attachments) {
        this.smtpHost = smtpHost;
        this.sendUserName = sendUserName;
        this.sendUserPass = sendUserPass;

        init();
        setFrom(sendUserName);
        setTo(to);
        setCC(cc);
        setBody(mailBody);
        setSubject(mailSubject);
        if (attachments != null) {
            for (String attachment : attachments) {
                addFileAffix(attachment);
            }
        }

    }

    /**
     * 邮件实体
     *
     * @param smtpHost     邮件服务器地址
     * @param sendUserName 发件邮件地址
     * @param sendUserPass 发件邮箱密码
     * @param to           收件人,多个邮箱地址以半角逗号分隔
     * @param cc           抄送,多个邮箱地址以半角逗号分隔
     * @param mailSubject  邮件主题
     * @param mailBody     邮件正文
     * @param attachments  附件路径
     * @return
     */
    public static MailService entity(String smtpHost, String sendUserName, String sendUserPass, String to, String cc, String mailSubject, String mailBody,List<String> attachments) {
        return new MailService(smtpHost, sendUserName, sendUserPass, to, cc, mailSubject, mailBody, attachments);
    }

    /**
     * 默认邮件实体,用了默认的发送帐号和邮件服务器
     *
     * @param to      收件人,多个邮箱地址以半角逗号分隔
     * @param cc      抄送,多个邮箱地址以半角逗号分隔
     * @param subject 邮件主题
     * @param body    邮件正文
     *                附件全路径
     * @return
     */
    public static MailService defaultEntity(String to, String cc, String subject, String body, List<String> attachments) {
        return new MailService(defaultSmtpHost, defaultSenderName, defaultSenderPass, to, cc, subject, body, attachments);
    }

    /**
     * 设置邮件主题
     *
     * @param mailSubject
     * @return
     */
    private boolean setSubject(String mailSubject) {
        try {
            mimeMsg.setSubject(mailSubject);
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    /**
     * 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8
     *
     * @param mailBody
     * @return
     */
    private boolean setBody(String mailBody) {
        try {
            BodyPart bp = new MimeBodyPart();
            bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>" + mailBody, "text/html;charset=UTF-8");
            // 在组件上添加邮件文本
            mp.addBodyPart(bp);
        } catch (Exception e) {
            System.err.println("设置邮件正文时发生错误!" + e);
            return false;
        }
        return true;
    }

    /**
     * 添加一个附件
     *
     * @param filename 邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常
     * @return
     */
    public boolean addFileAffix(String filename) {
        try {
            if (filename != null && filename.length() > 0) {
                BodyPart bp = new MimeBodyPart();
                FileDataSource fileds = new FileDataSource(filename);
                bp.setDataHandler(new DataHandler(fileds));
                bp.setFileName(MimeUtility.encodeText(fileds.getName(), "utf-8", null)); // 解决附件名称乱码
                mp.addBodyPart(bp);// 添加附件
                files.add(fileds);
            }
        } catch (Exception e) {
            System.err.println("增加邮件附件:" + filename + "发生错误!" + e);
            return false;
        }
        return true;
    }

    /**
     * 删除所有附件
     *
     * @return
     */
    public boolean delFileAffix() {
        try {
            FileDataSource fileds = null;
            for (Iterator<FileDataSource> it = files.iterator(); it.hasNext(); ) {
                fileds = it.next();
                if (fileds != null && fileds.getFile() != null) {
                    fileds.getFile().delete();
                }
            }
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    /**
     * 设置发件人地址
     *
     * @param from 发件人地址
     * @return
     */
    private boolean setFrom(String from) {
        try {
            mimeMsg.setFrom(new InternetAddress(from));
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    /**
     * 设置收件人地址
     *
     * @return
     */
    private boolean setTo(String to) {
        if (to == null)
            return false;
        try {
            mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    /**
     * 设置抄送
     *
     * @param cc
     * @return
     */
    private boolean setCC(String cc) {
        if (cc == null) {
            return false;
        }
        try {
            mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));
        } catch (Exception e) {
            return false;
        }
        return true;
    }

    /**
     * 发送邮件
     *
     * @return
     */
    public boolean send() throws Exception {
        mimeMsg.setContent(mp);
        mimeMsg.saveChanges();
        System.out.println("正在发送邮件....");
        Transport transport = session.getTransport("smtp");
        // 连接邮件服务器并进行身份验证
        transport.connect(smtpHost, sendUserName, sendUserPass);
        // 发送邮件
        transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
        System.out.println("发送邮件成功!");
        transport.close();
        return true;
    }


    public static void main(String[] args) {
        String userName = "##########"; // 发件人邮箱
        String password = "##########"; // 发件人密码
        String smtpHost = "smtp.163.com"; // 邮件服务器
        String to = "########"; // 收件人,多个收件人以半角逗号分隔
        String cc = "########,########"; // 抄送,多个抄送以半角逗号分隔
        String subject = "这是邮件的主题"; // 主题
        String body = "天上的星星参北斗啊"; // 正文,可以用html格式的哟
        List<String> attachments = Arrays.asList("D:\\A.png", "D:\\A.png"); // 附件的路径,多个附件也不怕
        MailService email = MailService.entity(smtpHost, userName, password, to, cc, subject, body, attachments);
        try {
            email.send(); // 发送!
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

 

 

 

分享到:
评论

相关推荐

    java 发邮件 多收件人 多抄送人 多附件

    java 发邮件工具类 多收件人 多抄送人 多附件 内有三个重载方法 使用方便

    java实现邮件抄送,密送,多个附件发送

    封装好了方法, 传入发送邮件的邮箱和收邮件的邮箱即可测试使用

    JAVA_Mail_邮件_发送_接收_抄送_密送_附件

    JAVA_Mail_邮件_发送_接收_抄送_密送_附件 该资源是一个Java项目,可用Eclipse导入即可运行。 共4个类: 1:ReceiveMail.java -接收普通邮件 2:ReciveMailWithAttachMent.java --接收含有附件的邮件 3:SendMail....

    JavaMail实现邮件发送功能,可发送、抄送、密送多人,支持多附件的发送

    通过以上步骤,你就可以利用 JavaMail 实现功能完备的邮件发送了,包括向多个人发送邮件、设置抄送和密送,以及添加多个附件。注意,实际使用时,你需要根据你的邮件服务提供商调整相应的配置参数,例如对于其他邮箱...

    java mail 支持text、html正文,多附件,发送、抄送、密送均多人

    在这个主题中,我们将深入探讨如何使用Java Mail API来发送包含text、HTML正文以及多个附件的邮件,并且实现发送、抄送和密送给多个收件人。 首先,我们需要导入Java Mail所需的库。主要的依赖包括`javax.mail`和`...

    java发送邮件源代码带附件可抄送

    接下来,我们可以创建一个`Message`对象,设置邮件的基本信息,如发件人、收件人、抄送人、主题和内容: ```java Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); ...

    Java mail-1.4.7 jar包

    Java Mail 是一个开源的Java库,它为Java应用程序提供了与各种邮件系统交互的能力。这个"mail-1.4.7.jar"是Java Mail的一个版本,主要用于处理电子邮件的发送和其他相关功能。版本号1.4.7表明这是一个较旧但稳定版本...

    JavaMail(2)——给多人发送、抄送.docx

    Message.RecipientType.TO常量表示收件人类型是邮件接收者,Message.RecipientType.CC常量表示收件人类型是抄送者,Message.RecipientType.BCC常量表示收件人的类型是密送者。 在调用MimeMessage的setRecipients...

    Java.mail开发包

    这包括添加多个收件人、抄送人和密送人,以及设置主题和正文内容。 2. **邮件接收**:使用POP3(Post Office Protocol version 3)或IMAP(Internet Message Access Protocol)协议,Java Mail 可以从邮件服务器...

    Java发送邮件_单附件_多附件_加抄送多人 _2个示例zip

    这个"Java发送邮件_单附件_多附件_加抄送多人 _2个示例zip"的资源包含两个核心类:EmailManager.java和AnnexMailService.java,它们提供了一个强大的邮件发送功能,支持单个或多个附件,以及添加抄送人。下面将详细...

    Excel 发邮件抄送给多人

    在实际工作中,有时我们需要通过 Excel 自动发送邮件,并且需要同时抄送给多个收件人。这可以通过编写 VBA 宏来实现。 #### 代码示例 ```vba Sub Send_Range() ' 选择工作表上的单元格范围 ActiveSheet.Range("G1...

    邮箱outlook宏支持多人发送邮件增加抄送人功能

    邮箱outlook宏支持多人发送邮件增加抄送人功能,邮件中可发送图片文件等

    java 发送附件mail

    4. **添加邮件头信息**:设置邮件的收件人、抄送人、主题等信息,这些可以通过`MimeMessage`的相应方法完成。 5. **创建MimeMultipart对象**:邮件可以包含多个部分,比如纯文本和附件。因此,创建一个`...

    java_mail 1.5.zip

    这个“java_mail 1.5.zip”压缩包包含的是JavaMail 1.5版本的源代码,对于理解其内部工作原理和自定义扩展功能非常有帮助。 JavaMail API的核心组件包括: 1. **JavaMail Session**: 是JavaMail的核心,负责配置...

    java Mail 发送邮件及邮件附件

    要使用 Java Mail 发送邮件,需要首先创建一个 Mail 对象,然后设置邮件的主题、收件人、抄送人、密送人等信息。下面是一个简单的示例代码: ```java public class Mail { public static void main(String[] args)...

    java Mail的Demo

    Java Mail API不仅支持发送邮件,还支持读取、管理、搜索邮件,以及处理附件、MIME(多用途互联网邮件扩展)等复杂格式。 二、Java Mail的工作原理 1. 创建Session:首先,我们需要创建一个`javax.mail.Session`...

    采用java的javax.mail发送 mail

    在Java中,使用javax.mail库可以方便地实现邮件的发送功能,包括添加附件、设置抄送和密送等。 在描述中提到的"带sun的jar包",可能是指早期版本的Java Mail API,它曾包含在Sun Microsystems提供的Java ...

    email附件发送、多人发送、抄送

    在电子邮件的使用中,"email附件发送、多人发送、抄送"是三个核心功能,尤其在企业通信中极为常见。本文将深入探讨这三个知识点,并结合Java编程语言来讲解如何实现这些功能。 首先,电子邮件附件发送是指在发送...

    Java Mail邮件发送源码下载

    3. 创建Message:通过MimeMessage类实例化一个Message对象,填充邮件内容,如收件人、抄送人、密送人、主题、正文等。如果需要发送附件,可以使用MimeBodyPart和Multipart类。 4. 发送邮件:使用Transport对象的send...

    用java mail发邮件源码,支持多种邮局,支持单发和群发

    Java Mail 是一个用于处理电子邮件的开源API,它允许开发者通过编程方式发送、接收和管理邮件。这个源码可能包含了一套完整的解决方案,可以与多种邮局(如Gmail, Yahoo, Hotmail等)进行交互,并且支持单个收件人和...

Global site tag (gtag.js) - Google Analytics