你的位置:首页 > Java教程

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


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

 

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