利用Java的Struts框架實(shí)現(xiàn)電子郵件發(fā)送功能
本章將教你如何使用Struts2 的應(yīng)用程序發(fā)送電子郵件。對于此練習(xí)中,需要下載并安裝將mail.jar 從 JavaMail API1.4.4,并將 mail.jar文件放置在WEB-INFlib文件夾,然后繼續(xù)遵循的標(biāo)準(zhǔn)步驟創(chuàng)建動作,視圖和配置文件。
創(chuàng)建動作:
下一步是創(chuàng)建一個Action方法,發(fā)送電子郵件。讓我們創(chuàng)建一個新類稱為 Emailer.java 以下內(nèi)容。
package com.yiibai.struts2;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.opensymphony.xwork2.ActionSupport;
public class Emailer extends ActionSupport {
private String from;
private String password;
private String to;
private String subject;
private String body;
static Properties properties = new Properties();
static
{
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.socketFactory.port", "465");
properties.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.port", "465");
}
public String execute()
{
String ret = SUCCESS;
try
{
Session session = Session.getDefaultInstance(properties,
new javax.mail.Authenticator() {
protected PasswordAuthentication
getPasswordAuthentication() {
return new
PasswordAuthentication(from, password);
}});
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
message.setSubject(subject);
message.setText(body);
Transport.send(message);
}
catch(Exception e)
{
ret = ERROR;
e.printStackTrace();
}
return ret;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public static Properties getProperties() {
return properties;
}
public static void setProperties(Properties properties) {
Emailer.properties = properties;
}
}
可以看到在上面的源代碼中,Emailer.java有對應(yīng)的形式在下面給出的email.jsp頁的屬性的屬性。這些屬性
- from - 發(fā)件人的電子郵件地址。由于我們使用的是谷歌的SMTP,我們需要一個有效的gtalk ID
- password - 上述帳戶的密碼
- to - 給誰發(fā)送電子郵件?
- Subject - 電子郵件主題
- body - 實(shí)際的電子郵件消息
我們有沒有考慮過上述各個屬性的任何驗(yàn)證,驗(yàn)證將被添加在下一章?,F(xiàn)在讓我們看看在execute()方法。 execute()方法使用使用javax郵件庫發(fā)送一封電子郵件,使用提供的參數(shù)。如果郵件被發(fā)送,動作返回 SUCCESS,否則它返回ERROR。
創(chuàng)建主頁頁:
讓我們編寫主頁index.jsp的JSP文件,這將被用來收集電子郵件的相關(guān)信息,上面提到的:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Email Form</title> </head> <body> <em>The form below uses Google's SMTP server. So you need to enter a gmail username and password </em> <form action="emailer" method="post"> <label for="from">From</label><br/> <input type="text" name="from"/><br/> <label for="password">Password</label><br/> <input type="password" name="password"/><br/> <label for="to">To</label><br/> <input type="text" name="to"/><br/> <label for="subject">Subject</label><br/> <input type="text" name="subject"/><br/> <label for="body">Body</label><br/> <input type="text" name="body"/><br/> <input type="submit" value="Send Email"/> </form> </body> </html>
創(chuàng)建視圖:
我們將使用JSP文件的success.jsp將被調(diào)用的情況下行動返回SUCCESS,但在發(fā)生ERROR 的情況下,我們將有另一種視圖認(rèn)為文件是從操作返回。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Email Success</title> </head> <body> Your email to <s:property value="to"/> was sent successfully. </body> </html>
下面將是在一個錯誤的情況下,從動作返回視圖文件error.jsp。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Email Error</title> </head> <body> There is a problem sending your email to <s:property value="to"/>. </body> </html>
配置文件:
現(xiàn)在,讓我們將這一切組合起來使用struts.xml的配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="helloworld" extends="struts-default">
<action name="emailer"
class="com.yiibai.struts2.Emailer"
method="execute">
<result name="success">/success.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
以下是web.xml文件中的內(nèi)容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
現(xiàn)在,右鍵點(diǎn)擊項(xiàng)目名稱,并單擊 Export > WAR File創(chuàng)建一個WAR文件。然后部署此WAR在Tomcat的webapps目錄下。最后,啟動Tomcat服務(wù)器和嘗試訪問URL http://localhost:8080/HelloWorldStruts2/index.jsp。這會給出以下畫面:

輸入所需信息,并單擊“Send Email ”按鈕。如果一切順利,那么應(yīng)該看到以下頁面:

如果是SSH三個框架配合起來使用,這里再給個例子,不過struts和spring的框架外,也需要mail.jar,activation.jar.
1) 首先在applicationContext.xml文件中配置bean
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="host"/>
<property name="username" value="username"/>
<property name="password" value="password"/>
</bean>
<bean id="sendMailAction" class="cn.com.action.SendMailAction" singleton="false">
<property name="mailSender"><ref bean="mailSender"/> </property>
</bean>
2)實(shí)現(xiàn)發(fā)送郵件java類代碼
protected JavaMailSenderImpl mailSender;
public class SendMailAction extends ActionSupport{
public void setMailSender(JavaMailSenderImpl mailSender) {
this.mailSender = mailSender;
}
public void sendMail() throws Exception {
1:簡單郵件
protected JavaMailSenderImpl mailSender;
public class SendMailAction extends ActionSupport{
public void setMailSender(JavaMailSenderImpl mailSender) {
this.mailSender = mailSender;
}
public void sendMail() throws Exception {
2:HTML郵件的發(fā)送
//建立郵件消息,發(fā)送簡單郵件和html郵件的區(qū)別
MimeMessage mailMessage = senderImpl.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);
//設(shè)置收件人,寄件人
messageHelper.setTo("sun111@163.com");
messageHelper.setFrom("webadmin@163.com");
messageHelper.setSubject("測試HTML郵件!");
//true 表示啟動HTML格式的郵件
messageHelper.setText("<html><head></head><body><h1>hello!!zhangjian</h1></body></html>",true);
//發(fā)送郵件
senderImpl.send(mailMessage);
3:本類測試郵件中嵌套圖片
//建立郵件消息,發(fā)送簡單郵件和html郵件的區(qū)別
MimeMessage mailMessage = senderImpl.createMimeMessage();
//注意這里的boolean,等于真的時候才能嵌套圖片,在構(gòu)建MimeMessageHelper時候,所給定的值是true表示啟用,
multipart模式
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true);
//設(shè)置收件人,寄件人
messageHelper.setTo("sun111@163.com");
messageHelper.setFrom("webadmin@163.com");
messageHelper.setSubject("測試郵件中嵌套圖片!!");
//true 表示啟動HTML格式的郵件
messageHelper.setText("<html><head></head><body><h1>hello!!zhangjian</h1>" +
"<img src="/" mce_src="/""cid:aaa/"/></body></html>",true);
FileSystemResource img = new FileSystemResource(new File("c:/aaa.jpg"));
messageHelper.addInline("aaa",img);
//發(fā)送郵件
senderImpl.send(mailMessage);
}
}
- Java郵件發(fā)送程序(可以同時發(fā)給多個地址、可以帶附件)
- Java HtmlEmail 郵件發(fā)送的簡單實(shí)現(xiàn)代碼
- 基于JavaMail的Java實(shí)現(xiàn)簡單郵件發(fā)送功能
- Java實(shí)現(xiàn)帶附件的郵件發(fā)送功能
- JavaWeb實(shí)現(xiàn)郵件發(fā)送接收功能
- Java實(shí)現(xiàn)郵件發(fā)送遇到的問題
- java郵件發(fā)送的實(shí)現(xiàn)
- java郵件發(fā)送簡單實(shí)現(xiàn)代碼
- JavaMail實(shí)現(xiàn)郵件發(fā)送的方法
- Java實(shí)現(xiàn)郵件發(fā)送QQ郵箱帶附件
相關(guān)文章
MyBatisPlus?TypeHandler自定義字段類型轉(zhuǎn)換Handler
這篇文章主要為大家介紹了MyBatisPlus?TypeHandler自定義字段類型轉(zhuǎn)換Handler示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Java數(shù)據(jù)結(jié)構(gòu)之樹和二叉樹的相關(guān)資料
這篇文章主要介紹了Java?數(shù)據(jù)結(jié)構(gòu)之樹和二叉樹相關(guān)資料,文中通過示例代碼和一些相關(guān)題目來做介紹,非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下!2023-01-01
Spring MVC項(xiàng)目中l(wèi)og4J和AOP使用詳解
項(xiàng)目日志記錄是項(xiàng)目開發(fā)、運(yùn)營必不可少的內(nèi)容,有了它可以對系統(tǒng)有整體的把控,出現(xiàn)任何問題都有蹤跡可尋。下面這篇文章主要給大家介紹了關(guān)于Spring MVC項(xiàng)目中l(wèi)og4J和AOP使用的相關(guān)資料,需要的朋友可以參考下。2017-12-12
SpringBoot中@ControllerAdvice注解的使用方法
這篇文章主要介紹了SpringBoot中@ControllerAdvice注解的使用方法,這是一個增強(qiáng)的?Controller,對controller層做異常處理、數(shù)據(jù)預(yù)處理、全局?jǐn)?shù)據(jù)綁定,?springboot?會自動掃描到,不需要調(diào)用,這個注解是spring?MVC提供的,在springboot中也可以使用,需要的朋友可以參考下2024-01-01
SpringBoot獲取application.properties文件中文亂碼問題及解決
這篇文章主要介紹了SpringBoot獲取application.properties文件中文亂碼問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
解決SpringBoot連接SqlServer出現(xiàn)的問題
在嘗試通過SSL與SQL?Server建立安全連接時,如果遇到“PKIX?path?building?failed”錯誤,可能是因?yàn)槲茨苷_配置或信任服務(wù)器證書,當(dāng)"Encrypt"屬性設(shè)置為"true"且"trustServerCertificate"屬性設(shè)置為"false"時,要求驅(qū)動程序使用安全套接字層(SSL)加密與SQL?Server建立連接2024-10-10
Java解決LocalDateTime傳輸前端為時間的數(shù)組
本文主要介紹了Java解決LocalDateTime傳輸前端為時間的數(shù)組,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03

