下载之后解压里面有一个mail.jar,添加到项目里。

Java如何发送表格邮件_发送邮件


示例代码:

public static void sendMail (){
        Properties props = new Properties();
        // 开启debug调试
        props.setProperty("mail.debug", "true");
        // 发送服务器需要身份验证
        props.setProperty("mail.smtp.auth", "true");
        // 设置邮件服务器主机名
        props.setProperty("mail.host", "smtp.qq.com");
        // 发送邮件协议名称
        props.setProperty("mail.transport.protocol", "smtp");

        MailSSLSocketFactory sf = null;
        Message msg = null;
        Transport transport = null;
        try {
            sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            props.put("mail.smtp.ssl.enable", "true");
            props.put("mail.smtp.ssl.socketFactory", sf);

            // 设置环境信息
            Session session = Session.getInstance(props);

            // 创建邮件对象
            msg = new MimeMessage(session);
            msg.setSubject("JavaMail测试");
            // 设置邮件内容
            msg.setText("这是一封由JavaMail发送的邮件!");
            // 设置发件人
            msg.setFrom(new InternetAddress("19583219822@qq.com"));

            transport = session.getTransport();
            // 连接邮件服务器
            transport.connect("发件邮箱", "发件邮箱登录授权码");
            // 发送邮件
            transport.sendMessage(msg, new Address[] {new InternetAddress("收件邮箱")});
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }finally {
         // 关闭连接
            try {
                transport.close();
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
}





在第三方客户端登录时,密码框请输入授权码

获取授权码的方法(QQ邮箱):登录到qq邮箱找到设置

Java如何发送表格邮件_java_02

点击账户

Java如何发送表格邮件_发送邮件_03

找到POP3服务,点击开启,之后经过验证就可以得到一个授权码

Java如何发送表格邮件_Java如何发送表格邮件_04

Java如何发送表格邮件_SSL_05

实际测试中发现向qq邮箱中发送邮件程序总会报错,后来经过百度到大神的文章,才知道 QQ 邮箱需要 SSL 加密。

开启 SSL 加密,其他比如163就不需要 SSL 加密……

既然需要加密就加上SSL加密的代码:

MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);



完整代码:


public static void sendMail (){

        Properties props = new Properties();

        // 开启debug调试
        props.setProperty("mail.debug", "true");
        // 发送服务器需要身份验证
        props.setProperty("mail.smtp.auth", "true");
        // 设置邮件服务器主机名
        props.setProperty("mail.host", "smtp.qq.com");
        // 发送邮件协议名称
        props.setProperty("mail.transport.protocol", "smtp");

        MailSSLSocketFactory sf = null;
        Message msg = null;
        Transport transport = null;
        try {
            sf = new MailSSLSocketFactory();
            sf.setTrustAllHosts(true);
            props.put("mail.smtp.ssl.enable", "true");
            props.put("mail.smtp.ssl.socketFactory", sf);

            Session session = Session.getInstance(props);

            msg = new MimeMessage(session);
            msg.setSubject("标题");
            // 设置邮件内容
            msg.setText("邮件内容………………………………");
            msg.setFrom(new InternetAddress("发件邮箱"));

            transport = session.getTransport();
            transport.connect("smtp.qq.com", "发件邮箱", "授权码");

            transport.sendMessage(msg, new Address[] { new InternetAddress("收件邮箱") });
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }finally {
            try {
                transport.close();
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
    }




前面的代码固定,参数也是固定的,其实也很好理解,搭建链接,设置参数,设置邮件内容,发送


运行成功后控制台显示:

Java如何发送表格邮件_Java如何发送表格邮件_06