引言
- java发送邮件
- 使用QQ邮箱 给126邮箱发送一封邮件
一、导包
mail.jar下载
提取码:0nxi
基础知识
首先
- 邮件传输有两个协议:POP3和SMTP
- 发送邮件协议smtp
- 查收邮件协议pop3
来看QQ邮箱QQ邮箱
从发邮件的界面可以看到,要发送邮件,要先登录上qq邮箱,准备邮件(包含收件人、主题、正文),再发送邮件
1. 创建Session会话: Session.getDefaultInstance()
- 使用session对象连接上我们qq邮箱的服务器,
- 再准备邮件发送上去
- 创建sessin会话之前,要为这个session对象设置一些参数
定义在Properties属性文件中
Properties properties = new Properties();
//“stmp.qq.com"可以改比如改成stmp.163.com
properties.setProperty("mail.host","stmp.qq.com");
//mail.transport.protocol邮件传输协议,这里是smtp传输协议
properties.setProperty("mail.transport.protocol","smtp");
properties.setProperty("mail.smtp.port","587");
properties.setProperty("mail.smtp.auth","true");
properties.setProperty("mail.debug","true");
//设置key和value
Session session = Session.getDefaultInstance(properties);
2. 获取一个传输对象(ts):session.getTransport()
- 通过session.getTransport()
代码如下
Transport ts = null;
try {
//获取到传输的对象 发送邮件
ts = session.getTransport();
} catch (Exception e) {
e.printStackTrace();
}
3. 通过传输对象(ts) 连接qq服务器:ts.connect()
- ts.connect()方法给3个参数,
- 一个host(就是属性文件里面的mail.host), 一个QQ账号(2823600378@qq.com)、一个授权码
- 授权码在QQ邮箱->设置->账户->(往下翻找到:POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务)->点击黄色框[获取授权码登录第三方客户端邮箱] 里面的”生成授权码“
ts.connect(properties.getProperty("mail.host"),"3504164084@qq.com","pxxebkqkejiqcjei");//两个参数,一个账号,一个密码
4. 构建一封邮件:MimeMessage
MimeMessage message = new MimeMessage(session);
5. 为message配置发件人、收件人、主题、正文等信息
- 发件人:message.setFrom();//给定参数是一个new InternetAddress()对象,再把文我的账号给他
- 收件人:message.setRecipient();
//Message.RecipientType.TO表示收件人
//Message.RecipientType.CC抄送//A发邮件给B,但希望领导C也看见,就抄送给C
//Message.RecipientType.BCC暗送 - 主题:message.setSubject();
- 正文:message.setContent();//还要给个编码格式
//发件人
message.setFrom(new InternetAddress("3000064084@qq.com"));
//收件人
//Message.RecipientType.TO表示收件人
//Message.RecipientType.CC抄送//A发邮件给B,但希望领导C也看见,就抄送给C
//Message.RecipientType.BCC暗送
message.setRecipient(Message.RecipientType.TO,new InternetAddress("203965846@qq.com"));
//把文件抄送给xxx@qq.com
// message.setRecipient(Message.RecipientType.CC,new InternetAddress("xxx@qq.com"));
//主题
message.setSubject("革命人永远是年轻");
//设置正文(给个编码格式)
message.setContent("我们万众一心去远航,凝聚情,凝聚爱,同心创未来","text/html;charset=utf-8");
6. 保存message、传输对象ts发送
//保存邮件
message.saveChanges();
//发送邮件
ts.sendMessage(message,message.getAllRecipients());
7. 关闭传输对象ts
finally {
if(ts!=null){
try {
ts.close();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
完整代码
package com.itqf.utils;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
//注册成功验证邮件发送
public class EmailUtils {
public static void main(String[] args) {
//
Properties properties = new Properties();
//“smtp.qq.com"可以改比如改成smtp.163.com
properties.setProperty("mail.host","smtp.qq.com");
//mail.transport.protocol邮件传输协议,这里是smtp传输协议
properties.setProperty("mail.transport.protocol","smtp");
properties.setProperty("mail.smtp.port","587");
properties.setProperty("mail.smtp.auth","true");
properties.setProperty("mail.debug","true");
//设置key和value
Session session = Session.getDefaultInstance(properties);
Transport ts = null;
try {
//获取到传输的对象 发送邮件
ts = session.getTransport();
//pxxebkqkejiqcjei
//发送邮件之前,校验账号和密码(这个密码不是qq号的密码,而是授权码)
ts.connect(properties.getProperty("mail.smtp.host"),"3000064084@qq.com","pxxebkqkejiqcjei");//两个参数,一个账号,一个密码
//构建一封邮件
MimeMessage message = new MimeMessage(session);
//发件人
message.setFrom(new InternetAddress("3000064084@qq.com"));
//收件人
//Message.RecipientType.TO表示收件人
//Message.RecipientType.CC抄送//A发邮件给B,但希望领导C也看见,就抄送给C
//Message.RecipientType.BCC暗送
message.setRecipient(Message.RecipientType.TO,new InternetAddress("203960056@qq.com"));
//把文件抄送给xxx@qq.com
// message.setRecipient(Message.RecipientType.CC,new InternetAddress("xxx@qq.com"));
//主题
message.setSubject("革命人永远是年轻");
//设置正文(给个编码格式)
message.setContent("我们万众一心去远航,凝聚情,凝聚爱,同心创未来","text/html;charset=utf-8");
//保存邮件
message.saveChanges();
//发送邮件
ts.sendMessage(message,message.getAllRecipients());
} catch (Exception e) {
e.printStackTrace();
}finally {
if(ts!=null){
try {
ts.close();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
}
}
封装成一个Utils工具类
- 可以通过传一个user类,里面定义了邮箱地址u_email,也就是收件人的邮箱账号
- 邮件的正文message.setContent发送的是给这个user类一个激活连接
String ip = InetAddress.getLocalHost().getHostAddress();
String url = "http://"+ip+":8080/user?method=active&c="+user.getUcode();
message.setContent(user.getUname()+",您好<br>欢迎注册myshop商城!请点击连接进行激活:<a href='"+url+"'>"+url+"</a>","text/html;charset=utf-8");
- MimeMessage对象通过写一个creatMsg方法,返回message
private static MimeMessage createMsg(Session session,String myAccount,User user){}
完整代码EmailUtils工具类
import com.itqf.entity.User;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Properties;
//注册成功验证邮件发送
public class EmailUtils {
public static void sendEmail(User user) {
//qq账户
String myAccount = "3500004084@qq.com";
//授权码
String myAuthorizationCode = "pxxebkqkejiqcjei";
//发件人邮箱的smtp服务器地址。也可以写smtp.163.com
String smtpHost = "smtp.qq.com";
//
Properties properties = new Properties();
//“smtp.qq.com"可以改比如改成smtp.163.com
properties.setProperty("mail.host",smtpHost);
//mail.transport.protocol邮件传输协议,这里是smtp传输协议
properties.setProperty("mail.transport.protocol","smtp");
properties.setProperty("mail.smtp.port","587");
properties.setProperty("mail.smtp.auth","true");
properties.setProperty("mail.debug","true");
//设置key和value
Session session = Session.getDefaultInstance(properties);
Transport ts = null;
try {
//获取到传输的对象 发送邮件
ts = session.getTransport();
//pxxebkqkejiqcjei
//发送邮件之前,校验账号和密码(这个密码不是qq号的密码,而是授权码)
ts.connect(properties.getProperty("mail.host"),myAccount,myAuthorizationCode);//两个参数,一个账号,一个密码
//邮件
MimeMessage message = createMsg(session,myAccount,user);
//发送邮件
ts.sendMessage(message,message.getAllRecipients());
} catch (Exception e) {
e.printStackTrace();
}finally {
if(ts!=null){
try {
ts.close();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
}
private static MimeMessage createMsg(Session session,String myAccount,User user){
//构建一封邮件
MimeMessage message = new MimeMessage(session);
//发件人
try {
message.setFrom(new InternetAddress(myAccount));
//收件人
//Message.RecipientType.TO表示收件人
//Message.RecipientType.CC抄送//A发邮件给B,但希望领导C也看见,就抄送给C
//Message.RecipientType.BCC暗送
message.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getUemail()));
//把文件抄送给xxx@qq.com
// message.setRecipient(Message.RecipientType.CC,new InternetAddress("xxx@qq.com"));
//主题
message.setSubject("myshop商城账号激活邮件");
//设置正文(给个编码格式)
String ip = InetAddress.getLocalHost().getHostAddress();
String url = "http://"+ip+":8080/user?method=active&c="+user.getUcode();
message.setContent(user.getUname()+",您好<br>欢迎注册myshop商城!请点击连接进行激活:<a href='"+url+"'>"+url+"</a>","text/html;charset=utf-8");
//保存邮件
message.saveChanges();
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
}
return message;
}
}