首页 > 其他分享 >邮箱授权码发送邮件Demo

邮箱授权码发送邮件Demo

时间:2023-04-08 22:55:21浏览次数:52  
标签:String Demo 邮箱 mail new message 邮件

备注信息如下:

  1. 获取邮箱授权码,QQ邮箱获取授权码获取方式
  2. 获取 javax.mail-1.6.2.jar方式如下
    2.1、百度网盘下载
    链接:https://pan.baidu.com/s/1Bfhvk67JWAXHow01dJAN9A 提取码:mmos
    2.2、通过自身所拥有的Maven项目下载
<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
<dependency>
   <groupId>javax.mail</groupId>
   <artifactId>javax.mail-api</artifactId>
   <version>1.6.2</version>
</dependency>

1、此方式参数不可以放在项目.properties配置文件中通过@PostConstruct方式获取,会导致邮件发送失败,若是有大佬知道怎么处理可以在下方留言告知,或者发送邮件至[email protected],不胜感谢!!!

/**
 * @param targetMailAddress 目标邮箱
 * @param title             邮件标题
 * @param content           邮件内容(html)
 * @Description 发送邮件
 */
private void sendEmail(String targetMailAddress, String title, String content) throws Exception {
    //0.1 确定连接位置
    Properties props = new Properties();
    //获取邮箱smtp服务器的地址,
    props.setProperty("mail.host", srcMailHost);
    //是否进行权限验证。
    props.setProperty("mail.smtp.auth", "true");
    props.setProperty("mail.store.protocol", "imap");
    Authenticator authenticator = new Authenticator() {
        @Override
        public PasswordAuthentication getPasswordAuthentication() {
            //邮箱名称(srcUsername) : [email protected]取xxx    //授权码(srcPassword)
            return new PasswordAuthentication(srcUsername, srcPassword);
        }
    };
    //1 获得连接
    /**
     * props:包含配置信息的对象,Properties类型
     *         配置邮箱服务器地址、配置是否进行权限验证(帐号密码验证)等
     *
     * authenticator:确定权限(帐号和密码)
     *
     * 所以就要在上面构建这两个对象。
     */
    Session session = Session.getDefaultInstance(props, authenticator);
    Store store = session.getStore();
    store.connect(srcUsername, srcPassword);
    //2 创建消息
    Message message = new MimeMessage(session);
    // 2.1 发件人        [email protected] 我们自己的邮箱地址,就是名称
    message.setFrom(new InternetAddress(srcMailAddress));
    /**
     * 2.2 收件人
     *         第一个参数:
     *             RecipientType.TO    代表收件人
     *             RecipientType.CC    抄送
     *             RecipientType.BCC    暗送
     *         比如A要给B发邮件,但是A觉得有必要给要让C也看看其内容,就在给B发邮件时,
     *         将邮件内容抄送给C,那么C也能看到其内容了,但是B也能知道A给C抄送过该封邮件
     *         而如果是暗送(密送)给C的话,那么B就不知道A给C发送过该封邮件。
     *     第二个参数
     *         收件人的地址,或者是一个Address[],用来装抄送或者暗送人的名单。或者用来群发。可以是相同邮箱服务器的,也可以是不同的
     *         这里我们发送给我们的qq邮箱
     */
     //接收邮件地址(targetMailAddress):xxxxxx126.com
    message.setRecipient(RecipientType.TO, new InternetAddress(targetMailAddress));
    // 2.3 主题(标题)
    message.setSubject(title);
    // 2.4 正文
    message.setContent(content, "text/html;charset=UTF-8");
    //3发送消息
    Transport.send(message);
}

2、此方法Demo可行,未进行读取配置信息发送邮件测试

/**
 * 使用授权码发送邮件
 *
 * @param receiveMail 收件人电子邮箱
 * @param subject     邮件标题
 * @param mailContent 邮件内容
 * @throws Exception
 */
public void sendMail(String receiveMail, String subject, String mailContent) throws Exception {
    // 发件人电子邮箱
    String sendMail = "[email protected]";
    String authorizationCode = "授权码";
    // 指定发送邮件的主机为 smtp.qq.com
    String host = "smtp.qq.com";  //QQ 邮件服务器
    // 获取系统属性
    Properties properties = System.getProperties();
    // 设置邮件服务器
    properties.setProperty("mail.smtp.host", host);
    properties.put("mail.smtp.auth", "true");
    MailSSLSocketFactory sf = null;
    try {
        sf = new MailSSLSocketFactory();
    } catch (GeneralSecurityException e) {
        throw new RuntimeException(e);
    }
    sf.setTrustAllHosts(true);
    properties.put("mail.smtp.ssl.enable", "true");
    properties.put("mail.smtp.ssl.socketFactory", sf);
    // 获取默认session对象
    Session session = Session.getDefaultInstance(properties, new Authenticator() {
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(sendMail, authorizationCode); //发件人邮件用户名、授权码
        }
    });
    try {
        // 创建默认的 MimeMessage 对象
        MimeMessage message = new MimeMessage(session);
        // Set From: 头部头字段
        message.setFrom(new InternetAddress(sendMail));
        // Set To: 头部头字段
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(receiveMail));
        // Set Subject: 邮件的标题
        message.setSubject(subject);
        // 设置消息体
        message.setText(mailContent);
        // 发送消息
        Transport.send(message);
        System.out.println("==========通过授权码发送邮件成功==========");
    } catch (MessagingException mex) {
        mex.printStackTrace();
    }
}

标签:String,Demo,邮箱,mail,new,message,邮件
From: https://www.cnblogs.com/xiaoBlog2016/p/17299477.html

相关文章

  • Java笔记(14) UDP通讯程序Demo
    实现一个简单的UDP通信程序,仅作为笔记使用网络编程中有三要素:IP、端口号和通信协议,分别用来确定对方在互联网上的地址、指定接受数据的软件和确定数据在网络中传输的规则。IP地址IP地址分为IPv4地址和IPv6地址,这里不做讨论。IPv4地址中分为公网地址(万维网使用)和私有地址(局......
  • 使用ChatGPT快速实现灰度和RGBA图片转换为RGB三通道图片的Python数据清洗demo
    使用ChatGPT快速实现灰度和RGBA图片转换为RGB三通道图片的Python数据清洗demo任务需求Imganet数据集,由于原始图片有灰度图片、彩色图片和RGBA图片,我们的要求是将灰度图片和RGBA图片通过Image.open(img_path+img_name).convert('RGB')转换为RGB三通道图片重新保存起来。要求点......
  • golang TLS方式发送邮件
    packagemailimport( "crypto/tls" "errors" "fmt" "net/smtp" "net/textproto")typeloginAuthstruct{ username,passwordstring}//LoginAuthisfuncLoginAuth(usernamestring,passwordstring)......
  • 邮箱密码-2020模拟
    【题目描述】小明的电子邮箱密码忘记了。请你帮他找出密码。他零星记得密码的信息如下:1)密码是六位数字,前面两位是31;2)最后两位数字相同;3)能被16和46整除;请你找出所有可能的密码并统计个数。【评分标准】30分︰正确打印出一组符合的六位数(程序不报错);80分∶在满足30基础......
  • BERT-文本分类demo
    title:Bert文本分类一.模型准备首先在huggingface上下载对应的模型,也可以通过安装transformer,来将tensorflow版模型改为pytorch版。最后得到:config.json、pytorch_model.bin和vocab.txt。1.config.json:顾名思义,该文件就是BERT模型的配置文件,里面记录了所有用于训练的......
  • cube的Demo
    代码参考:useDemogoselectName,ExamNode,Course,avg(Num)fromSumDemogroupbyName,ExamNode,CoursewithcubeorderbyNamedesc,ExamNodedesc,Coursedescgo  ......
  • Demo07
     packagecom.zhang.struct; ​ publicclassForDemo04{   publicstaticvoidmain(String[]args){     //1.我们先打印第一列     //2.我们把固定的1再用一个循环包起来     //3.去掉重复项,i<=j     //4.调整样式    ......
  • C# ActiveMQ使用demo
    安装流程在上一篇引入包在nuget中下载安装Apache.NMS.ActiveMQ如图收发都要 引入usingApache.NMS;usingApache.NMS.ActiveMQ;发信方IConnectionFactoryfactory=newConnectionFactory("tcp://localhost:61616");//创建连接using(IC......
  • Demo06
     packagecom.zhang.struct; ​ importjava.util.Scanner; ​ publicclassifDemo01{   publicstaticvoidmain(String[]args){     Scannerscanner=newScanner(System.in); ​     System.out.println("请输入内容:");     Str......
  • 《渗透测试》信息打点-公众号服务&Github监控&供应链&网盘泄漏&证书图标邮箱资产 2023
     #微信公众号-获取&三方服务1、获取微信公众号途径https://weixin.sogou.com/2、微信公众号有无第三方服务 #Github监控-开发&配置&源码目标中开发人员或者托管公司上传的项目存在源码泄漏或配置信息(密码密匙等),人员数据库等敏感信息,找到多个脆弱点。1、人员&域名&邮箱......