我们实现发送邮件需要以下几步
1.打开邮箱的POP3/SMTP服务
2.导入mail.jar 和activation.jar两个jar包。
3.得到Session类的对象
4.根据Session类的对象创建MimeMessage类对象
5.使用TransPort类的send()方法实现发送邮件
一般情况下邮箱的POP3/SMTP服务默认是关闭的,我们需要手动打开。这里以qq邮箱为例
进入邮箱后点击设置>账户>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 第一个就是POP3服务我们点击开启。
这时候我们按照要求一步一步来就可以了。最后会给你一个授权码,我们要记录好这个授权码。
qq邮箱开启POP3/SMTP服务的连接
我们只需要把mail.jar 和activation.jar两个jar包导入到项目里面就可以了
import java.util.Properties;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
public class Test {
public static void main(String[] args) {
/*
* 发邮件三部曲
* 1.得到Session
* 2.得到得到MimeMessage对象
* 3.得到TransPort
*/
//得到Session需要先得到Properties 和 Authenticator对象
Properties prs=new Properties();
//第一个键是邮箱服务器的地址,第二个键是邮箱是否需要验证
prs.put("mail.host","smtp.qq.com");
prs.put("mail.smtp.auth", "true");
//这个配置必不可少
prs.put("mail.smtp.starttls.enable", "true");
//创建Authenticator对象返回的一个 包含用户名和密码的对象
javax.mail.Authenticator auth=new javax.mail.Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("发件人的邮箱","开启POP3/SMTP服务的授权码");//
}
};
//这时候我们就可以创建session对象了
Session session=Session.getInstance(prs,auth);
//创建MimeMessage对象
MimeMessage msg=new MimeMessage(session);
//设置发件人
try{
msg.setFrom(new InternetAddress("发件人的邮箱"));//设置发件人
msg.setRecipients(RecipientType.TO, "收件人的邮箱");//设置收件人
msg.setRecipients(RecipientType.CC, "抄送的邮箱");//设置抄送
msg.setRecipients(RecipientType.BCC, "暗送的邮箱");//设置暗送
msg.setSubject("这是来自lllllllll的测试");//邮件的标题
邮件的内容
msg.setContent("这是测试懂不这是测试懂不这是测试懂不这是测试懂不这是测试懂不这是测试懂不这是测试懂不","text/html;charset=utf-8");
//发送邮件
Transport.send(msg);
}catch(Exception e){
e.printStackTrace();
}
}
}
这样我们就实现发送纯文本邮件了。
大体的步骤基本一致只是在MimeMessage对象保存内容时有所不同
直接看代码吧
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
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.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import org.junit.Test;
public class mailTest {
@Test
public void fun1() throws MessagingException, UnsupportedEncodingException{
/*
* 发邮件三部曲
* 1.获得Session
* 2.获得MimeMessage
* 3.获得TransPort
*/
//得到Session之前需要先获得Properties对象并且配置好需要的东西 Authenticator对象
Properties prs=new Properties();
prs.put("mail.host", "smtp.qq.com");//设置邮箱的服务器
prs.put("mail.smtp.auth", "true");//设置是否通过邮箱验证
prs.put("mail.smtp.starttls.enable", "true");
//得到Authenticator对象
Authenticator auth=new Authenticator(){
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("发件人邮箱","开启POP3/SMPT服务时的授权码");
}
};
//得到Session对象
Session session=Session.getInstance(prs, auth);
//得到MimeMessage对象
MimeMessage msg=new MimeMessage(session);
//设置邮件标题
msg.setSubject("这是我使用java代码实现发邮件的练习");
/*
* 我们想发送带附件的邮件 就需要创建MimeMultipart对象,这个类是一个多部件类,里面可以保存多个MimeBodyPart对象
* MimeBodyPart对象里面保存邮件正文或者附件,一个MimeBodyPart只能保存一种,但可以有多个mimeBodyPart对象
*/
MimeMultipart list=new MimeMultipart();
MimeBodyPart body1=new MimeBodyPart();
//设置主体部件的内容
body1.setContent("你好啊,这是一封带附件的邮件","text/html;charset=UTF-8");
//把主体部件添加到集合里面
list.addBodyPart(body1);
//再次创建一个部件类用于保存文件
MimeBodyPart body2=new MimeBodyPart();
DataSource source=new FileDataSource("D:/悟空.mp3");
body2.setDataHandler(new DataHandler(source));
body2.setFileName(MimeUtility.encodeText("悟空.mp3"));
//把附件部分添加到集合里面
list.addBodyPart(body2);
msg.setContent(list);
//设置发件人和收件人
msg.setFrom(new InternetAddress("发件人的邮箱"));
msg.setRecipients(RecipientType.TO, "收件人的邮箱");//设置发送的对象
//发送邮件
Transport.send(msg);
}
}
这样我们就实现了发送带有附件的邮件。