1 开启SMTP服务
登录QQ邮箱,点击设置,切换到账户界面
开启SMTP服务,点击开启
使用密保手机输入"配置邮件客户端"至1069070069手机号,然后点击我已发送按钮,确认后,返回一串16位的代码,要记住,之后会用,这里笔者将授权码遮住了,都懂得╮( ̄▽ ̄)╭
注意:如果更换或QQ密码或者独立密码的,这个授权码会失效,需要重新获取验证码,具体可以查看->https://service.mail.qq.com/cgi-bin/help?subtype=1&&no=1001256&&id=28
然后就可以编写java代码了,需要的jar包为mail.jar,JavaEE自带的,以防万一,我也上传了一份,有需要的可以自己下
http://download.csdn.net/download/weixin_38187317/10252021
2 编写代码java
首先给出项目结构:
配置文件qqEamil.properties:
#表示SMTP发送邮件,必须进行身份验证
mail.smtp.auth=true
#此处填写SMTP服务器
mail.smtp.host=smtp.qq.com
#端口号
mail.smtp.port=587
#此处填写你的账号
mail.user=xxxxxxxx@qq.com
#此处的密码就是前面说的16位STMP口令
mail.password=xxxxxxxxxxxxxxxx
#发送邮件协议名称
mail.transport.protocol=smtp
编写测试类1
package test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
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 TestEmail {
private static String content = "<!DOCTYPE html>"
+ "<html>"
+ "<head>"
+ "<title>测试邮件</title>"
+ "<meta name=\"content-type\" content=\"text/html; charset=UTF-8\">"
+ "</head>"
+ "<body>"
+ "这是一封测试邮件~"
+ "</body>"
+ "</html>"; // 可以用HTMl语言写
public static void main(String[] args) {
System.out.println("测试发送邮件");
// 创建Properties 类用于记录邮箱的一些属性
Properties props = new Properties();
InputStream inputStream = TestEmail.class.getClassLoader().getResourceAsStream("qqEamil.properties");
try {
props.load(inputStream); //加载properties文件
inputStream.close();
// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator);
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
// 设置发件人
InternetAddress from = new InternetAddress(props.getProperty("mail.user"));
message.setFrom(from);
// 设置收件人的邮箱
InternetAddress to = new InternetAddress("xxxxxxxxx@qq.com");
message.setRecipient(RecipientType.TO, to);
// 设置邮件标题
message.setSubject("测试邮件");
// 设置邮件的内容体
message.setContent(content, "text/html;charset=UTF-8");
// 发送邮件
Transport.send(message);
} catch (MessagingException e) {
// 邮件异常
e.printStackTrace();
} catch (IOException e) {
// properties文件加载异常
e.printStackTrace();
}
}
}
编写测试类2
测试类1的Transport不由我们控制,程序运行自行销毁,但程序长了就不好了,我们需要能自己控制开闭的Transport
package test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class TestEmail2 {
private static String content = "<!DOCTYPE html>"
+ "<html>"
+ "<head>"
+ "<title>测试邮件2</title>"
+ "<meta name=\"content-type\" content=\"text/html; charset=UTF-8\">"
+ "</head>"
+ "<body>"
+ "这是一封测试邮件~"
+ "</body>"
+ "</html>"; // 可以用HTMl语言写
public static void main(String[] args) {
System.out.println("测试发送邮件2");
// 创建Properties 类用于记录邮箱的一些属性
Properties props = new Properties();
InputStream inputStream = TestEmail.class.getClassLoader().getResourceAsStream("qqEamil.properties");
try {
props.load(inputStream); //加载properties文件
inputStream.close();
// 使用环境属性和授权信息,创建邮件会话
Session session = Session.getInstance(props);
// 通过session得到transport对象
Transport ts = session.getTransport();
// 连接邮件服务器:邮箱类型,帐号,授权码
ts.connect("smtp.qq.com",props.getProperty("mail.user"), props.getProperty("mail.password"));
// 创建邮件消息
MimeMessage message = new MimeMessage(session);
// 设置发件人
InternetAddress from = new InternetAddress(props.getProperty("mail.user"));
message.setFrom(from);
// 设置收件人的邮箱
InternetAddress to = new InternetAddress("xxxxxxxx@qq.com");
message.setRecipient(RecipientType.TO, to);
// 设置邮件标题
message.setSubject("测试邮件");
// 设置邮件的内容体
message.setContent(content, "text/html;charset=UTF-8");
// 发送邮件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
} catch (MessagingException e) {
// 邮件异常
e.printStackTrace();
} catch (IOException e) {
// properties文件加载异常
e.printStackTrace();
}
}
}
最终结果: