1.前置条件
发送邮件的前提是需要java的一个javax.mail的一个jar包。它支持一些简单的邮件传输协议,例如:SMTP,POP3等。我使用的是javax.mail-1.16.2.jar。
需要下载的话,可以到Javaee官方的github下载:https://javaee.github.io/javamail/#Download_JavaMail_Release
点击即可下载
若使用maven项目,则可以使用
<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
2.Java实现纯文本的邮件发送
先使用一个utils类,生成6位的随机数
package Utils;
import java.util.Random;
/**
* @author ryk
* @version 1.0.0
* @ClassName MessageUtils.java
* @createTime 2021年06月09日 23:50:00
*/
public class MessageUtils {
//返回6位随机数
public static String message(){
Random random = new Random();
String str = "";
for (int i = 0; i < 6; i++) {
str+=random.nextInt(10);
}
return str;
}
public static void main(String[] args) {
MessageUtils messageUtils = new MessageUtils();
System.out.println(messageUtils.message());
}
}
下面在将这个验证码发送到指定的邮箱
package Mail;
import Utils.MessageUtils;
import java.util.Date;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
/**
* @author ryk
* @version 1.0.0
* @ClassName sendMail.java
* @Description TODO
* @createTime 2021年06月09日 23:54:00
*/
public class sendMail {
/**
* 发送邮件
* @param emailPassword email的授权码
* @param receiver 接收人
* @param nickname 向接收人显示的昵称
* @param sender 发送人
* @param messageNumber 验证码
* @throws Exception
*/
public static void sendEmails(String emailPassword, String sender, String receiver , String messageNumber, String nickname) throws Exception{
Properties props = new Properties();
props.setProperty("mail.smtp.auth","true");
//传输方式
props.setProperty("mail.transport.protocol","smtp");
//使用的服务器网易的服务器,也可以使用QQ的
props.setProperty("mail.smtp.host", "smtp.163.com");
Session session = Session.getInstance(props);
session.setDebug(true);
Transport transport = session.getTransport();
transport.connect(sender, emailPassword);
Message message = createMessage(session, receiver, nickname, sender, messageNumber);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
/**
* 创建一封邮件
* @param session
* @param receiver 接收人
* @param nickname 向接收人显示的昵称
* @param sender 发送人
* @param messageNumber 验证码
* @return 返回一个邮件
* @throws Exception
*/
public static MimeMessage createMessage (Session session, String receiver, String nickname, String sender, String messageNumber) throws Exception{
MimeMessage message=new MimeMessage(session);
message.setFrom(new InternetAddress(nickname + "<" + sender + ">"));
message.setRecipient(RecipientType.TO, new InternetAddress(receiver));
message.setSubject("邮件主题");
message.setContent("验证码为:" + messageNumber, "text/html;charset=UTF-8");
message.setSentDate(new Date());
return message;
}
public static void main(String[] args) {
try {
//发件人
String sender = "xxx@163.com";
//收件人
String receiver = "xxx@qq.com";
//验证码
String messageNumber = MessageUtils.message();
//发件人昵称
String nickname = "xxx";
sendEmails("请填入自己的授权码", sender, receiver, messageNumber, nickname);
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后运行main即可发送邮件。