📄 sendmail.java
字号:
package song;
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
/**
* 邮件管理类
* <p>Title: javaMail</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
*/
public class MailManager {
private Properties properties = null;
private String smtphost = null, pop3host = null, smtpUserName = null, smtpPassword = null, pop3UserName = null, pop3Password = null, path = null;
private boolean delete = false;
/**
* 从配置文件中读取配置
*/
public MailManager() {
properties = new Properties();
try {
InputStream in = this.getClass().getResourceAsStream("/mailConfig.properties");
properties.load(in);
getConfig();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 直接传入配置
* @param p
*/
public MailManager(Properties p) {
properties = p;
getConfig();
}
/**
* 读取配置参数
*/
private void getConfig() {
smtphost = properties.getProperty("mail.smtp.host");
pop3host = properties.getProperty("mail.pop3.host");
smtpUserName = properties.getProperty("mail.smtp.username");
smtpPassword = properties.getProperty("mail.smtp.password");
pop3UserName = properties.getProperty("mail.pop3.username");
pop3Password = properties.getProperty("mail.pop3.password");
delete = (properties.getProperty("mail.readanddel").equalsIgnoreCase("true") || properties.getProperty("mail.readanddel").equalsIgnoreCase("Y"));
path = properties.getProperty("mail.affix.path");
}
public void sendMail(String to, String from, String subject, String content) throws Exception {
sendMail(to, from, subject, content, null);
}
/**
* 发邮件函数
* @param to接收人
* @param from发送人
* @param subject主题
* @param content内容
* @param affix附件数组
* @throws Exception
*/
public void sendMail(String to, String from, String subject, String content, java.util.Vector affix) throws Exception {
String tto = to;
String ttitle = subject;
String tcontent = content;
Session s = Session.getInstance(properties);
s.setDebug(false);
MimeMessage message = new MimeMessage(s);
//设置邮件
InternetAddress from1 = new InternetAddress("webmaster@160dj.com");
message.setFrom(from1);
//处理多个收件人
String[] mutilTo = to.split(";");
InternetAddress[] to1 = new InternetAddress[mutilTo.length];
for (int i = 0; i < mutilTo.length; i++) {
to1[i] = new InternetAddress(mutilTo[i]);
}
message.setRecipients(Message.RecipientType.TO, to1);
message.setSubject(ttitle);
message.setSentDate(new Date());
//正文处理
Multipart mm = new MimeMultipart();
BodyPart mdp = new MimeBodyPart();
mdp.setContent(tcontent, "text/html;charset=gb2312");
mm.addBodyPart(mdp);
//附件处理
if (affix != null) {
for (int i = 0; i < affix.size(); i++) {
mdp = new MimeBodyPart();
String fileSource = (String) affix.elementAt(i);
String name = fileSource.substring(fileSource.lastIndexOf("/") + 1);
FileDataSource fds = new FileDataSource(fileSource);
DataHandler dh = new DataHandler(fds);
mdp.setFileName(MimeUtility.encodeWord(name));
mdp.setDataHandler(dh);
mm.addBodyPart(mdp);
}
}
//发送邮件
message.setContent(mm);
message.saveChanges();
Transport transport = s.getTransport("smtp");
transport.connect(smtphost, smtpUserName, smtpPassword); //以smtp方式登录邮箱
transport.sendMessage(message, message.getAllRecipients()); //发送邮件,其中第二个参数是所有
transport.close();
System.out.println("send success!");
}
/**
* 读取邮件服务器上的收件箱中的邮件.
* @return 所有邮件的矢量数组.单元元素类型为Hashtable.其中有subject,from,content,affix.其中前三项均为字条串,分别表示主题,发件人,和内容.affix为所有附件文件名的矢量数组
* @throws Exception
*/
public java.util.Vector getMail() throws Exception {
java.util.Vector allMail = new java.util.Vector();
Session s = Session.getInstance(properties);
s.setDebug(false);
javax.mail.Store store = s.getStore("pop3");
store.connect(pop3host, pop3UserName, pop3Password);
Folder folder = store.getFolder("INBOX");
try {
folder.open(Folder.READ_WRITE);
} catch (MessagingException ex) {
folder.open(Folder.READ_ONLY);
}
Message message[] = folder.getMessages();
FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.FLAGS);
fp.add("X-Mailer");
folder.fetch(message, fp);
for (int i = 0; i < message.length; i++) {
Message m = message[i];
//读取以后是否删除
if (delete) {
m.setFlag(javax.mail.Flags.Flag.DELETED, true);
}
m.setFlag(javax.mail.Flags.Flag.SEEN, true);
java.util.Hashtable oneMail = new java.util.Hashtable();
java.util.Vector affix = new java.util.Vector();
String content = "", from = "", subject = "";
Address[] allfrom = m.getFrom();
from = "";
for (int a = 0; a < allfrom.length; a++) {
from += m.getFrom()[0].toString();
if (a < (allfrom.length - 1)) {
from += ";";
}
}
subject = m.getSubject();
from = javax.mail.internet.MimeUtility.decodeText(from);
//纯文本文件
if (m.isMimeType("text/plain") || m.isMimeType("text/html")) {
content = m.getContent().toString();
}
//非纯文本文件
if (m.isMimeType("multipart/*")) {
Multipart mp = (Multipart) m.getContent();
int cnt = mp.getCount();
for (int j = 0; j < cnt; j++) {
javax.mail.Part part = mp.getBodyPart(j);
String disposition = part.getDisposition();
if ( (disposition != null) && ( (disposition.equals(Part.ATTACHMENT) || (disposition.equals(Part.INLINE))))) {
String name = javax.mail.internet.MimeUtility.decodeText(part.getFileName());
java.text.SimpleDateFormat dateFormat = new java.text.SimpleDateFormat("yyyyMMddHHmmssSSS");
String saveName = dateFormat.format(new java.util.Date()) + name;
saveAffix(saveName, part.getInputStream());
affix.add(saveName);
} else if (disposition == null) {
MimeBodyPart mbp = (MimeBodyPart) part;
if (mbp.isMimeType("text/plain") || mbp.isMimeType("text/html")) {
content = part.getContent().toString();
} else {
MimeMultipart mmp = (MimeMultipart)mbp.getContent();
int immp = mmp.getCount();
for(int iimmp = 0; iimmp<immp;iimmp++){
if(mmp.getBodyPart(iimmp).isMimeType("text/html")){
content = mmp.getBodyPart(iimmp).getContent().toString();
}
}
}
}
}
}
oneMail.put("subject", subject);
oneMail.put("from", from);
oneMail.put("content", content);
oneMail.put("affix", affix);
allMail.add(oneMail);
}
folder.close(true);
store.close();
return allMail;
}
/**
* 将附件保存到指字的文件夹中.
* @param fileName
* @param ins
* @throws IOException
*/
private void saveAffix(String fileName, java.io.InputStream ins) throws IOException {
java.io.File f = new java.io.File(path);
//如果目录不存在,则新建目录.
if (!f.exists()) {
f.mkdirs();
}
f = null;
String tempPath = path;
if (path.endsWith("/")) {
tempPath += fileName;
} else {
tempPath += "/" + fileName;
}
f = new java.io.File(tempPath);
java.io.OutputStream out = new java.io.FileOutputStream(f);
byte[] buffer = new byte[1024];
while (ins.read(buffer) > 0) {
out.write(buffer);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -