一、 解决方案
A. 方案简述
解决方案的所要实现的目的很简单,即通过简单的配置发送邮件内容及附件到指定邮件地址。
解决方案使用Apache Ant工具。Apache Ant是由Apache软件基金会所提供的开源工具,一般用于Java环境中。
解决方案适用于Windows,但是通过修改.bat文件为.sh文件,解决方案也可以适用于Unix/Linux。
B. 邮件服务器
邮件服务器必须处于邮件发送端所能连接的网络内,且必须支持SMTP协议。
无论是否支持匿名发送,无论是否要求加密连接(SSL),程序都可以正常运行。
额外需要注意的是:
1) 配置文件中将明码列出邮件账户密码,所以不应使用个人邮箱(包括个人的企业邮箱)。
2) 应当确认账户密码不会过期,否则必须定期人工修改配置文件中以确保密码正确。
邮件服务器的配置具体见配置文件的说明。
C. 软件要求
解决方案用到了以下内容:
1) JDK 5.0+
Java运行环境。该软件可以在Hyperion/Oracle/Informatica等几乎所有非微软系软件中找到,也可以单独下载。
下载地址:
http://www.oracle.com/technetwork/java/javaee/downloads/index.html
2) Apache Ant 1.6+
Apache开源工具。该软件可以在Hyperion/Oracle/Informatica等大部分非微软系软件中找到,也可以单独下载。
下载地址:
http://ant.apache.org/bindownload.cgi
3) activation.jar & mail.jar
Java邮件发送所需要的两个类包。分别包含于JavaMail和JAF类库中。这两个类包可以在Hyperion/Oracle/Informatica等几乎所有非微软系软件中找到,也可以单独下载。
下载地址:
http://www.oracle.com/technetwork/java/javamail/index.html
http://www.oracle.com/technetwork/java/jaf11-139815.html
二、 Apache Ant
A. 工具介绍
Apache Ant 是一个自动化工具,由Apache软件基金会所提供,大多用于Java环境中的软件开发。 其可以通过简单配置,来实现各种通用功能,比如通过 SMTP 发送邮件。
B. 环境配置
1) JDK 的路径为:
D:\oracle\product\10.2.0\db_1\jdk
请确认Java命令路径:
D:\oracle\product\10.2.0\db_1\jdk\bin\java.exe
2) Apache Ant 的路径为:
D:\apache-ant-1.8.1
请确认Ant命令路径:
D:\apache-ant-1.8.1\bin\ant.bat
3) activation.jar & mail.jar 两个类包应该放置在Apache Ant类库路径下。请确认类库路径:
D:\apache-ant-1.8.1\lib\
4) 解决方案所用的命令、构建文件、配置文件所在目录:
D:\project\email-task
C. 任务文件
1) 构建文件:build.xml
构建文件是Apache Ant运行时最重要的任务文件,里面详细指明了Ant运行时所需要做的详细的任务列表及具体任务内容。
<?xml version=”1.0″ encoding=”utf-8″ ?>
<!– Write by Ferrari Huang (redcar.ferrari@qq.com) –>
<!– default 指向默认的起始任务 basedir 指向任务根目录 –>
<project name=”email-project” default=”email-task” basedir=”.”>
<!– file 指定额外的配置文件 –>
<property file=”email.properties” />
<target name=”email-task” description=”ant main task for send mail with files”>
<!– ${}表示变量,变量一般在配置文件中指定,大小写与标点符号敏感。 –>
<mail subject=”${mail.message.subject}”
<!– tolist 是以逗号分隔的收件人邮箱地址 –>
from=”${mail.from.address}” tolist=”${mail.to.addresses}”
<!– 指定邮件服务器地址及SMTP端口 –>
mailhost=”${mail.smtp.host}” mailport=”${mail.smtp.port}”
<!– 如果是匿名发送,就不需要指定用户名密码。 –>
user=”${mail.account.user}” password=”${mail.account.password}”
<!– 指定是否使用SSL –>
ssl=”${mail.smtp.ssl}” >
<!– 邮件内容是文本格式 –>
<message>${mail.message.body}</message>
<attachments>
<!– 根据实际需要增减附件目录和文件,目录和文件都可以使用星号*作为通配符 –>
<fileset dir=”${attachments.dir1}”>
<include name=”${attachments.dir1.file1}”/>
<include name=”${attachments.dir1.file2}”/>
</fileset>
<fileset dir=”${attachments.dir2}”>
<include name=”${attachments.dir2.file1}”/>
</fileset>
</attachments>
</mail>
</target>
</project>
2) 变量配置文件:email.properties
变量配置文件是构建文件中所指定,里面详细列出了邮件服务器配置、邮件接收者列表、附件路径。
# Write by Ferrari Huang (redcar.ferrari@qq.com)
# Properties of Ant Tasks
# STMP服务器地址
mail.smtp.host=smtp.qq.com
# STMP端口
mail.smtp.port=465
# SMTP是否使用SSL
mail.smtp.ssl=true
# 发件人账户
mail.account.user=redcar.ferrari
# 账户密码
mail.account.password=mypassword
# 发件人邮箱地址
mail.from.address=ferrari.huang@longtop.com
# 收件人邮箱地址(以逗号分隔多个地址)
mail.to.addresses=ferrari.huang@longtop.com,redcar.ferrari@qq.com
# 邮件的标题
mail.message.subject=Mail sent via Apache Ant email task
# 邮件的文本内容
mail.message.body=Please read the attached files
# 根据需要增减附件目录和文件,可以使用星号*作为通配符。注意请使用斜杠/作为系统目录分隔符而不是反斜杠\。
attachments.dir1=D:/project/dir1
attachments.dir1.file1=book1.txt
attachments.dir1.file2=book2.txt
attachments.dir2=D:/project/dir2
attachments.dir2.file1=*.log
3) 批处理命令文件:email.cmd
变量配置文件是构建文件中所指定,里面详细列出了邮件服务器配置、邮件接收者列表、附件路径。
@echo off
REM ============================================================================
REM Write by Ferrari Huang (redcar.ferrari@qq.com)
REM This batch file is used to send email with several atachement.
REM ============================================================================
REM 环境变量,指向JDK目录,java.exe应在其下级目录bin中。
set JAVA_HOME=D:\oracle\product\10.2.0\db_1\jdk
REM 环境变量,指向Ant目录,ant.bat应在其下级目录bin中。
set ANT_HOME=D:\apache-ant-1.8.1
REM 环境变量,完整的可执行命令目录,以分号;分隔。应包括:%JAVA_HOME%\bin\java.exe & %ANT_HOME%\bin\ant.bat
set path=%JAVA_HOME%\bin;%ANT_HOME%\bin;
REM 调用Ant命令,构建文件默认为build.xml,将在运行之后产生日志文件email.log。
ant.bat -l email.log
4) 日志文件:email.log
运行结束之后,最后一次的运行结果可以在日志文件中看到。
