%@ page import="javax.mail.*" %>
<%@ page import="javax.mail.internet.*" %>
<%@ page import="javax.activation.*" %>
<%@ page import="java.util.*,java.io.*" %>
<%@ page import="com.oreilly.servlet.MultipartRequest" %>
<%@ page contentType="text/html;charset=MS950" %>
CH18 - JavaMail2.jsp
利用JavaMail來傳送電子郵件 - 附加檔案
<%
InternetAddress[] address = null;
request.setCharacterEncoding("MS950");
MultipartRequest multi = new MultipartRequest(request , "." , 5*1024*1024 , "MS950");
String mailserver = "ecd.pchome.com.tw";
String From = multi.getParameter("From");
String to = multi.getParameter("To");
String Subject = multi.getParameter("Subject");
String type = multi.getParameter("Type");
String messageText = multi.getParameter("Message");
String FileName = multi.getFilesystemName("FileName");
boolean sessionDebug = false;
try {
// 設定所要用的Mail 伺服器和所使用的傳送協定
java.util.Properties props = System.getProperties();
props.put("mail.host",mailserver);
props.put("mail.transport.protocol","smtp");
// 產生新的Session 服務
javax.mail.Session mailSession = javax.mail.Session.getDefaultInstance(props,null);
mailSession.setDebug(sessionDebug);
Message msg = new MimeMessage(mailSession);
// 設定傳送郵件的發信人
msg.setFrom(new InternetAddress(From));
// 設定傳送郵件至收信人的信箱
address = InternetAddress.parse(to,false);
msg.setRecipients(Message.RecipientType.TO, address);
// 設定信中的主題
msg.setSubject(Subject);
// 設定送信的時間
msg.setSentDate(new Date());
if (FileName != null)
{
File file = new File(FileName);
// 如果有附加檔案時,先將郵件內容部份先存起來
MimeBodyPart mbp1 = new MimeBodyPart();
// 設定郵件內容的型態為 text/plain 或 text/html
mbp1.setContent(messageText, type + ";charset=MS950");
// 再來對檔案作處理
MimeBodyPart mbp2 = new MimeBodyPart();
FileDataSource fds = new FileDataSource(FileName);
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setFileName(MimeUtility.encodeText(fds.getName(), "MS950", "B"));
// 最後再將二者整合起來,當作一份郵件送出
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
msg.setContent(mp);
}
else
{
// 若沒有檔案時,就直接存郵件內容
msg.setContent(messageText,type + ";charset=MS950");
}
Transport.send(msg);
out.println("郵件己順利傳送");
}
catch (MessagingException mex)
{
mex.printStackTrace();
}
%>