📄 mailaction.java
字号:
package com.gzrealmap.oa.actions;
/**
* <p>Title: 基本类库</p>
* <p>Description: 基本类库</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: 广州瑞图(gzrealmap.com)</p>
* @author charlse
* @version 1.0
*/
import javax.servlet.http.*;
import javax.servlet.*;
import com.gzrealmap.lib.webupload.WebUpload;
import com.gzrealmap.lib.util.*;
import com.gzrealmap.archive.actions.*;
import com.gzrealmap.oa.*;
import com.gzrealmap.user.user.*;
import com.gzrealmap.archive.*;
import java.util.*;
import javax.activation.*;
import javax.mail.internet.*;
import javax.mail.*;
import org.apache.commons.fileupload.*;
import com.gzrealmap.lib.log.*;
public class MailAction {
private MailAction() {
}
private static Log log = Log.getInstance(ContentAction.class);
public static void sendMail(HttpServletRequest request) throws Exception {
ActionsUtil.processRequest(request);
WebUpload upload = WebUpload.getInstance(request);
String username = getUserName(request);
String password = getPassword(username);
String to = ArchiveUtils.trimString(upload.getFieldValue("to"));
String cc = ArchiveUtils.trimString(upload.getFieldValue("cc"));
String bcc = ArchiveUtils.trimString(upload.getFieldValue("bcc"));
String subject = upload.getFieldValue("subject");
String text = upload.getFieldValue("text");
String host = getSmtpHost();
String from = username + "@" + host;
//验证用户和密码
try {
sendMail(username, password, to, cc, bcc, subject, text, host, from,
upload.getFileItems());
}
catch (Exception m) { //检测是否有异常
log.error(m);
}
}
private static String getSmtpHost() {
String host = com.gzrealmap.lib.sys.RootGlobes.getProperty(
"OA2004.mailServer");
return host;
}
private static String getPop3Host() {
String host = com.gzrealmap.lib.sys.RootGlobes.getProperty(
"OA2004.mailServer");
return host;
}
private static String getPassword(String username) {
User users = User.getInstance().getUserByName(username);
String password = users.getUser_pass();
return password;
}
private static String getUserName(HttpServletRequest request) {
String username = request.getRemoteUser();
return username;
}
public static void restoreMail(HttpServletRequest request) throws Exception {
WebUpload upload = WebUpload.getInstance(request);
String host = com.gzrealmap.lib.sys.RootGlobes.getProperty(
"OA2004.mailServer");
String from = upload.getFieldValue("from");
String to = upload.getFieldValue("to");
String subject = upload.getFieldValue("subject");
String text = upload.getFieldValue("text");
//验证用户和密码
String username = getUserName(request);
String password = getPassword(username);
try {
sendMail(username, password, to, "", "", subject, text, host, from,
upload.getFileItems());
}
catch (Exception m) { //检测是否有异常
log.error(m);
}
}
private static void sendMail(String username,
String password, String to, String cc,
String bcc, String subject, String text,
String host, String from, Enumeration filesEnum) throws
AddressException, MessagingException {
InternetAddress[] toAddrs = InternetAddress.parse(to, false);
InternetAddress[] ccAddrs = InternetAddress.parse(cc, false);
InternetAddress[] bccAddrs = InternetAddress.parse(bcc, false);
Properties props = new Properties();
props.put("mail.smtp.host", host); //定义smtp协议
props.put("mail.smtp.auth", "true");
SimpleAuthenticator subauth = new SimpleAuthenticator(username, password);
Session mailsession = Session.getInstance(props, subauth);
Message message = new MimeMessage(mailsession); //创建一个message
message.setFrom(new InternetAddress(from)); //设置寄信人
for (int i = 0; i < toAddrs.length; i++) {
message.addRecipient(Message.RecipientType.TO, toAddrs[i]);
} //设置收信人}
for (int i = 0; i < ccAddrs.length; i++) {
message.addRecipient(Message.RecipientType.CC, toAddrs[i]);
}
for (int i = 0; i < bccAddrs.length; i++) {
message.addRecipient(Message.RecipientType.BCC, bccAddrs[i]);
}
message.setSentDate(new java.util.Date()); //设置发信日期
message.setSubject(subject); //设置主题
MimeBodyPart textBodyPart = new MimeBodyPart(); //定义邮件主题
textBodyPart.setText(text);
MimeMultipart container = new MimeMultipart();
container.addBodyPart(textBodyPart);
//发送附件
Enumeration enum = filesEnum;
if (enum != null) {
while (enum.hasMoreElements()) {
FileItem item = (FileItem) enum.nextElement();
if (item.getSize() > 0) {
MimeBodyPart fileBodyPart = new MimeBodyPart(); //定义邮件附件
String filename = FileUtils.getFileName(item.getName());
fileBodyPart.setDataHandler(new DataHandler(new ByteArrayDataSource(
item.get(), item.getContentType())));
fileBodyPart.setFileName(filename);
fileBodyPart.addHeader("Content-Transfer-Encoding", "base64");
fileBodyPart.setHeader("Content-Transfer-Encoding", "base64");
container.addBodyPart(fileBodyPart);
}
}
}
message.setContent(container);
Transport.send(message); //在这里传送信息
}
public static void downloadMailAttachment(HttpServletRequest request,
HttpServletResponse response) {
ActionsUtil.processRequest(request);
String user = getUserName(request);
String password = getPassword(user);
String host = getPop3Host();
int bodyID = ArchiveUtils.makeString2int(request.getParameter("id")); //邮件中BODYPART的ID
String mailId = request.getParameter("msgNum");
int msgID = Integer.parseInt(mailId); //邮件的ID
try {
//设置
Properties props = new Properties();
props.put("pop3.localhost", host);
Session mailSession = Session.getDefaultInstance(props);
//返回和连接
Store msgStore = mailSession.getStore("pop3");
msgStore.connect(host, user, password);
//返回收件箱
Folder inbox = msgStore.getDefaultFolder().getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
Message theMessage = inbox.getMessage(msgID);
Multipart multipart = (Multipart) theMessage.getContent();
Part part = multipart.getBodyPart(bodyID);
String filename = part.getFileName();
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition",
"attachment; filename=\"" + filename + "\"");
response.setContentType(part.getContentType());
ServletOutputStream out1 = response.getOutputStream();
out1.write(IOUtils.makeStream2bytes(part.getInputStream()));
out1.flush();
out1.close();
//关闭
inbox.close(false);
msgStore.close();
}
catch (Exception exc) {
log.error(exc);
}
}
public static void main(String[] args) throws Exception {
sendMail("admin", "rm123456", "admin@localhost", "", "", "test", "test",
"localhost",
"admin@localhost", null);
System.out.println("ok");
}
}
class SimpleAuthenticator
extends Authenticator {
private String userName;
private String password;
public SimpleAuthenticator(String user, String pass) {
userName = user;
password = pass;
}
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -