Java 发送附件邮件Utils(随笔-如果帮到你 求点赞)

java发送邮件

1.引用包

<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

2、发送邮件步骤

 

2.1.1、设置公共参数(企业版)

 public static Session mailSession() throws GeneralSecurityException {
        // 属性对象
        Properties properties = new Properties();
        // 开启debug调试  ,打印信息
        properties.setProperty( "mail.debug", "true" );
        // 发送服务器需要身份验证
        properties.setProperty( "mail.smtp.auth", "true" );
        // 发送服务器端口,可以不设置,默认是25
        properties.setProperty( "mail.smtp.port", "465" );
        // 发送邮件协议名称
        properties.setProperty( "mail.transport.protocol", "smtp" );
        // 设置邮件服务器主机名
        properties.setProperty( "mail.host", "smtp.ym.163.com" );

        //使用SSL,企业邮箱必需!
        //开启安全协议
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts( true );
        properties.put( "mail.smtp.ssl.enable", "true" );
        properties.put( "mail.smtp.ssl.socketFactory", sf );
        // 环境信息
        Session session = Session.getInstance( properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // 在session中设置账户信息,Transport发送邮件时会使用
                 //userName 为账号  //password 为密码
                return new PasswordAuthentication( userName, password );
            }
        } );
        return session;
    }

2.1.2 设置公共参数(个人邮箱  注意password)


    public static Session sendMails() throws MessagingException {
        // 属性对象
        Properties properties = new Properties();
        // 开启debug调试  ,打印信息
        properties.setProperty( "mail.debug", "true" );
        // 发送服务器需要身份验证
        properties.setProperty( "mail.smtp.auth", "true" );
        // 发送服务器端口,可以不设置,默认是25
        properties.setProperty( "mail.smtp.port", "25" );
        // 发送邮件协议名称
        properties.setProperty( "mail.transport.protocol", "smtp" );
        // 设置邮件服务器主机名
        properties.setProperty( "mail.host", "smtp.163.com" );
        // 环境信息
        Session session = Session.getInstance( properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // 在session中设置账户信息,Transport发送邮件时会使用
                //username 为账号  password 第三方授权密码
                return new PasswordAuthentication( userName, password );
            }
        } );
        return session;
    }

注意:关于2.1.2中提到的授权密码 可登录邮箱设置  QQ、 163 大同小异(为方便理解贴图提示)

2.2 设置消息头 

/**
     * TODO: 设置邮箱发送人 发送主题  时间
     *
     * @param subject       主题
     * @param toAddresslist 收件人(单个\多个用,分割)
     * @param ccAddress     抄送人
     * @param bccAddress    密送人
     * @param address       发件人
     * @param sentDate      发送时间  @author WeiLian
     * @date 19/11/14 10:20
     * @method
     * @version 1.0
     **/
    public static Message mailMessage(String subject, String address, String toAddresslist, String ccAddress, String bccAddress, Date sentDate) throws GeneralSecurityException, MessagingException, UnsupportedEncodingException {

        // 创建邮件对象 
        Message message = new MimeMessage( mailSession() );
        //设置主题
        message.setSubject( subject );
        // 发件人
        if (CheckNull.isNull( address )) {
            message.setFrom( new InternetAddress( from ) );
        } else {
            message.setFrom( new InternetAddress( from, address, "UTF-8" ) );
        }
        // 多个收件人
        message.setRecipients( MimeMessage.RecipientType.TO, InternetAddress.parse( toAddresslist ) );

        if (null != ccAddress && !ccAddress.trim().equals( "" )) {
            // 抄送人
            message.setRecipient( MimeMessage.RecipientType.CC, new InternetAddress( ccAddress ) );
        }
        if (null != bccAddress && !bccAddress.trim().equals( "" )) {
            // 暗送人
            message.setRecipient( MimeMessage.RecipientType.BCC, new InternetAddress( bccAddress ) );
        }
        //发送时间
        if (null != sentDate) {
            message.setSentDate( sentDate );
        }
        return message;
    }

2.3 准备发送的附件 和内容 

 /**
     * @param subject       主题
     * @param content       内容
     * @param sourcePath    目录地址(目录下所有文件全部发送)
     * @param filePath      文件地址(发送单个文件、图片、zip压缩包)
     * @param toAddresslist 收件人(单个\多个用,分割)
     * @param ccAddress     抄送人
     * @param bccAddress    密送人
     * @param sentDate      发送时间
     * @Author WeiLian
     * @Date: 19/11/14
     * @Description //TODO 发送整个文件夹下 和 不修改文件名情况下使用
     */
    public static void sendFilesMail(String subject, String content, String sourcePath, String filePath, String toAddresslist, String ccAddress, String bccAddress, Date sentDate) throws MessagingException, GeneralSecurityException, UnsupportedEncodingException {
        Message message = mailMessage( subject, toAddresslist, ccAddress, bccAddress, bccAddress, sentDate );
        final BodyPart messageBodyPart = new MimeBodyPart();
        //消息
        messageBodyPart.setContent( content, "text/html;charset=UTF-8" );
        //创建多重消息
        final Multipart multipart = new MimeMultipart();
        //设置文本消息部分
        multipart.addBodyPart( messageBodyPart );
        //为邮件添加多个附件
        MimeBodyPart attachment = null;
        if (null != sourcePath && !"".equals( sourcePath.trim() )) {
            final File source = new File( sourcePath );
            if (!source.exists()) {
                System.out.println( sourcePath + " not exists" );
                return;
            }
            final File[] files = source.listFiles();
            for (final File f : files) {
                attachment = new MimeBodyPart();
                final String fpath = f.getPath();
                //根据附件文件创建文件数据源
                final DataSource ds = new FileDataSource( fpath );
                attachment.setDataHandler( new DataHandler( ds ) );
                //为附件设置文件名
                attachment.setFileName( ds.getName() );
                multipart.addBodyPart( attachment );
            }
        }
        if (null != filePath && !"".equals( filePath )) {
            //添加zip附件
            attachment = new MimeBodyPart();
            //根据附件文件创建文件数据源
            final DataSource ds = new FileDataSource( filePath );
            attachment.setDataHandler( new DataHandler( ds ) );
            //为附件设置文件名
            attachment.setFileName( ds.getName() );
            multipart.addBodyPart( attachment );
        }
        // 发送完整消息
        message.setContent( multipart );
        // 发送消息
        // 连接邮件服务器、发送邮件、关闭连接,全做了
        Transport.send( message );

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值