利用javaMail实现QQ邮箱的发件

2017-10-18  本文已影响0人  iGroove

经过两个小时的测试,终于改掉了 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. ^什么是授权码,它又是如何设置?

上一篇 下一篇

猜你喜欢

热点阅读