會員註冊 / 登入  |  電腦版  |  Jump to bottom of page

網頁程式設計 Web Development » JSP精選實用範例(一):郵件發送

發表人: andowson, 七段學員
2007-12-14 18:26:35
預先安裝函式庫:Apache Commons Email, Sun JavaMail API, JavaBeans Activation Framework (JAF)
程式碼:
<%@ page contentType="text/html; charset=big5"%>

<%@ page import="org.apache.commons.mail.SimpleEmail"%>
<%
String subject="歡迎光臨";
String message = "這是一封測試信,收到請自行刪除";
SimpleEmail simpleEmail = new SimpleEmail();
simpleEmail.setHostName("smtp.mycompany.com");
simpleEmail.setCharset("Big5");
simpleEmail.addTo("you@yourcompany.com", "親愛的會員");
simpleEmail.setFrom("service@mycompany.com", "網站客服中心");
simpleEmail.setSubject(subject);
simpleEmail.setMsg(message);
simpleEmail.send();
out.println("郵件發送成功");
%>

檔案名稱 mailtest.jsp
描述 郵件發送測試
檔案大小 608 bytes
下載次數 125 次
[Disk] 下載


發表人: andowson, 七段學員
2010-02-10 00:27:14
使用 Gmail 的 SMTP 發信(通過SSL port: 465)
程式碼:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="org.apache.commons.mail.DefaultAuthenticator" %>
<%@ page import="org.apache.commons.mail.Email" %>
<%@ page import="org.apache.commons.mail.EmailException" %>
<%@ page import="org.apache.commons.mail.HtmlEmail" %>
<%
String subject="測試使用 Gmail SMTP SSL發信";
String message = "<html><head><title>測試</title></head><body>這是一封測試信,收到請自行刪除</body></html>";

Email email = new HtmlEmail();
String authuser = "username@gmail.com";
String authpwd = "the_password";
email.setHostName("smtp.gmail.com");
email.setSmtpPort(465);
email.setAuthenticator(new DefaultAuthenticator(authuser, authpwd));
email.setDebug(true);
email.setSSL(true);
email.setSslSmtpPort("465");
email.setCharset("UTF-8");
email.setSubject(subject);
try {
email.setFrom("username@gmail.com", "網站客服中心");
email.setMsg(message);
email.addTo("somebody@30elite.com", "親愛的會員");
email.send();
out.println("郵件發送成功");
} catch (EmailException e) {
e.printStackTrace();
}
%>


參考資料:
http://stackoverflow.com/questions/1783710/sending-an-email-using-commons-email-to-gmail

檔案名稱 gmailsmtp_ssl.jsp
描述 Send an email via Gmail SMTP through SSL port(465)
檔案大小 1 Kbytes
下載次數 103 次
[Disk] 下載


發表人: andowson, 七段學員
2010-02-10 00:30:40
使用 Gmail 的 SMTP 發信(通過TLS port: 587)
程式碼:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="org.apache.commons.mail.DefaultAuthenticator" %>
<%@ page import="org.apache.commons.mail.Email" %>
<%@ page import="org.apache.commons.mail.EmailException" %>
<%@ page import="org.apache.commons.mail.HtmlEmail" %>
<%
String subject="測試使用 Gmail SMTP TLS發信";
String message = "<html><head><title>測試</title></head><body>這是一封測試信,收到請自行刪除</body></html>";

Email email = new HtmlEmail();
String authuser = "username@gmail.com";
String authpwd = "the_password";
email.setHostName("smtp.gmail.com");
email.setSmtpPort(587);
email.setAuthenticator(new DefaultAuthenticator(authuser, authpwd));
email.setDebug(true);
email.setTLS(true);
email.setSslSmtpPort("587");
email.setCharset("UTF-8");
email.setSubject(subject);
try {
email.setFrom("username@gmail.com", "網站客服中心");
email.setMsg(message);
email.addTo("somebody@30elite.com", "親愛的會員");
email.send();
out.println("郵件發送成功");
} catch (EmailException e) {
e.printStackTrace();
}
%>

檔案名稱 gmailsmtp_tls.jsp
描述 Send an email via Gmail SMTP through TLS port(587)
檔案大小 1 Kbytes
下載次數 45 次
[Disk] 下載


發表人: andowson, 七段學員
2010-07-27 01:57:31
發送HTML格式的郵件
預先安裝函式庫:Apache Commons IO
假設樣板檔名為message.html,放在網頁應用程式的根目錄下,發送給somebody@andowson.com。
程式碼:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.File" %>
<%@ page import="java.text.MessageFormat" %>
<%@ page import="org.apache.commons.io.FileUtils" %>
<%@ page import="org.apache.commons.mail.DefaultAuthenticator" %>
<%@ page import="org.apache.commons.mail.EmailException" %>
<%@ page import="org.apache.commons.mail.HtmlEmail" %>
<%
String subject="測試使用 Gmail SMTP SSL發信";
String filename = application.getRealPath("/") + "message.html";
String template = FileUtils.readFileToString(new File(filename), "UTF-8");
String message = "";

HtmlEmail email = new HtmlEmail();
String authuser = "username@gmail.com";
String authpwd = "the_password";
email.setHostName("smtp.gmail.com");
email.setSmtpPort(465);
email.setAuthenticator(new DefaultAuthenticator(authuser, authpwd));
email.setDebug(true);
email.setSSL(true);
email.setSslSmtpPort("465");
email.setCharset("UTF-8");
email.setSubject(subject);
try {
email.setFrom("username@gmail.com", "網站客服中心");
message = MessageFormat.format(template, new Object[] { "somebody", "http://www.andowson.com/" });
email.setHtmlMsg(message);
email.addTo("somebody@andowson.com", "親愛的會員");
email.send();
out.println("郵件發送成功");
} catch (EmailException e) {
e.printStackTrace();
}
%>

message.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>e-paper</title>
</head>
<body>
親愛的{0}您好,請點選這個<a href="{1}">連結至活動網頁。

這是一封測試信,收到請自行刪除
</body>
</html>

檔案名稱 gmailsmtp_ssl_htmlmsg.jsp
描述 Send HTML Message
檔案大小 1 Kbytes
下載次數 34 次
[Disk] 下載

檔案名稱 message.html
描述 HTML Message Template File
檔案大小 378 bytes
下載次數 36 次
[Disk] 下載


發表人: qq4111, 十級學員
2011-12-17 22:15:40
請問,若是要多個寄件者的話,應該怎麼做呢?
我是一直出現這錯誤Caused by: javax.mail.internet.AddressException: Illegal address in string

發表人: andowson, 七段學員
2011-12-19 12:05:17
寄件者只能有一個,可以透過Email類別的setFrom的method來設定,可接受三種參數呼叫方式:
setFrom(String email)

setFrom(String email, String name)
setFrom(String email, String name, String charset)

如果要收件者,可以透過Email類別的addTo的method來增加,類似setFrom有三種參數呼叫方式:
addTo(String email)

addTo(String email, String name)
addTo(String email, String name, String charset)

收件者可以有多個,只要連續呼叫多次的addTo即可(例如透過迴圈)或者先將收件者整理成一個清單(List),再呼叫setTo一次設定好
setTo(Collection aCollection)


至於您的錯誤訊息,可能是charset編碼問題,也可能是其他問題,得看到程式碼才能得知。






會員註冊 / 登入  |  電腦版  |  Jump to top of page