package com.hoover.mail.mail;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* <p>ShowMail 此类用于:日报添加控制器</p>
* <p>@author:hujm</p>
* <p>@date:2021年04月07日 8:45</p>
* <p>@remark:</p>
*/
public class ShowMail {
private MimeMessage mimeMessage = null;
/**
* 附件下载后的存放目录
*/
private String saveAttachPath = "";
/**
* 存放邮件内容的StringBuffer对象
*/
private final StringBuffer bodyText = new StringBuffer();
/**
* 默认的日前显示格式
*/
private String dateFormat = "yy-MM-dd HH:mm";
/**
* 构造函数,初始化一个MimeMessage对象
*/
public ShowMail() {
}
public ShowMail(MimeMessage mimeMessage) {
this.mimeMessage = mimeMessage;
System.out.println("创建一个ReceiveEmail对象....");
}
public void setMimeMessage(MimeMessage mimeMessage) {
this.mimeMessage = mimeMessage;
System.out.println("设置一个MimeMessage对象...");
}
/**
* 获得发件人的地址和姓名
*
* @throws Exception
*/
public String getFrom() throws Exception {
InternetAddress[] address = (InternetAddress[]) mimeMessage.getFrom();
String from = address[0].getAddress();
if (from == null) {
from = "";
System.out.println("无法知道发送者.");
}
String personal = address[0].getPersonal();
if (personal == null) {
personal = "";
System.out.println("无法知道发送者的姓名.");
}
String fromAddr = null;
if (personal != null || from != null) {
fromAddr = personal + "<" + from + ">";
System.out.println("发送者是:" + fromAddr);
} else {
System.out.println("无法获得发送者信息.");
}
return fromAddr;
}
/**
* 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同
* "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址
*
* @param type
* @return
* @throws Exception
*/
public String getMailAddress(String type) throws Exception {
String mailAddr = "";
String addType = type.toUpperCase();
InternetAddress[] address = null;
if (addType.equals("TO") || addType.equals("CC") || addType.equals("BCC")) {
if (addType.equals("TO")) {
address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.TO);
} else if (addType.equals("CC")) {
address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.CC);
} else {
address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.BCC);
}
if (address != null) {
for (int i = 0; i < address.length; i++) {
String emailAddr = address[i].getAddress();
if (emailAddr == null) {
emailAddr = "";
} else {
System.out.println("转换之前的emailAddr:" + emailAddr);
emailAddr = MimeUtility.decodeText(emailAddr);
System.out.println("转换之后的emailAddr:" + emailAddr);
}
String personal = address[i].getPersonal();
if (personal == null) {
personal = "";
} else {
System.out.println("转换之前的personal:" + personal);
personal = MimeUtility.decodeText(personal);
System.out.println("转换之后的personal:" + personal);
}
String compositeto = personal + "<" + emailAddr + ">";
System.out.println("完整的邮件地址:" + compositeto);
mailAddr += "," + compositeto;
}
mailAddr = mailAddr.substring(1);
}
} else {
throw new Exception("错误的电子邮件类型!");
}
return mailAddr;
}
/**
* 获得邮件主题
*
* @return
* @throws MessagingException
*/
public String getSubject() throws MessagingException {
String subject = "";
try {
System.out.println("转换前的subject:" + mimeMessage.getSubject());
subject = MimeUtility.decodeText(mimeMessage.getSubject());
System.out.println("转换后的subject:" + mimeMessage.getSubject());
if (subject == null) {
subject = "";
}
} catch (Exception exce) {
exce.printStackTrace();
}
return subject;
}
/**
* 获得邮件发送日期
*
* @return
* @throws Exception
*/
public String getSentDate() throws Exception {
Date sentDate = mimeMessage.getSentDate();
System.out.println("发送日期原始类型:" + dateFormat);
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
String strSentDate = format.format(sentDate);
System.out.println("发送日期可读类型:" + strSentDate);
return strSentDate;
}
/**
* 获得邮件正文内容
*
* @return
*/
public String getBodyText() {
return bodyText.toString();
}
/**
* 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件
* 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析
*
* @param part
* @throws Exception
*/
public void getMailContent(Part part) throws Exception {
String contentType = part.getContentType();
//获得邮件的MimeType类型
System.out.println("邮件的MimeType类型:" + contentType);
int nameIndex = contentType.indexOf("name");
boolean conName = false;
if (nameIndex != -1) {
conName = true;
}
System.out.println("邮件内容的类型: " + contentType);
if (part.isMimeType("text/plain") && conName == false) {
//text/plain类型
bodyText.append((String) part.getContent());
} else if (part.isMimeType("text/html") && conName == false) {
//text/html类型
bodyText.append((String) part.getContent());
} else if (part.isMimeType("multipart/*")) {
//multipart/*
Multipart multipart = (Multipart) part.getContent();
int counts = multipart.getCount();
for (int i = 0; i < counts; i++) {
getMailContent(multipart.getBodyPart(i));
}
} else if (part.isMimeType("message/rfc822")) {
//message/rfc822
getMailContent((Part) part.getContent());
} else {
System.out.println("");
}
}
/**
* 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"
*
* @return
* @throws MessagingException
*/
public boolean getReplySign() throws MessagingException {
boolean replySign = false;
String[] needReply = mimeMessage.getHeader("Disposition-Notification-To");
if (needReply != null) {
replySign = true;
}
if (replySign) {
mail邮件发送包mail邮件发送包
需积分: 5 114 浏览量
2022-07-22
18:21:48
上传
评论
收藏 16KB ZIP 举报
qing_mei_xiu
- 粉丝: 40
- 资源: 25
最新资源
- 农村信用社联合社计算机信息系统投产与变更管理办.docx
- 农村信用社联合社计算机信息系统数据管理办法.docx
- 利用SPSS作临床效度分析线上计算网站介绍-医学研究部统计谘.(医学PPT课件).ppt
- 利用Zabbix监控mysqldump定时备份数据库状态.docx
- 利用计算机解决问题的基本过程.doc
- 化工铁路通信工程总结.doc
- 北京大学网络教育软件工程作业.docx
- 医药公司(连锁店)计算机操作规程未新系统的自行按照旧制修改-新系统过制的编号加修模版.doc
- 医药公司(连锁店)计算机系统操作规程模版.doc
- 医药连锁门店计算机系统的操作和管理程序未新系统的自行按照旧制修改-新系统过制的编号加修模版.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0