package com.email;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
/**
* 发送邮件的工具类
* @author admin
*/
public class SendEmailUtil {
/**
* 邮件发送
* @param smtpHost 邮件服务器
* @param fromEmail 邮件发送人的邮件地址
* @param fromEmailPwd 邮件发送人的授权码
* @param toEmail 邮件接收人的邮件地址
* @param subject 邮件主题
* @param context 邮件的内容
* @throws Exception 抛出异常
*/
public static void sendMessage(String smtpHost,String fromEmail,String fromEmailPwd,String toEmail,String subject,String context) throws Exception{
//创建参数配置, 用于连接邮件服务器的参数配置
Properties props = new Properties();
props.setProperty("mail.smtp.host", smtpHost); //邮件服务器
props.setProperty("mail.transport.protocol", "smtp"); //使用的协议(JavaMail规范要求)
props.setProperty("mail.smtp.starttls.enable", "true");//使用 STARTTLS安全连接
props.setProperty("mail.smtp.auth", "true"); // 使用验证
//根据配置创建会话对象, 用于和邮件服务器交互
Session mailSession = Session.getInstance(props);
mailSession.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log
//根据 Session 获取邮件传输对象
Transport transport = mailSession.getTransport();
//创建一封邮件
MimeMessage message = createMessageFile(mailSession, fromEmail, toEmail, subject, context);
transport.connect(fromEmail, fromEmailPwd);
// 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
transport.sendMessage(message, message.getAllRecipients());
// 7. 关闭连接
transport.close();
}
/**
* 单人的发送方法
* @param session
* @param sendMail
* @param receiveMail
* @param subject
* @param context
* @return
* @throws Exception
*/
private static MimeMessage createMessageUserName(Session session, String sendMail, String receiveMail,String subject,String context) throws Exception {
// 1. 创建一封邮件
MimeMessage message = new MimeMessage(session);
// 2. From: 发件人 的名字和发件人
message.setFrom(new InternetAddress(sendMail, "宝网", "UTF-8"));
// 3. To: 收件人(可以增加多个收件人、抄送、密送)
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "XX用户", "UTF-8"));
// 4. Subject: 邮件主题
message.setSubject(subject, "UTF-8");
// 5. Content: 邮件正文(可以使用html标签)
message.setContent("163邮箱的发送和QQ邮箱的发送。。天天向上,军事博物馆。。。", "text/html;charset=UTF-8");
// 6. 设置发件时间
message.setSentDate(new Date());
// 7. 保存设置
message.saveChanges();
return message;
}
/**
* 多人的邮件发送方法
* @param session
* @param sendMail
* @param receiveMail
* @param subject
* @param context
* @return
* @throws Exception
*/
private static MimeMessage createMessageList(Session session, String sendMail, String receiveMail,String subject,String context) throws Exception {
// 1. 创建一封邮件
MimeMessage message = new MimeMessage(session);
// 2. From: 发件人
message.setFrom(new InternetAddress(sendMail));
// 3. To: 收件人(可以增加多个收件人、抄送、密送)
//message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail));
//给多个人发送邮件
ArrayList<Object> list = new ArrayList<>();
list.add(new InternetAddress("792126406@qq.com"));
list.add(new InternetAddress("1425574519@qq.com"));
Address[] addresses = list.toArray( new Address[list.size()]);
message.setRecipients(MimeMessage.RecipientType.TO,addresses);
// 4. Subject: 邮件主题
message.setSubject(subject, "UTF-8");
// 5. Content: 邮件正文(可以使用html标签)
message.setContent(context, "text/html;charset=UTF-8");
// 6. 设置发件时间
message.setSentDate(new Date());
// 7. 保存设置
message.saveChanges();
return message;
}
/**
* 发送邮件,邮件中添加附件
* @param session
* @param sendMail
* @param receiveMail
* @param subject
* @param context
* @return
* @throws Exception
*/
private static MimeMessage createMessageFile(Session session, String sendMail, String receiveMail,String subject,String context) throws Exception{
// 创建一封邮件
MimeMessage message = new MimeMessage(session);
// 加载发件人地址
message.setFrom(new InternetAddress(sendMail));
// 加载收件人的邮件
message.addRecipient(Message.RecipientType.TO, new InternetAddress(receiveMail));
// 添加主题
message.setSubject("测试邮件发送,添加附件发送");
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
MimeMultipart multipart = new MimeMultipart();
// 设置邮件的文本内容
BodyPart bodyPart = new MimeBodyPart();
bodyPart.setText("。。。添加附件的文本内容。。。");
multipart.addBodyPart(bodyPart);
// 添加附件
MimeBodyPart filePart = new MimeBodyPart();
FileDataSource fileSource = new FileDataSource(new File("E:\\文档资料\\基础信息.txt"));
// 添加附加的内容
filePart.setDataHandler(new DataHandler(fileSource));
// 通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
filePart.setFileName("=?GBK?B?"+ enc.encode("affixName.txt".getBytes()) + "?=");
multipart.addBodyPart(filePart);
// 将multipart对象放到message中
message.setContent(multipart);
// 保存邮件
message.saveChanges();
return message;
}
public static void main(String[] args) {
try {
sendMessage("smtp.163.com", "邮件发送者的邮箱@163.com", "邮箱服务授权码", "接收者的邮箱", "邮件测试发送", "包含文本、图片、附件 的复杂邮件的创建请看下一篇");
} catch (Exception e) {
e.printStackTrace();
}
}
}
JAVA项目发送邮件的工具类
最新推荐文章于 2024-05-14 06:56:48 发布