最近想写一个邮箱自动验证功能,在网上看了很多,写到自己上面出了很多问题,记录下来给后面的人一个参考

package com.app.tools;

import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;



public class SendEmail {

//    public static final String HOST = "mx3.qq.com";
    public static final String HOST = "smtp.163.com";
    public static final String PROTOCOL = "smtp";
    public static final int PORT = 25;    /*465    这是QQ的端口*/
    public static final String FROM = "xxxxx@163.com";//发件人的email
    public static final String PWD = "xxxxxxx";//发件人密码


    private static Session getSession() {
        Properties props = new Properties();
        props.put("mail.smtp.host", HOST);//设置服务器地址  
        props.put("mail.store.protocol" , PROTOCOL);//设置协议  
        props.put("mail.smtp.port", PORT);//设置端口  
        props.put("mail.smtp.auth" , "true");

        Authenticator authenticator = new Authenticator() {

            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(FROM, PWD);
            }

        };
        Session session = Session.getDefaultInstance(props , authenticator);

        return session;
    }

    public static void send(String toEmail , String content) {
        Session session = getSession();
        try {
            System.out.println("--send--"+content);
            // Instantiate a message  
            Message msg = new MimeMessage(session);

            //Set message attributes  
            msg.setFrom(new InternetAddress(FROM));
            InternetAddress[] address = {new InternetAddress(toEmail)};
            msg.setRecipients(Message.RecipientType.TO, address);
            msg.setSubject("账号激活邮件");
            msg.setSentDate(new Date());
            msg.setContent(content,"text/html;charset=utf-8");


            //Send the message  
            Transport.send(msg);
        }
        catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new SendEmail().send("xxxxx@qq.com","dsfsdf");
        System.out.println("success");
    }
} 

请注意以下要点:

1、是否开启了认证,QQ邮箱、163邮箱均要开启认证

2、javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25;      //连接超时  

解决参考:将这个属性的true加上引号,请奇葩的异常! 注意:如果没有这条属性,可能或抛出  需要认证异常(Required  Authentication) 这个异常一般是由1、2造成的

3、在设置属性的时候,一定要注意弄清楚使用邮箱的地址和端口。  javax.mail.AuthenticationFailedException

 QQ邮箱端口:  mx3.qq.com  端口:465         163邮箱:smtp.163.com   端口:25       这是都是发送邮件时使用的smtp协议所用。如果是收邮件则用的是pop3协议,那又不一样了。这个请自行查找

4、

在使用QQ邮箱发送邮件的时候,出现这个异常。 查了一下,官方说法是发送太频繁所以被锁定了!目前还没有解决。明天试试看看能不能成功(未成功)

 

以上是几个容易出现的异常,解决之后,其他异常可根据具体抛出的信息解决!

 

补充:QQ经测试也可以了

posted @ 2016-08-06 23:46  hiberk  阅读(1044)  评论(0编辑  收藏  举报