Java基础实现邮件发送(以qq和网易为例)
当你浏览一些网站的时候,更多的时候都是需要我们登陆、注册的;而注册激活账号一般有两种形式,一是电话验证码激活,二是邮箱激活;第一种是人名币玩家的,而第二种是社区版的。今天我们就从零分享一个如何用java来实现邮件的发送。
1、先说一下邮件发送都有哪些用处:
1、 用户注册,激活账号
2、 比如qq的生日祝福
3、 一些网站的最新活动或福利也会以邮件的形式告知客户
…
2、来说一下javaMail:
javaMail,是提供开发者处理电子邮件相关的编程接口。
它可以很方便地执行一些常用的邮件传送。
简单来说,就是通过java来发送邮件。
3、再介绍一下电子邮箱:
电子邮箱(E-mail地址)需要在邮件服务器上进行申请,
通俗地说,电子邮箱其实就是用户在邮件服务器上申请的一个账户。
邮件服务器就会为这个账号分配一定的内存空间,
用户从而可以使用这个账号以及空间,发送电子邮件和保存别人发过来的电子邮件。
4、再实战之前我们还是有必要了解一下邮件发送(SMTP)和邮件接收(POP3)的协议:
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,
它是一组用于由源地址到目的地址传送邮件的规则,由它来控制邮件的中转方式。
SMTP协议属于TCP/IP协议簇,
它帮组每台计算机在发送或中转信件时找到下一个目的地。
SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。
POP3(Post Office Protocol -Version3)
本协议主要用于主持客户端远程管理在服务器上的电子邮件。
邮件的发送接收过程
5、实战编写
准备工作:
在实战编写之前我们需要做一些准备工作,比如开通SMTP协议(先以网易为例)
把我画框的打上勾一步步操作就是把网易的SMTP协议开通了,现在就可以用代码来发送邮件了。
由于java没有实现javaMail,只是给了相关接口,所以呢我们需要下载一些jar包,给大家推荐一个网站把http://mavenrepository.com/,这里面有你需要的所有javajar包,如果你开发maven项目的话,那这个网站对你来说也是很有帮助的。好了,我来搜索把jar下载下来
选择第二个即可
把jar下下来我们的准备工作就完成了。
代码编写:
1、在你用的ide集合开发工具里,生成一个java project,然后再建三个包;util包放一些我们写的工具类,lib包放一些用到的jar包文件,test包放我们的测试文件。
2、我们再util包下建一个类,就起名为SendEmailByWY,这个名字随意啦下面是代码
package util;
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.Message.RecipientType;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* send email by wangyi
* @author admin
*
*/
public class SendEmailByWY {
/**
* send email method
* @param to who you want to send
* @param content email content
* @throws MessagingException
* @throws AddressException
*/
public static void sendEmail(String to , String content) throws AddressException, MessagingException {
/*
* 1、创建连接对象
* 设置邮件发送的协议
* 设置发送邮件的服务器
* 填写自己的密钥
*
* 2、创建邮件对象
* 设置发件人
* 设置收件人
* 设置抄送者
* 设置邮件主题
* 设置邮件内容
*
* 3、发送邮件
*/
// 1、创建连接对象
Properties props = new Properties();
//1.1设置邮件发送的协议
props.put("mail.transport.protocol" , "smtp");
//1.2设置发送邮件的服务器
props.put("mail.smtp.host" , "smtp.163.com");
//1.3需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)
props.put("mail.smtp.auth" , "true");
//1.4下面一串是发送邮件用465端口,如果不写就是以25端口发送,阿里云已经关闭了25端口
props.setProperty("mail.smtp.socketFactory.class" , "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.socketFactory.fallback" , "false");
props.setProperty("mail.smtp.port" , "465");
props.setProperty("mail.smtp.socketFactory.port" , "465");
//1.5认证信息
Session session=Session.getInstance(props , new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication("自己@163.com" , "密钥");
}
});
// 2、创建邮件对象
Message message = new MimeMessage( session );
//2.1设置发件人
message.setFrom( new InternetAddress("自己@163.com") );
//2.2设置收件人
message.setRecipient(RecipientType.TO , new InternetAddress( to ));
//2.3设置抄送者(PS:没有这一条网易会认为这是一条垃圾短信,而发不出去)
message.setRecipient(RecipientType.CC , new InternetAddress("自己@163.com"));
//2.4设置邮件的主题
message.setSubject("主题");
//2.5设置邮件的内容
message.setContent("<h1>"+content+"</h1>", "text/html;charset=utf-8");
// 3、发送邮件
Transport.send(message);
}
}
3、我们编写一个测试类,看看我们的工具类能不能用
package test;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import util.SendEmailByWY;
public class TestWY {
public static void main(String[] args) throws AddressException, MessagingException {
SendEmailByWY.sendEmail("xxx@qq.com", "test");
}
}
我们已经发送成功了
那我们再演示一下qq的;
准备工作,开通qq的SMTP协议
代码编写
一样的再util包下建立一个类,SendEmailByQQ,这个名字还是随意啦,下面是代码
package util;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* send email by qq
* @author admin
*
*/
public class SendEmailByQQ {
public static void sendEmail(String to , String content ) throws AddressException, MessagingException {
/*
* 1、创建连接对象
* 2、创建邮件对象
* 3、发送邮件
*/
// 1、创建连接对象
Properties props = new Properties();
props.put("mail.transport.protocol" , "smtp");
props.put("mail.smtp.host", "smtp.qq.com");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", 465);
props.put("mail.smtp.ssl.enable", "true");
Session session=Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication(){//认证信息
return new PasswordAuthentication("自己@qq.com", "密钥");
}
});
// 2、创建邮件对象
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("自己@qq.com"));
message.setRecipient(RecipientType.TO, new InternetAddress(to));
message.setRecipient(RecipientType.CC, new InternetAddress("自己@qq.com"));
message.setSubject("主题");
message.setContent("<h1>"+content+"</h1>","text/html;charset=utf-8");
// 3、发送邮件
Transport.send(message);
}
}
我们也编写一个测试类
package test;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import util.SendEmailByQQ;
import util.SendEmailByWY;
public class TestWY {
public static void main(String[] args) throws AddressException, MessagingException {
// SendEmailByWY.sendEmail("xxx@qq.com", "test send Email");
SendEmailByQQ.sendEmail("xxx@qq.com", "success");
}
}