邮箱转发工具类
介绍
以下是完整的Java代码,其中包含了两个静态方法,分别用于发送纯文本邮件和包含HTML内容的邮件。两个方法的参数列表基本相同,分别为:
-
from:发送方邮箱地址,可以是一个字符串数组,用于支持多发件人。
-
to:接收方邮箱地址,可以是一个字符串数组,用于支持多收件人。
-
subject:邮件标题,字符串类型。
-
content:邮件内容,字符串类型,可以是纯文本或HTML。
-
host:SMTP服务器主机名,字符串类型,例如smtp.qq.com。
-
port:SMTP服务器端口号,整型,一般为465或587。
-
username:邮箱账号用户名,字符串类型,例如123456@qq.com。
-
password:邮箱账号密码,字符串类型。
代码
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;public class EmailForwarder {/*** 发送纯文本邮件* @param from 发送方邮箱地址* @param to 接收方邮箱地址* @param subject 邮件标题* @param content 邮件内容,可以是纯文本* @param host SMTP服务器主机名* @param port SMTP服务器端口号* @param username 邮箱账号用户名* @param password 邮箱账号密码* @throws MessagingException*/public static void sendTextEmail(String[] from, String[] to, String subject, String content, String host, int port, String username, String password) throws MessagingException {// 设置邮件会话属性Properties props = new Properties();props.put("mail.smtp.auth", "true");props.put("mail.smtp.host", host);props.put("mail.smtp.port", port);props.put("mail.smtp.starttls.enable", "true");props.put("mail.smtp.ssl.trust", host);// 获取邮件会话Session session = Session.getInstance(props, new javax.mail.Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, password);}});// 创建邮件MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress(from[0]));for (int i = 1; i < from.length; i++) {message.addFrom(new InternetAddress[]{new InternetAddress(from[i])});}message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to[0]));for (int i = 1; i < to.length; i++) {message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to[i]));}message.setSubject(subject);// 创建邮件内容message.setText(content);// 发送邮件Transport.send(message);}/*** 发送包含HTML内容的邮件* @param from 发送方邮箱地址* @param to 接收方邮箱地址* @param subject 邮件标题* @param content 邮件内容,可以是HTML* @param host SMTP服务器主机名* @param port SMTP服务器端口号* @param username 邮箱账号用户名* @param password 邮箱账号密码* @throws MessagingException*/public static void sendHtmlEmail(String[] from, String[] to, String subject, String content, String host, int port, String username, String password) throws MessagingException {// 设置邮件会话属性Properties props = new Properties();props.put("mail.smtp.auth", "true");props.put("mail.smtp.host", host);props.put("mail.smtp.port", port);props.put("mail.smtp.starttls.enable", "true");props.put("mail.smtp.ssl.trust", host);// 获取邮件会话Session session = Session.getInstance(props, new javax.mail.Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, password);}});// 创建邮件MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress(from[0]));for (int i = 1; i < from.length; i++) {message.addFrom(new InternetAddress[]{new InternetAddress(from[i])});}message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to[0]));for (int i = 1; i < to.length; i++) {message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(to[i]));}message.setSubject(subject);// 创建邮件内容MimeMultipart multipart = new MimeMultipart();BodyPart messageBodyPart = new MimeBodyPart();messageBodyPart.setContent(content, "text/html; charset=utf-8");multipart.addBodyPart(messageBodyPart);// 发送邮件message.setContent(multipart);Transport.send(message);}}
依赖
在代码中,我们使用了JavaMail API和javax.activation包中的类来构建和发送邮件。需要注意的是,使用JavaMail API发送邮件时,需要在项目的classpath中引入以下依赖:
<dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
这里我们使用了Maven来管理依赖。如果你不使用Maven,可以手动下载相关的jar包并加入到项目的classpath中。
另外,还需要注意的是,发送邮件时需要在邮箱账号中开启SMTP服务,并获取SMTP服务器的相关配置信息,例如主机名、端口号等。不同的邮箱服务商的SMTP服务器配置可能有所不同,可以在邮箱的官方网站或者帮助文档中查找相关信息。
补充
下面是国内一些常见的SMTP服务器主机名以及对应的端口号
-
163邮箱 SMTP主机名:smtp.163.com,端口号:25 或 465(SSL加密)
-
qq邮箱 SMTP主机名:smtp.qq.com,端口号:25 或 465(SSL加密)
-
新浪邮箱 SMTP主机名:smtp.sina.com,端口号:25 或 465(SSL加密)
-
126邮箱 SMTP主机名:smtp.126.com,端口号:25 或 465(SSL加密)
-
Gmail邮箱 SMTP主机名:smtp.gmail.com,端口号:25 或 465(SSL加密)
-
Hotmail邮箱 SMTP主机名:smtp.live.com,端口号:25
-
139邮箱 SMTP主机名:smtp.139.com,端口号:25 或 465(SSL加密)
-
阿里云企业邮箱 SMTP主机名:smtp.mxhichina.com,端口号:25 或 465(SSL加密)
-
腾讯企业邮箱 SMTP主机名:smtp.exmail.qq.com,端口号:25 或 465(SSL加密)
-
雅虎邮箱 SMTP主机名:smtp.mail.yahoo.com,端口号:25 或 465(SSL加密)
-
AOL邮箱 SMTP主机名:smtp.aol.com,端口号:587
-
雅虎日本邮箱 SMTP主机名:smtp.mail.yahoo.co.jp,端口号:25 或 587(SSL加密)
-
网易企业邮箱 SMTP主机名:smtp.qiye.163.com,端口号:25 或 465(SSL加密)
-
金山邮箱 SMTP主机名:smtp.ik.com,端口号:25 或 465(SSL加密)
-
联通邮箱 SMTP主机名:smtp.wo.cn,端口号:25
-
中国移动邮箱 SMTP主机名:smtp.139.com,端口号:25 或 465(SSL加密)
-
搜狐邮箱 SMTP主机名:smtp.sohu.com,端口号:25 或 465(SSL加密)
-
中华邮政邮箱 SMTP主机名:smtp.chinapost.com.cn,端口号:25 或 465(SSL加密)
-
雷克邮局邮箱 SMTP主机名:smtp.mail.lakecom.net,端口号:25 或 465(SSL加密)
-
域名邮箱 SMTP主机名:smtp.domain.com,端口号:25 或 465(SSL加密)