您的位置:首页 > 其它

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

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

以上是几个容易出现的异常,解决之后,其他异常可根据具体抛出的信息解决!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐