首页 > 其他分享 >163+阿里云企业邮箱

163+阿里云企业邮箱

时间:2023-06-14 17:33:23浏览次数:25  
标签:String MimeMessage 阿里 session props new 企业邮箱 message 163

阿里云企业邮箱

无需导入依赖,使用Java包

/**
 * redisKey 用来进行频率校验的rediskey
 * toAddress 发给谁
 * title 标题
 * content 内容
 */
public boolean sendMailSecurityCode(String redisKey, String toAddress, String title, String content, long interval, long expire) {
        // 当前时间
        long currentTimeMillis = System.currentTimeMillis();
        // 发送频率校验
        RedisCacheValidateUtil.validateTime(redisUtils, redisKey, currentTimeMillis, interval);

        // 生成六位随机数
        String code = NumberUtil.getRandomNumber(6);

        try {
            //创建Session对象,session对象表示整个邮件的环境信息
            Session session = authenticationMail();
            // Message的实例对象表示一封电子邮件
            MimeMessage message = new MimeMessage(session);
            // 设置发件人的地址,sender是代表邮箱用户的昵称,自定义即可,accessKeyId是用户登录账号(邮箱号)
            message.setFrom(emailProperties.getSender() + "<" + emailProperties.getAccessKeyId() + ">");
            // 设置主题
            message.setSubject(title);
            // 设置邮件的文本内容
            content = String.format(content, code);
            message.setContent(content, "text/html;charset=utf-8");
            // 从session的环境中获取发送邮件的对象
            Transport transport = session.getTransport();
            // 连接邮件服务器 address为邮箱实际服务器地址 accessKeyId是用户登录账号(邮箱号) secret为密钥
            transport.connect(emailProperties.getAddress(), 465, emailProperties.getAccessKeyId(), emailProperties.getAccessKeySecret());
            // 设置收件人地址,并发送消息
            transport.sendMessage(message, new Address[]{new InternetAddress(toAddress)});
            transport.close();
        } catch (Exception e) {
            throw new SmsEmailException(SmsEmailResponseCodeEnum.SERVER_FAIL, e);
        }
        // 发送成功,放入缓存
        RedisCacheValidateUtil.setCache(redisUtils, redisKey, code, currentTimeMillis, expire);
        return true;
    }


/**
     * 验证认证信息
     * @return
     */
    private Session authenticationMail(){
        // 定义Properties对象,设置环境信息
        Properties props = new Properties();
        // 设置邮件服务器的地址
        // emailProperties.getAccessKeyId() 你需要连接的服务器,不同厂商不一样,比如
		// smtp.qiye.aliyun.com   smtp.qiye.163.com  smtp.163.com
        props.setProperty("mail.smtp.host", emailProperties.getAccessKeyId());//指定的smtp服务器 指定发送邮件的主机smtp.qq.com(QQ)|smtp.163.com(网易)
        props.setProperty("mail.smtp.auth", "true");
        props.setProperty("mail.transport.protocol", "smtp"); //设置发送邮件使用的协议
        // 不同厂商的端口也不同,直接百度就行,阿里云当前时间使用465端口需要进行加密,使用25端口不需要加密
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        return Session.getInstance(props);
        // 设置输出调试信息
        //session.setDebug(true);
    }

163 企业邮箱

public boolean sendMailSecurityCode(String redisKey, String toAddress, String title, String content, long interval, long expire) {
        // 当前时间
        long currentTimeMillis = System.currentTimeMillis();
        // 发送频率校验
        RedisCacheValidateUtil.validateTime(redisUtils, redisKey, currentTimeMillis, interval);
        Session session =  authenticationMail();
        // 生成六位随机数
        String code = NumberUtil.getRandomNumber(6);
        try {
            MimeMessage msg = getMimeMessage(session, title, String.format(content, code), toAddress);
            // 3.发送
            Transport.send(msg);
            // 发送成功,放入缓存
            RedisCacheValidateUtil.setCache(redisUtils, redisKey, code, currentTimeMillis, expire);
        }catch (Exception e) {
            throw new SmsEmailException(SmsEmailResponseCodeEnum.SERVER_FAIL, e);
        }
        return true;
    }




private MimeMessage getMimeMessage(Session session, String title, String content, String toAddress) throws MessagingException {
        // 2.创建邮件对象(Message抽象类的子类对象)
        MimeMessage msg = new MimeMessage(session); // 传入session
        msg.setSubject(title, "UTF-8");
        // sender为昵称   accessKeyId是用户登录账号(邮箱号)
        msg.setFrom(emailProperties.getSender() + "<" + emailProperties.getAccessKeyId() + ">");
        msg.setRecipients(MimeMessage.RecipientType.TO, new InternetAddress[] {
                new InternetAddress(toAddress),
        });
        // 3.邮件内容"复合"对象
        Multipart multipart = new MimeMultipart();

        // 正文
        BodyPart textPart = new MimeBodyPart();
        // 参数1:正文内容
        // 参数2:内容类型;字符编码集
        textPart.setContent(content, "text/html;charset=utf-8");

        // 添加至邮件内容
        multipart.addBodyPart(textPart); // 添加正文
        // 设置邮件内容
        msg.setContent(multipart);
        return msg;
    }



/**
     * 验证认证信息
     */
    private Session authenticationMail()  {
        Session session;
        try {
            // SMTP服务器的连接信息
            Properties props = new Properties();
            // SMTP主机号 address为邮箱实际服务器地址
            props.put("mail.smtp.host", emailProperties.getAddress());
            // 主机端口号
            props.put("mail.smtp.port", "25");
            // 是否需要认证
            props.put("mail.smtp.auth", "true");
            // 启用TLS加密
            props.put("mail.smtp.starttls.enable", "true");

            // 创建Session
            // 参数1:SMTP服务器的连接信息
            // 参数2:用户认证对象(Authenticator接口的匿名实现类)
            session = Session.getInstance(props, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(emailProperties.getAccessKeyId(), emailProperties.getAccessKeySecret());
                }
            });
            // 开启调试模式
            session.setDebug(true);
        } catch (Exception e) {
            throw new SmsEmailException(SmsEmailResponseCodeEnum.SERVER_FAIL, e);
        }
        return session;
    }

163 个人免费邮箱

@Override
    public boolean sendMailSecurityCode(String redisKey, String toAddress, String title, String content, long interval, long expire) {
        // 当前时间
        long currentTimeMillis = System.currentTimeMillis();
        // 发送频率校验
        RedisCacheValidateUtil.validateTime(redisUtils, redisKey, currentTimeMillis, interval);
        Session session = authenticationMail();
        MimeMessage message = getMimeMessage(true, session, emailProperties.getAddress(), toAddress);
        // 生成六位随机数
        String code = NumberUtil.getRandomNumber(6);
        message = getContent(message, title, String.format(content, code), new Date());

        try {
            Transport transport = session.getTransport();
            // 这里是你的163邮箱账号和imap授权码
            transport.connect(emailProperties.getAccessKeyId(), emailProperties.getAccessKeySecret());
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
            // 发送成功,放入缓存
            RedisCacheValidateUtil.setCache(redisUtils, redisKey, code, currentTimeMillis, expire);
        }catch (Exception e) {
            throw new SmsEmailException(SmsEmailResponseCodeEnum.SERVER_FAIL);
        }
        return true;
    }

    @Override
    public boolean sendMail(List<EmailMessageDetail> details) {
        Session session = authenticationMail();
        details.forEach(item -> {
            MimeMessage message = getMimeMessage(false, session, emailProperties.getAddress(), item.getToAddress());
            message = getContent(message, item.getTitle(), item.getContent(), new Date());

            try {
                Transport transport = session.getTransport();
                // 这里是你的163邮箱账号和imap授权码
                transport.connect(emailProperties.getAccessKeyId(), emailProperties.getAccessKeySecret());
                transport.sendMessage(message, message.getAllRecipients());
                transport.close();
            }catch (Exception e) {
                throw new SmsEmailException(SmsEmailResponseCodeEnum.SERVER_FAIL);
            }
        });
        return true;
    }

    /**
     * 验证认证信息
     */
    private Session authenticationMail()  {
        Session session;
        try {
            Properties props = new Properties();
            //设置用户的认证方式
            props.setProperty("mail.smtp.auth", "true");
            //设置传输协议
            props.setProperty("mail.transport.protocol", "smtp");
            //设置发件人的SMTP服务器地址
            props.setProperty("mail.smtp.host", "smtp.163.com");
            session = Session.getInstance(props);
            session.setDebug(true);
        } catch (Exception e) {
            throw new SmsEmailException(SmsEmailResponseCodeEnum.SERVER_FAIL);
        }
        return session;
    }

    /**
     * @param isSingle 是否单发
     *                 <P>true-向指定的一个收件人发送邮件,比如:找回密码、登录验证
     *                 <P>false-向多个收件人群发邮件,比如:优惠活动推送
     *                 <P>群发时多个收件人之间用英文逗号','分割
     * @param senderAddress 发件人地址
     * @param recipientAddress 收件人地址
     */
    private MimeMessage getMimeMessage(Boolean isSingle, Session session, String senderAddress, String recipientAddress) {
        MimeMessage message = new MimeMessage(session);
        try {
            message.setFrom(emailProperties.getSender() + "<" + senderAddress + ">");
            /*
            设置收件人地址
            MimeMessage.RecipientType.TO:发送    MimeMessage.RecipientType.CC:抄送   MimeMessage.RecipientType.BCC:密送
            */
            if (isSingle) {
                message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(recipientAddress));
            } else {
                message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientAddress));
            }
        } catch (Exception e){
            throw new SmsEmailException(SmsEmailResponseCodeEnum.SEND_FAIL);
        }

        return message;
    }

    /**
     * 邮件内容格式
     */
    private MimeMessage getContent(MimeMessage message, String title, String Content, Date sendTime){
        sendTime = sendTime == null ? new Date() : sendTime;
        try{
            message.setSubject(title, "UTF-8");
            message.setContent(Content, "text/html;charset=UTF-8");
            message.setSentDate(sendTime);
        }catch (Exception e){
            throw new SmsEmailException(SmsEmailResponseCodeEnum.SEND_FAIL);
        }
        return message;
    }

标签:String,MimeMessage,阿里,session,props,new,企业邮箱,message,163
From: https://www.cnblogs.com/xy20211005/p/17480900.html

相关文章

  • 华为 OD 统一考试(B 卷):阿里巴巴找黄金宝箱(2)
    最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单 https://dream.blog.csdn.net/article/details/128980730华为OD机试真题大全,用Python解华为机试题|机试宝典 https://dream.blog.csdn.net/article/details/129221789【华为OD机试】全流程解析......
  • 华为 OD 统一考试(B 卷):阿里巴巴找黄金宝箱(3)
    华为OD机试【4大宝典】再次上新题!①Python解华为机试题:https://dream.blog.csdn.net/article/details/129221789②C++解华为机试题:https://dream.blog.csdn.net/article/details/129472919③Java解华为机试题:https://dream.blog.csdn.net/article/details/129652513④......
  • 用硬实力,好作品,砸开阿里的前端开发金饭碗
    “我就是一个普普通通的开发者”–必须抛弃这种自我贬低的预先设定,一旦从心理预设上用’普通’的枷锁把自己给囚禁住,那么你将难以做好自己喜欢的事情,或是让自己在芸芸众生中显得独一无二,人的命运跟你如何设定自己有关。有一部纪录片名为《世纪天才.爱因斯坦》非常值得一看,从这部影......
  • 园子的商业化努力-阿里云云市场合作-第1季第1集
    今年是园子商业化生死攸关的一年,上半年快过去了,园子的商业化艰难而努力地向前推进。今年的商业化努力分三个方向进行:1、人才服务2、云市场3、VIP会员昨天发布的行行AI人才培养「常青藤计划」是人才服务方向的商业化努力,其中的商业模式不是培训,是针对企业的人才服务,是和园子......
  • 基于阿里云 Serverless 容器服务轻松部署企业级 AI 应用
    作者:元毅、坤仑数禾科技AI模型服务基于云原生架构,为不同业务环节提供智能决策支持。随着业务的快速发展,摆在数禾面前的难题是支撑模型计算的底层应用资源无法根据请求量来调整机器资源支持运算能力。同时,随着模型在线推理服务数量的增加,数禾的模型服务也变得越来越庞大、臃肿,难以......
  • 1631.最小体力消耗路径 (Medium)
    问题描述1631.最小体力消耗路径(Medium)你准备参加一场远足活动。给你一个二维rowsxcolumns的地图heights,其中heights[row][col]表示格子(row,col)的高度。一开始你在最左上角的格子(0,0),且你希望去最右下角的格子(rows-1,columns-1)(注意下标从0开始编号)。......
  • 看懂这八大技术战役,你会理解今天的阿里
    “今天阿里巴巴已经变成一家技术公司。”在刚刚结束的阿里20周年年会上,马老师这样说,“阿里人明明有很好的路可以走,但是却选择没有人走过的路,但又必须要去走的路。”成为一家技术公司,大概是阿里做过的最跟自己过不去的决定。看懂阿里技术二十年的八大战役,也许你会理解今天的阿里。二......
  • 阿里发布高德地图“情趣点”,我却用它做了份PPT!
    前一段时间,偶然间看到阿里设计中心发布的,高德地图设计中的“情趣点”。看到这样的标题,瞬间就吸引了我。点进去一看,发现确实很“情趣”!因为它分享的图片实在是太吸引人了,特别想把它用在PPT里面!下面我随便放几张图给你看看:图源阿里设计中心,侵删图源阿里设计中心,侵删图源阿里设计中心,......
  • 网站http免费升级到https(阿里云)
    1、购买阿里云免费的ssl证书通过下面链接购买免费的ssl证书:https://common-buy.aliyun.com/?spm=a2c4g.11186623.2.6.767e1a63RfnkBE&commodityCode=cas#/buy显示这个界面不能购买点那个蓝色字体购买免费的【证书资源包】2、申请证书前往阿里云ssl证书控制台----SSL证书----免费证......
  • 使用阿里云Rocky Linux镜像源替换默认源
    (1)打开终端,备份默认源(2)更换阿里云镜像源执行以下命令替换默认源sed-e's|^mirrorlist=|#mirrorlist=|g'\-e's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g'\-i.bak\/etc/yum.repos.d/Rocky-*.repo......