【javamail】 通过javamail用各种邮箱发送邮件!!

javamail 专栏收录该内容
1 篇文章 0 订阅

折腾了好久。。。。好头疼。
也看了很多帖子,收藏了一个 介绍了各种底层的东西,我晚上再回去看。
先贴一下代码, 主要说一下用126 163之类的邮箱去发送邮件和qq邮箱的区别。

因为qq邮箱开启了ssl验证,所以配置有点不一样。

如果不用能通过ssl的端口 就会报错530 Error: A secure connection is requiered(such as ssl). 一看就是这个链接需要ssl支持嘛

qq邮箱

注意一下登录需要用授权码登录

这里写图片描述

这里写图片描述

public class MailUtil {
    public static void main(String[] args) {
        sendMail();
    }

    public static void sendMail(){

        //1  编写配置  服务器,  端口,  验证    协议到  配置文件
        Properties prop =  new Properties();
        prop.put("mail.smtp.host", "smtp.qq.com"); //smtp服务端
        prop.put("mail.smtp.auth", "true");      //是否验证
        prop.put("mail.transport.protocol", "smtp"); //传输协议
        prop.put("mail.smtp.socketFactory.class",   "javax.net.ssl.SSLSocketFactory");
        prop.put("mail.smtp.socketFactory.port", "465");
        prop.put("mail.smtp.port", 465);   //这三句我也不知道干啥的。。。大概就是用ssh验证登录的另一个端口,  一般发送邮件的smtp是用25端口, 这个有ssl验证的不一样, 而且注意  socketFactory的后面一定要加双引号

        try {
            //2.创建sesssion
            Session  session = Session.getDefaultInstance(prop, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("xxxxx@qq.com","vbawokakqrmybjef");
                }
    });

            //3.开启session的调试模式,可以查看当前邮件发送状态
            session.setDebug(true);

            //4.建邮件
            /**
             * 邮件对象, ---发件人 收件人 抄送人 主题  内容
             */
            MimeMessage mail =new MimeMessage(session);
            mail.setFrom(new InternetAddress("xxxxx@qq.com"));
            mail.setRecipient(Message.RecipientType.TO, new InternetAddress("cxksrenly@163.com"));
            mail.setSubject("重要通知");
            mail.setContent("<font color='red'>这是邮件的正文内容</font><br/><a href='http://gz.itcast.cn'>传智官网</a><br/> ","text/html;charset=utf-8"); // 注意 用text/plain text/html

            //4.通过session获取Transport对象(发送邮件的核心API)
            Transport ts=session.getTransport(); 
            //6.发送电子邮件

            ts.send(mail);

//          for(int i =0; i<10; i++){
//          
//      
//          Transport.send(mail);
//          } 
//          

        } catch ( Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException(e);
        }  



    }
}

其他没有ssh验证的

Properties prop =  new Properties();
        prop.put("mail.smtp.host", "smtp.qq.com");
        prop.put("mail.smtp.port", 25);
        prop.put("mail.smtp.auth", "true");
        prop.put("mail.transport.protocol", "smtp");

就可以啦

还有一个注意的点就是你的登录的用户名和密码是需要通过base加密的。 这个不懂的话自己去看一下smtp协议吧。

在代码中生成session的时候注意用有两个参数的方法

除了上面写的配置文件,注意看

Session  session = Session.getDefaultInstance(prop, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("xxxxx@qq.com","vbawokakqrmybjef");
                }
    });

就是把你的用户名和授权码进行base64加密,然后登录服务端去发送邮件

注意 不是邮箱密码, 不是qq密码 !!是授权码
qq邮箱要自己发短信验证去获得一个授权码,
其他的邮箱你开通smtp的时候就会看到授权码啦

  • 2
    点赞
  • 1
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

qq_23117775

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值