利用javaMail实现QQ邮箱的发件

经过两个小时的测试,终于改掉了 530 Error,然后可以把自己的邮件发出去,内心还是有点小几栋的。

一开始总是遇到这个异常
Caused by: javax.mail.AuthenticationFailedException: 530 Error: A secure connection is requiered(such as ssl).More information at http://service.mail.qq.com/cgi-bin/help?id=28

然后点了这个链接之后发现是因为客户端设置没有开启POP3/SMTP的SSL加密..没有利用SSL进行授权 [1]

解决这两个问题后问题就得到了解决
利用这个功能呢,我们可以实现验证、激活、提示的功能以及能利用邮箱办到的事。具体看个人发挥了。比如说:
最重要的是 你 想把要说的话 告诉 她 嘿嘿

具体实现mail发邮件功能如下:

  • 准备工作

在项目中导入mail.jar 没有的可以点这里
然后把jar包放入项目lib中

下载mail.jar

  • 代码实现

1.创建Properties对象,设置相关属性和发送协议

Properties props = new Properties();
props.setxxx();

2.设置SSL

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

3.创建验证器,设置个人账号和密码

Authenticator auth = new Authenticator() {
    public PasswordAuthentication getPasswordAuthentication() {
        //设置发送人的帐号和密码
        return new PasswordAuthentication("xxx@qq.com", "授权码");
    }
授权码

4.创建session会话

Session session = Session.getInstance(props, auth);

5.创建Message邮件内容

Message message = new MimeMessage(session);
//设置发送者
message.setFrom(new InternetAddress("xxx@qq.com"));
//设置发送方式与接收者
message.setRecipient(RecipientType.TO, new InternetAddress(email));//email填收件人邮箱
//设置邮件主题
message.setSubject("用户激活");
//设置邮件内容
message.setContent(emailMsg, "text/html;charset=utf-8");//emailMsg邮件内容

6.发送

Transport.send(message);
  • 源码
    public static void sendMail(String email, String emailMsg)
            throws AddressException, MessagingException, GeneralSecurityException {
        // 1.创建一个程序与邮件服务器会话对象 Session
        Properties props = new Properties();
        //设置发送的协议
        props.setProperty("mail.transport.protocol", "SMTP");
        props.setProperty("mail.smtp.auth", "true");// 指定验证为true
        //设置发送邮件的服务器
        props.setProperty("mail.host", "smtp.qq.com");
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        props.put("mail.smtp.ssl.enable", "true");
        props.put("mail.smtp.ssl.socketFactory", sf);
        // 创建验证器
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                //设置发送人的帐号和密码
                return new PasswordAuthentication("xxx@qq.com", "授权码");
            }
        };

        Session session = Session.getInstance(props, auth);

        // 2.创建一个Message,它相当于是邮件内容
        Message message = new MimeMessage(session);

        //设置发送者
        message.setFrom(new InternetAddress("xxx@qq.com"));

        //设置发送方式与接收者
        message.setRecipient(RecipientType.TO, new InternetAddress(email));

        //设置邮件主题
        message.setSubject("用户激活");

        //设置邮件内容
        message.setContent(emailMsg, "text/html;charset=utf-8");

        // 3.创建 Transport用于将邮件发送
        Transport.send(message);
}


  1. ^什么是授权码,它又是如何设置?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,237评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,221评论 6 342
  • Django 官方文档 发送email 官网地址:[https://docs.djangoproject.com/...
    学以致用123阅读 6,874评论 0 2
  • 1. 网络基础TCP/IP HTTP基于TCP/IP协议族,HTTP属于它内部的一个子集。 把互联网相关联的协议集...
    yozosann阅读 8,823评论 0 20
  • 是的,能赚钱。 只不过......赚的不多。 今天去领快递,回来的路上,经过一家商店时,听到背后飘来一句话:“写小...
    张泊宁阅读 4,605评论 9 7

友情链接更多精彩内容