文章感謝
導入jar
<!--郵件依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--用于實作模闆郵件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
添加郵件配置資訊
spring:
mail:
host: smtp.163.com #smtp.qq.com
protocol: smtp #smtp
default-encoding: UTF-8
username: *********@163.com #7557*****@qq.com
password: ******* #jwgteykojlf*****
test-connection: true
thymeleaf:
cache: false #開發時關閉緩存
郵件發送
接口類
package com.saninco.app.service;
import com.saninco.app.model.RphSystemSettingsDomain;
import com.saninco.demo.ImageResource;
import org.thymeleaf.context.Context;
import java.util.Set;
public interface MailRphService {
/**
* 發送一個簡單的文本郵件,可以附帶附件:文本郵件發送的基本方法
* @param userEmail:發件人賬号
* @param userEmailPwd:發件人密碼
* @param systemDemo:系統配置資訊
* @param subject:郵件主題,即郵件的郵件名稱
* @param content:郵件内容
* @param toWho:需要發送的人
* @param ccPeoples:需要抄送的人
* @param bccPeoples:需要密送的人
* @param attachments:需要附帶的附件,附件請保證一定要存在,否則将會被忽略掉
*/
public void sendSimpleTextMailActual(String userEmail,String userEmailPwd, RphSystemSettingsDomain systemDemo, String subject, String content, String[] toWho, String[] ccPeoples, String[] bccPeoples, String[] attachments);
/**
* 可以用來發送帶有圖檔的HTML模闆郵件
* @param userEmail:發件人賬号
* @param userEmailPwd:發件人密碼
* @param systemDemo:系統配置資訊
* @param subject:郵件主題
* @param toWho:收件人
* @param ccPeoples:抄送人
* @param bccPeoples:暗送人
* @param attachments:附件
* @param templateName:模闆名稱
* @param context:模闆解析需要的資料
* @param imageResourceSet:圖檔資源的資源對象
*/
public void sendHtmlTemplateMailActual(String userEmail,String userEmailPwd, RphSystemSettingsDomain systemDemo, String subject, String[] toWho, String[] ccPeoples, String[] bccPeoples, String[] attachments, String templateName, Context context, Set<ImageResource> imageResourceSet);
/**
* 根據id擷取伺服器設定資訊
* @param id
* @return
*/
public RphSystemSettingsDomain getRphSystemSettingsMapperByid(Integer id);
}
實作類
package com.saninco.app.service;
import com.saninco.app.dao.RphSystemSettingsMapper;
import com.saninco.app.model.RphSystemSettingsDomain;
import com.saninco.demo.ImageResource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Arrays;
import java.util.Objects;
import java.util.Properties;
import java.util.Set;
/**
* 郵件服務,實作簡單文本郵件,HTML檔案和附件郵件,模闆郵件的發送
* 支援的環境:JDK 1.8,SpringBoot 1.5.10,需要 mail-start,需要 thymeleaf 模闆支援
*/
@Service
public class MailRphServiceImp implements MailRphService{
//預設編碼
public static final String DEFAULT_ENCODING = "UTF-8";
//記錄日志
private Logger logger = LoggerFactory.getLogger(MailRphServiceImp.class);
//模闆引擎解析對象,用于解析模闆
@Autowired
private TemplateEngine templateEngine;
@Autowired
private RphSystemSettingsMapper rphSystemSettingsMapper;//報錯不影響
//郵件發送的對象,用于郵件發送
private JavaMailSenderImpl mJavaMailSenderImpl;
/**
* 發送一個簡單的文本郵件,可以附帶附件:文本郵件發送的基本方法
* @param userEmail:發件人賬号
* @param userEmailPwd:發件人密碼
* @param systemDemo:系統配置資訊
* @param subject:郵件主題,即郵件的郵件名稱
* @param content:郵件内容
* @param toWho:需要發送的人
* @param ccPeoples:需要抄送的人
* @param bccPeoples:需要密送的人
* @param attachments:需要附帶的附件,附件請保證一定要存在,否則将會被忽略掉
*/
public void sendSimpleTextMailActual(String userEmail,String userEmailPwd, RphSystemSettingsDomain systemDemo,String subject,String content,String[] toWho,String[] ccPeoples,String[] bccPeoples,String[] attachments){
//檢驗參數:郵件主題、收件人、郵件内容必須不為空才能夠保證基本的邏輯執行
if(subject == null||toWho == null||toWho.length == 0||content == null){
logger.error("郵件-> {} 無法繼續執行,因為缺少基本的參數:郵件主題、收件人、郵件内容",subject);
throw new RuntimeException("模闆郵件無法繼續發送,因為缺少必要的參數!");
}
logger.info("開始發送簡單文本郵件:主題->{},收件人->{},抄送人->{},密送人->{},附件->{}",subject,toWho,ccPeoples,bccPeoples,attachments);
mJavaMailSenderImpl=getJavaMailSender( userEmail, userEmailPwd,systemDemo);
//附件處理,需要處理附件時,需要使用二進制資訊,使用 MimeMessage 類來進行處理
if(attachments != null&&attachments.length > 0){
try{
//附件處理需要進行二進制傳輸
MimeMessage mimeMessage = mJavaMailSenderImpl.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true,DEFAULT_ENCODING);
//設定郵件的基本資訊:這些函數都會在後面列出來
boolean continueProcess = handleBasicInfo(helper,userEmail,subject,content,toWho,ccPeoples,bccPeoples,false);
//如果處理基本資訊出現錯誤
if(!continueProcess){
logger.error("郵件基本資訊出錯: 主題->{}",subject);
return;
}
//處理附件
handleAttachment(helper,subject,attachments);
//發送該郵件
mJavaMailSenderImpl.send(mimeMessage);
logger.info("發送郵件成功: 主題->{}",subject);
}catch(MessagingException e){
e.printStackTrace();
logger.error("發送郵件失敗: 主題->{}",subject);
}
}else{
//建立一個簡單郵件資訊對象
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
//設定郵件的基本資訊
handleBasicInfo(userEmail,simpleMailMessage,subject,content,toWho,ccPeoples,bccPeoples);
//發送郵件
mJavaMailSenderImpl.send(simpleMailMessage);
logger.info("發送郵件成功: 主題->{}",subject,toWho,ccPeoples,bccPeoples,attachments);
}
}
/**
* 處理二進制郵件的基本資訊,比如需要帶附件的文本郵件、HTML檔案、圖檔郵件、模闆郵件等等
*
* @param mimeMessageHelper:二進制檔案的包裝類
* @param address:發件人位址
* @param subject:郵件主題
* @param content:郵件内容
* @param toWho:收件人
* @param ccPeoples:抄送人
* @param bccPeoples:暗送人
* @param isHtml:是否是HTML檔案,用于區分帶附件的簡單文本郵件和真正的HTML檔案
*
* @return :傳回這個過程中是否出現異常,當出現異常時會取消郵件的發送
*/
private boolean handleBasicInfo(MimeMessageHelper mimeMessageHelper,String address,String subject,String content,String[] toWho,String[] ccPeoples,String[] bccPeoples,boolean isHtml){
try{
//設定必要的郵件元素
//設定發件人
mimeMessageHelper.setFrom(address);
//設定郵件的主題
mimeMessageHelper.setSubject(subject);
//設定郵件的内容,差別是否是HTML郵件
mimeMessageHelper.setText(content,isHtml);
//設定郵件的收件人
mimeMessageHelper.setTo(toWho);
//設定非必要的郵件元素,在使用helper進行封裝時,這些資料都不能夠為空
if(ccPeoples != null){
//設定郵件的抄送人:MimeMessageHelper # Assert.notNull(cc, "Cc address array must not be null");
mimeMessageHelper.setCc(ccPeoples);
}
if(bccPeoples != null){
//設定郵件的密送人:MimeMessageHelper # Assert.notNull(bcc, "Bcc address array must not be null");
mimeMessageHelper.setBcc(bccPeoples);
}
return true;
}catch(MessagingException e){
e.printStackTrace();
logger.error("郵件基本資訊出錯->{}",subject);
}
return false;
}
/**
* 用于填充簡單文本郵件的基本資訊
* @param address:發件人位址
* @param simpleMailMessage:文本郵件資訊對象
* @param subject:郵件主題
* @param content:郵件内容
* @param toWho:收件人
* @param ccPeoples:抄送人
* @param bccPeoples:暗送人
*/
private void handleBasicInfo(String address,SimpleMailMessage simpleMailMessage,String subject,String content,String[] toWho,String[] ccPeoples,String[] bccPeoples){
//設定發件人
simpleMailMessage.setFrom(address);
//simpleMailMessage
//設定郵件的主題
simpleMailMessage.setSubject(subject);
//設定郵件的内容
simpleMailMessage.setText(content);
//設定郵件的收件人
simpleMailMessage.setTo(toWho);
//設定郵件的抄送人
if(ccPeoples!=null){
simpleMailMessage.setCc(ccPeoples);
}
//設定郵件的密送人
if(bccPeoples!=null){
simpleMailMessage.setBcc(bccPeoples);
}
}
/**
* 用于處理附件資訊,附件需要 MimeMessage 對象
*
* @param mimeMessageHelper:處理附件的資訊對象
* @param subject:郵件的主題,用于日志記錄
* @param attachmentFilePaths:附件檔案的路徑,該路徑要求可以定位到本機的一個資源
*/
private void handleAttachment(MimeMessageHelper mimeMessageHelper,String subject,String[] attachmentFilePaths){
//判斷是否需要處理郵件的附件
if(attachmentFilePaths != null&&attachmentFilePaths.length > 0){
FileSystemResource resource;
String fileName;
//循環處理郵件的附件
for(String attachmentFilePath : attachmentFilePaths){
//擷取該路徑所對應的檔案資源對象
resource = new FileSystemResource(new File(attachmentFilePath));
//判斷該資源是否存在,當不存在時僅僅會列印一條警告日志,不會中斷處理程式。
// 也就是說在附件出現異常的情況下,郵件是可以正常發送的,是以請确定你發送的郵件附件在本機存在
if(!resource.exists()){
logger.warn("郵件->{} 的附件->{} 不存在!",subject,attachmentFilePath);
//開啟下一個資源的處理
continue;
}
//擷取資源的名稱
fileName = resource.getFilename();
try{
//添加附件
mimeMessageHelper.addAttachment(fileName,resource);
}catch(MessagingException e){
e.printStackTrace();
logger.error("郵件->{} 添加附件->{} 出現異常->{}",subject,attachmentFilePath,e.getMessage());
}
}
}
}
/**
* 可以用來發送帶有圖檔的HTML模闆郵件
* @param userEmail:發件人賬号
* @param userEmailPwd:發件人密碼
* @param systemDemo:系統配置資訊
* @param subject:郵件主題
* @param toWho:收件人
* @param ccPeoples:抄送人
* @param bccPeoples:暗送人
* @param attachments:附件
* @param templateName:模闆名稱
* @param context:模闆解析需要的資料
* @param imageResourceSet:圖檔資源的資源對象
*/
public void sendHtmlTemplateMailActual(String userEmail,String userEmailPwd, RphSystemSettingsDomain systemDemo,String subject, String[] toWho, String[] ccPeoples, String[] bccPeoples, String[] attachments, String templateName, Context context, Set<ImageResource> imageResourceSet){
//檢驗參數:郵件主題、收件人、模闆名稱必須不為空才能夠保證基本的邏輯執行
if(subject == null||toWho == null||toWho.length == 0||templateName == null){
logger.error("郵件-> {} 無法繼續執行,因為缺少基本的參數:郵件主題、收件人、模闆名稱",subject);
throw new RuntimeException("模闆郵件無法繼續發送,因為缺少必要的參數!");
}
//日志這個郵件的基本資訊
logger.info("發送HTML模闆郵件:主題->{},收件人->{},抄送人->{},密送人->{},附件->{},模闆名稱->{},模闆解析參數->{},圖檔資源->{})",subject,toWho,ccPeoples,bccPeoples,attachments,templateName,context,imageResourceSet);
try{
//context不能夠為空,需要進行檢查
if(context == null){
context = new Context();
logger.info("郵件->{} 的context為空!",subject);
}
//模闆引擎處理模闆擷取到HTML字元串,這裡會可能會抛出一個繼承于RuntimeException的模闆引擎異常
String content = templateEngine.process(templateName,context);
mJavaMailSenderImpl=getJavaMailSender(userEmail,userEmailPwd,systemDemo);
MimeMessage mimeMessage = mJavaMailSenderImpl.createMimeMessage();
//預設編碼為UTF-8
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true,DEFAULT_ENCODING);
//處理内聯的圖檔資源的占位轉換
content = handleInLineImageResourceContent(helper,subject,content,imageResourceSet);
logger.info("解析郵件結果->{}",content);
//處理基本資訊
boolean continueProcess = handleBasicInfo(helper,userEmail,subject,content,toWho,ccPeoples,bccPeoples,true);
if(!continueProcess){
logger.error("郵件基本資訊出錯:主題->{}",subject);
return;
}
//内聯資源的資源附加,這個必須要放置在設定基本資訊的操作後面,或者是全部内容解析完畢後才可以,不能邊解析,邊占位
handleInLineImageResource(helper,subject,imageResourceSet);
//處理附件
handleAttachment(helper,subject,attachments);
//發送該郵件
mJavaMailSenderImpl.send(mimeMessage);
logger.info("發送郵件成功:主題->{}",subject);
}catch(MessagingException e){
e.printStackTrace();
logger.error("發送郵件失敗:郵件主題->{}",subject);
}
}
/**
* 處理内嵌圖檔的模闆HTML郵件,傳回一個已經修改過後的HTML字元串
*
* @param mimeMessageHelper:郵件資訊包裝類
* @param subject:郵件主題
* @param originContent:模闆引擎所解析出來的原始HTML郵件
* @param imageResourceSet:圖檔資源集合,用于字元集站位填充
*
* @return :傳回處理後的郵件内容
*/
private String handleInLineImageResourceContent(MimeMessageHelper mimeMessageHelper,String subject,String originContent,Set<ImageResource> imageResourceSet){
//處理内嵌的HTML圖檔檔案
if(imageResourceSet != null&&imageResourceSet.size() > 0){
//資源的占位符ID
String rscId;
//資源的路徑
String resourcePath = null;
//圖檔的位置資訊
String placeHolder;
//圖檔資源檔案
FileSystemResource resource;
for(ImageResource imageResource : imageResourceSet){
//擷取圖檔資源的基本資訊
rscId = imageResource.getId();
placeHolder = imageResource.getPlaceholder();
resourcePath = imageResource.getImageFilePath();
resource = new FileSystemResource(new File(resourcePath));
//判斷圖檔資源是否存在
if(!resource.exists()){
logger.warn("郵件->{} 内聯圖檔->{} 找不到",subject,resourcePath);
continue;
}
//替換圖檔資源在HTML中的位置
originContent = originContent.replace("\"" + ImageResource.PLACEHOLDERPREFIX + placeHolder + "\"","\'cid:" + rscId + "\'");
}
}
return originContent;
}
/**
* 填充文本資料,因為資料填充必須在設定基本資料後面進行,是以講内容和資料的填充進行分離
*
* @param mimeMessageHelper
* @param subject:郵件主題,用于日志記錄
* @param imageResourceSet:資源
*/
private void handleInLineImageResource(MimeMessageHelper mimeMessageHelper, String subject, Set<ImageResource> imageResourceSet){
if(imageResourceSet != null&&imageResourceSet.size() > 0){
FileSystemResource resource;
for(ImageResource imageResource : imageResourceSet){
resource = new FileSystemResource(new File(imageResource.getImageFilePath()));
if(!resource.exists()){
logger.warn("郵件->{} 的内聯圖檔檔案->{} 不存在!",subject,imageResource);
continue;
}
try{
//添加内聯資源
mimeMessageHelper.addInline(imageResource.getId(),resource);
}catch(MessagingException e){
e.printStackTrace();
logger.error("郵件->{} 的内聯圖檔檔案->{} 添加錯誤!",subject,imageResource);
}
}
}
}
/**
* 傳入的參數不能夠為null
*
* @param args
*
* @return
*/
private boolean assertNotNull(Object... args){
return Arrays.stream(args).noneMatch(Objects::isNull);
}
/**
* 建立郵件連結資訊
* @param userEmail:發件人郵箱賬号
* @param userEmailPwd:發件人郵箱密碼
* @param systemDemo:系統設定資訊
* @return
*/
private JavaMailSenderImpl getJavaMailSender(String userEmail,String userEmailPwd, RphSystemSettingsDomain systemDemo){
JavaMailSenderImpl mJavaMailSenderImpl=new JavaMailSenderImpl();
//設定伺服器位址
mJavaMailSenderImpl.setDefaultEncoding("utf-8");
mJavaMailSenderImpl.setUsername(userEmail);//發件人賬号
mJavaMailSenderImpl.setPassword(userEmailPwd);//發件人密碼
Properties props = new Properties();
props.setProperty("mail.transport.protocol", "smtp"); // 使用的協定(JavaMail規範要求)
props.setProperty("mail.smtp.host",systemDemo.getHost() ); // 發件人的郵箱的 SMTP 伺服器位址
props.setProperty("mail.smtp.port", systemDemo.getPort());//連接配接的服務端口
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.smtp.auth", "true"); // 需要請求認證
props.setProperty("mail.smtp.ssl.enable", "true");// 開啟ssl
mJavaMailSenderImpl.setJavaMailProperties(props);
return mJavaMailSenderImpl;
}
/**
* 根據id擷取伺服器設定資訊
* @param id
* @return
*/
public RphSystemSettingsDomain getRphSystemSettingsMapperByid(Integer id){
RphSystemSettingsDomain sysTemDemo =rphSystemSettingsMapper.selectById(id);
return sysTemDemo;
}
}
系統測試類
package com.saninco.app.model;
public class RphSystemSettingsDomain {
private Integer id;
private String host;//郵件伺服器服務位址
private String port;//郵件伺服器端口
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
@Override
public String toString() {
return "RphSystemSettingsDomain{" +
"id=" + id +
", host='" + host + '\'' +
", port='" + port + '\'' +
'}';
}
}
模闆類
package com.saninco.demo;
/**
*用于支撐HTML内嵌圖檔的支援類,擁有可以傳輸内聯圖檔的全部基本資訊
* 郵件發送模闆使用
*/
public class ImageResource {
//占位符的字首符号,用于替換字元串定位,比如:image1 在模闆檔案裡面需要寫成 #image1
public static final String PLACEHOLDERPREFIX = "#";
//用于檔案區分,實作圖檔檔案内聯郵件發送
private final String id;
//這個圖檔需要填充到那個地方去,這個地方是一個辨別,為了和其他标簽差別開來,使用字首加上辨別符來進行區分,比如 :#imageOrigin
private final String placeholder;
//圖檔的檔案路徑,該檔案路徑必須是本機檔案系統的絕對路徑,即可以直接 new File 的檔案系統路徑
private final String imageFilePath;
public ImageResource(String placeholder, String imageFilePath) {
this.placeholder = placeholder;
this.imageFilePath = imageFilePath;
//自動生成id,用于區分圖檔檔案
this.id = String.valueOf(System.nanoTime());
}
public String getId() {
return id;
}
public String getPlaceholder() {
return placeholder;
}
public String getImageFilePath() {
return imageFilePath;
}
@Override
public String toString() {
return "ImageResource{" + "id=" + id + ", placeholder='" + placeholder + '\'' + ", imageFilePath='" + imageFilePath + '\'' + '}';
}
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" />
<title>郵件模闆</title>
</head>
<body>
<h2>你好!看見請回複!阿薩德剛應該好好奧斯卡了的豪華,愛的機會深V,是的婦女,似懂非懂速率辛苦,都市複仇</h2>
<p>這裡更改一下 <span th:text="${name}"></span></p><br/>
<p>不知道我是<span th:text="${age}"></span></p><br/>
<p>怎麼會被提檔<span th:text="${sex}"></span></p><br/>
<img src="#sdm" width="100px" height="100px"/><br/>
<img src="#cyf" width="100px" height="100px"/><br/>
</body>
</html>
測試
package com.saninco.app.service;
import com.saninco.app.model.RphSystemSettingsDomain;
import com.saninco.app.model.RphUserDomain;
import com.saninco.demo.ImageResource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.test.context.junit4.SpringRunner;
import org.thymeleaf.context.Context;
import javax.mail.MessagingException;
import java.util.HashSet;
import java.util.Set;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailRphServiceTest {
@Autowired
private MailRphService mailService;
@Autowired
private UserService userService;
@Autowired
private JavaMailSender mailSender;
//請把如下的資訊寫成你自己的郵箱資訊
private String mailQQ = "*****@qq.com";
private String mail163 = "******@163.com";
private String mail139 = "******@139.com";
private String mailOutLook = "******@qq.com";//接收方
private String zipFile = "E:\\sum\\aasd.zip";
private String pngFile = "E:/sum/df.png";
private String jpgFile = "E:/sum/asd.jpg";
private String content = "還的哈可視對講看見愛上看到就看見俺看到薩科技的發生科" +
"技發空間十分簡單刷卡繳費嗎,阿薩德佛is地方isif就愛看深V價值。\n家對改變行程中和回家奧斯卡接電" +
"飒飒回複克裡斯多夫看了下處女座水電費看看吧菜鳥四東方紅\n你發給話" +
"東方精工招待費管理會計趕快來記得發這個招待費高科技地" +
"大家是否考慮看的啥風科技很快就會阿斯蒂芬快樂哈市打分卡上的\n分開了花阿斯蒂芬好可憐愛德華分開了" +
"啊是的金鳳凰看來還是到合肥會計核算的快捷回複還是到付款計劃\n方改位址發來挂機了位址發過來看";
@Test
/**
* 測試發送文本郵件的接口
*/
public void sendSimpleTextMail() throws InterruptedException{
RphSystemSettingsDomain systemDemo =mailService.getRphSystemSettingsMapperByid(1);
RphUserDomain userDomain=userService.findRphUserByid(5);
mailService.sendSimpleTextMailActual(userDomain.getUserRphEmail(),userDomain.getUserRphEmailPwd(),systemDemo,"測試檔案發送tt",content,new String[]{mailOutLook},
null,null,new String[]{zipFile});
}
@Test
/***
* 測試模闆HTML郵件
*/
public void sendHtmlTemplateMail() throws MessagingException {
//模闆解析的上下文
Context context = new Context();
context.setVariable("name","不講理啊");
context.setVariable("age","4546");
context.setVariable("sex","大沙發斯蒂芬");
//設定内聯的圖檔資源
ImageResource imageResource = new ImageResource("sdm",jpgFile);
ImageResource imageResource1 = new ImageResource("cyf",pngFile);
Set<ImageResource> imageResources = new HashSet<>();
imageResources.add(imageResource);
imageResources.add(imageResource1);
RphSystemSettingsDomain systemDemo =mailService.getRphSystemSettingsMapperByid(1);
RphUserDomain userDomain=userService.findRphUserByid(5);
mailService.sendHtmlTemplateMailActual(userDomain.getUserRphEmail(),userDomain.getUserRphEmailPwd(),systemDemo,"新一輪測試學生資訊",new String[]{mailOutLook},new String[]{mail163},
null,new String[]{zipFile},
"mailTest",context,imageResources);
}
}