📄 mailmanager.java
字号:
package djr.mail;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.util.Date;
import java.util.Properties;
import java.util.StringTokenizer;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
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;
import djr.common.Constants;
import djr.dao.EmailDAO;
import djr.db.DbFactory;
import djr.dto.EmailDTO;
public class MailManager
{
private String mailHost = "localhost";
private String authMode = "true";
private String user;
private String password;
public boolean receiveMail()
{
try
{
Properties props = getProperties();
Session mailSession = Session.getInstance(props);
mailSession.setDebug(true);
Store store = mailSession.getStore("pop3");
store.connect(getMailHost(), user, password);
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message message[] = folder.getMessages();
for (int i = 0; i < message.length; i++)
{
EmailDTO emailDTO = new EmailDTO();
emailDTO
.setPersonName(((InternetAddress)message[i].getFrom()[0])
.getPersonal());
emailDTO.setFrom(((InternetAddress) message[i].getFrom()[0])
.getAddress());
emailDTO.setTitle(message[i].getSubject());
emailDTO.setMailDate(message[i].getSentDate().toString());
Part messagePart = message[i];
Object out_content = messagePart.getContent();
if (out_content instanceof Multipart)
{
messagePart = ((Multipart) out_content).getBodyPart(0);
}
String out_content_type = messagePart.getContentType();
if (out_content_type.startsWith("text/plain")
|| out_content_type.startsWith("text/html"))
{
InputStream ipstm = messagePart.getInputStream();
BufferedReader bufreader = new BufferedReader(
new InputStreamReader(ipstm));
StringBuffer sb = new StringBuffer();
String thisLine = bufreader.readLine();
while (thisLine != null)
{
sb.append(thisLine);
thisLine = bufreader.readLine();
}
emailDTO.setContent(sb.toString());
}
Multipart mp = (Multipart) message[i].getContent();
for (int j = 0; j < mp.getCount(); j++)
{
Part part = mp.getBodyPart(j);
String disposition = part.getDisposition();
if ((disposition != null)
&& ((disposition.equals(part.ATTACHMENT)) || (disposition
.equals(part.INLINE))))
{
File filename = new File(Constants.WEB_ABS_ATTACH_PATH
+ "/" + part.getFileName());
for (int k = 0; filename.exists(); k++)
{
int index = part.getFileName().indexOf(".");
String ext = part.getFileName().substring(index);
filename = new File(Constants.WEB_ABS_ATTACH_PATH
+ "/"
+ part.getFileName().substring(0, index)
+ k + ext);
}
FileOutputStream myFileoutputstream = new FileOutputStream(
filename);
int chunk = part.getSize();
byte[] buffer = new byte[chunk];
InputStream instream = part.getInputStream();
instream.read(buffer, 0, chunk);
myFileoutputstream.write(buffer, 0, chunk);
instream.close();
myFileoutputstream.close();
emailDTO.setAttFilePath("attachment" + "/"
+ filename.getName());
}
}
emailDTO.setUserID(user);
Connection conn = DbFactory.getConnection();
if (new EmailDAO().saveEmail(emailDTO, conn))
{
message[i].setFlag(Flags.Flag.DELETED, true);
}
conn.close();
}
folder.close(true);
store.close();
return true;
}
catch (Exception e)
{
e.printStackTrace();
}
return false;
}
public boolean sendMail(EmailDTO emailDTO)
{
try
{
Properties props = getProperties();
Session mailSession = Session.getInstance(props);
mailSession.setDebug(true);
MimeMessage newMessage = new MimeMessage(mailSession);
newMessage.setFrom(new InternetAddress(emailDTO.getFrom(), emailDTO
.getPersonName()));
newMessage.setSubject(emailDTO.getTitle());
newMessage.setSentDate(new Date());
InternetAddress[] toList = getToList(emailDTO.getToList());
InternetAddress[] ccList = getToList(emailDTO.getCcList());
InternetAddress[] bccList = getToList(emailDTO.getBccList());
Transport transport;
transport = mailSession.getTransport("smtp");
transport.connect(getMailHost(), user, password);
newMessage.setRecipients(Message.RecipientType.TO, toList);
newMessage.setRecipients(Message.RecipientType.CC, ccList);
newMessage.setRecipients(Message.RecipientType.BCC, bccList);
BodyPart mbp = new MimeBodyPart();
mbp.setContent(emailDTO.getContent(), "text/html;charset=GBK");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(mbp);
if (emailDTO.getAttFile() != null)
{
mbp = new MimeBodyPart();
DataSource source = new FileDataSource(emailDTO.getAttFile());
mbp.setDataHandler(new DataHandler(source));
mbp.setFileName(emailDTO.getAttFile().getName());
multipart.addBodyPart(mbp);
}
newMessage.setContent(multipart);
transport.sendMessage(newMessage, newMessage.getAllRecipients());
transport.close();
return true;
}
catch (Exception e)
{
e.printStackTrace();
}
return false;
}
public InternetAddress[] getToList(String toSeq) throws AddressException
{
StringTokenizer tokenTO = new StringTokenizer(toSeq, ",");
InternetAddress[] addrArrTO = new InternetAddress[tokenTO.countTokens()];
int i = 0;
while (tokenTO.hasMoreTokens())
{
addrArrTO[i] = new InternetAddress(tokenTO.nextToken().toString());
i++;
}
return addrArrTO;
}
public Properties getProperties()
{
Properties props = new Properties();
props.put("mail.smtp.host", this.getMailHost());
props.put("mail.smtp.auth", this.getAuthMode());
return props;
}
public String getAuthMode()
{
return authMode;
}
public void setAuthMode(String authMode)
{
this.authMode = authMode;
}
public String getMailHost()
{
return mailHost;
}
public void setMailHost(String mailHost)
{
this.mailHost = mailHost;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public String getUser()
{
return user;
}
public void setUser(String user)
{
this.user = user;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -