前言
记录一个实用的工具类“邮件收发工具类”
引入依赖
<!--邮箱-->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
代码
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
/**
* 邮件发送、接收工具类
*/
public class MailUtil {
public static void sendEmail(String host,String port,String account, String authCode,
String receiveEmail,String subject,String content,String secretType) throws Exception {
if (secretType.equals("0")){
//授权码发邮件===================================================
//邮件配置类
Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");
//163:smtp.163.com qq:smtp.qq.com
properties.put("mail.smtp.host", host);
//465 或 587
properties.put("mail.smtp.port", port);
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.ssl.enable", "true");
properties.put("mail.debug", "true");
Session session = Session.getInstance(properties);
Message message = new MimeMessage(session);
//设置发件人邮箱地址
message.setFrom(new InternetAddress(account));
//设置收件人邮箱地址
message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiveEmail));
message.setSubject(subject);
message.setText(content);
Transport transport = session.getTransport();
//连接邮箱 account邮箱账户,authCode授权码
transport.connect(account, authCode);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}else{
//密码发邮件======================================
Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", port);
properties.put("mail.smtp.auth", "true");
properties.put("mail.debug", "true");
properties.put("mail.smtp.starttls.enable", "true");
Session session = Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(account, authCode);
}
});
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(account));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiveEmail));
message.setSubject(subject);
message.setText(content);
Transport.send(message);
}
}
public static void receiveEmail(String account, String authCode) throws Exception {
Properties props = new Properties();
Session session = Session.getDefaultInstance(props);
// Store store = session.getStore("imap");
//取得pop3协议的邮件服务器
Store store = session.getStore("pop3");
//连接pop.qq.com邮件服务器
store.connect("pop.qq.com", account, authCode);
//返回文件夹对象
Folder folder = store.getFolder("INBOX");
//设置仅读
folder.open(Folder.READ_ONLY);
//获取信息
Message[] message = folder.getMessages();
for(int i=message.length-1; i>0; i--) {
//打印主题
System.out.println(message[i].getSubject());
}
folder.close(true);
store.close();
}
public static void main(String[] args){
try {
//sendEmail();
} catch (Exception e) {
e.printStackTrace();
}
}
备注:
根据业务场景有的可能需要用授权码收发邮件,有的场景需要用密码收发邮件;故写了一个判断用来区分不同场景。目前网易邮箱、QQ邮箱等不支持密码收发邮件,仅支持授权码收发邮件(授权码可在邮箱设置处获取)。
常用端口
-
SMTP(Simple Mail Transfer Protocol)端口:
- SMTP端口:25(不加密,不安全,少用)
- SMTP端口:587(推荐,通常用于TLS加密)
- SMTP端口:465(SSL加密)
-
IMAP(Internet Message Access Protocol)端口:
- IMAP端口:143(不加密,不安全)
- IMAP端口:993(SSL/TLS加密)
-
POP3(Post Office Protocol Version 3)端口:
- POP3端口:110(不加密,不安全)
- POP3端口:995(SSL/TLS加密)