
这是我基于一个网上的代码自己修改封装过来的
你可以参考一下
/
@author Sglee
/
public class SimpleMail {
private static String encode = null;
static {
if ("\\"equals(Fileseparator)) {
encode = "GBK";
} else {
encode = "UTF-8";
}
}
/
以文本格式发送邮件
@param mailInfo
@return
/
public static boolean sendTextMail(MailInfo mailInfo) {
for (int i = 0; i < 3; i++) {
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties properties = mailInfogetProperties();
if (mailInfoisValidate()) {
// 如果需要身份认证,则创建一个密码验证器
authenticator = new MyAuthenticator(mailInfogetUsername(),
mailInfogetPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = SessiongetDefaultInstance(properties,
authenticator);
if (mailInfoisDebug()) {
sendMailSessionsetDebug(true);
}
try {
Message mailMessage = new MimeMessage(sendMailSession);// 根据session创建一个邮件消息
Address from = new InternetAddress(mailInfogetFromAddress());// 创建邮件发送者地址
mailMessagesetFrom(from);// 设置邮件消息的发送者
// Address to = new InternetAddress(mailInfogetToAddress());//
// 创建邮件的接收者地址
// mailMessagesetRecipient(MessageRecipientTypeTO, to);//
// 设置邮件消息的接收者
mailMessagesetRecipients(MessageRecipientTypeTO,
wrapAddress(mailInfogetToAddress()));
// InternetAddress ms = new
// InternetAddress(mailInfogetMsAddress());
// mailMessagesetRecipient(MessageRecipientTypeBCC, ms); //
// 密送人
mailMessagesetRecipients(MessageRecipientTypeBCC,
wrapAddress(mailInfogetMsAddress()));
mailMessagesetSubject(mailInfogetSubject());// 设置邮件消息的主题
mailMessagesetSentDate(new Date());// 设置邮件消息发送的时间
// mailMessagesetText(mailInfogetContent());//设置邮件消息的主要内容
// MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
MimeBodyPart messageBodyPart = new MimeBodyPart();// 创建一个包含附件内容的MimeBodyPart
// 设置HTML内容
messageBodyPartsetContent(mailInfogetContent(),
"text/html; charset=" + encode);
mainPartaddBodyPart(messageBodyPart);
// 存在附件
String[] filePaths = mailInfogetAttachFileNames();
if (filePaths != null && filePathslength > 0) {
for (String filePath : filePaths) {
messageBodyPart = new MimeBodyPart();
File file = new File(filePath);
if (fileexists()) {// 附件存在磁盘中
FileDataSource fds = new FileDataSource(file);// 得到数据源
messageBodyPart
setDataHandler(new DataHandler(fds));// 得到附件本身并至入BodyPart
messageBodyPartsetFileName("=" + encode + "B"
+ filegetName());// 得到文件名同样至入BodyPart
mainPartaddBodyPart(messageBodyPart);
}
}
}
// 将MimeMultipart对象设置为邮件内容
mailMessagesetContent(mainPart);
Transportsend(mailMessage);// 发送邮件
return true;
} catch (Exception e) {
eprintStackTrace();
try {
javautilconcurrentTimeUnitSECONDSsleep(5);
} catch (Exception e2) {
e2printStackTrace();
}
}
}
return false;
}
/
将string[]包装成EmailAddress
@param mailInfo
@return
@throws AddressException
/
private static Address [] wrapAddress(String[] adds) throws AddressException {
// String[] adds = mailInfogetToAddress();
if(adds == null || addslength == 0){
return null;
}
Address []to = new Address[addslength];
for(int i = 0;i<addslength;i++){
to[i]=new InternetAddress(adds[i]);
}
return to;
}
/
以HTML格式发送邮件
@param mailInfo
@return
/
public static boolean sendHtmlMail(MailInfo mailInfo) {
for (int i = 0; i < 3; i++) {
// 判断是否需要身份认证
MyAuthenticator authenticator = null;
Properties properties = mailInfogetProperties();
if (mailInfoisValidate()) {
// 如果需要身份认证,则创建一个密码验证器
authenticator = new MyAuthenticator(mailInfogetUsername(),
mailInfogetPassword());
}
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session sendMailSession = SessiongetDefaultInstance(properties,
authenticator);
if (mailInfoisDebug()) {
sendMailSessionsetDebug(true);
}
try {
Message mailMessage = new MimeMessage(sendMailSession);// 根据session创建一个邮件消息
Address from = new InternetAddress(mailInfogetFromAddress());// 创建邮件发送者地址
mailMessagesetFrom(from);// 设置邮件消息的发送者
// Address to = new InternetAddress(mailInfogetToAddress());//
// 创建邮件的接收者地址
// mailMessagesetRecipient(MessageRecipientTypeTO, to);//
// 设置邮件消息的接收者
mailMessagesetRecipients(MessageRecipientTypeTO,
wrapAddress(mailInfogetToAddress()));
// InternetAddress ms = new
// InternetAddress(mailInfogetMsAddress());
// mailMessagesetRecipient(MessageRecipientTypeBCC, ms); //
// 密送人
mailMessagesetRecipients(MessageRecipientTypeBCC,
wrapAddress(mailInfogetMsAddress()));
mailMessagesetSubject(mailInfogetSubject());// 设置邮件消息的主题
mailMessagesetSentDate(new Date());// 设置邮件消息发送的时间
// MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
MimeBodyPart messageBodyPart = new MimeBodyPart();// 创建一个包含HTML内容的MimeBodyPart
// 设置HTML内容
messageBodyPartsetContent(mailInfogetContent(),
"text/html; charset=" + encode);
mainPartaddBodyPart(messageBodyPart);
// 存在附件
String[] filePaths = mailInfogetAttachFileNames();
if (filePaths != null && filePathslength > 0) {
sunmiscBASE64Encoder enc = new sunmiscBASE64Encoder();
for (String filePath : filePaths) {
messageBodyPart = new MimeBodyPart();
File file = new File(filePath);
if (fileexists()) {// 附件存在磁盘中
FileDataSource fds = new FileDataSource(file);// 得到数据源
messageBodyPart
setDataHandler(new DataHandler(fds));// 得到附件本身并至入BodyPart
messageBodyPartsetFileName("=" + encode + "B"
+ encencode(EmailFileNameConvertchangeFileName(filegetName())getBytes())
+ "=");// 得到文件名同样至入BodyPart
mainPartaddBodyPart(messageBodyPart);
}
}
}
// 将MimeMultipart对象设置为邮件内容
mailMessagesetContent(mainPart);
Transportsend(mailMessage);// 发送邮件
return true;
} catch (Exception e) {
eprintStackTrace();
try {
javautilconcurrentTimeUnitSECONDSsleep(5);
} catch (Exception e2) {
e2printStackTrace();
}
}
}
return false;
}
}
/
封装邮件的基本信息
@author Sglee
/
public class MailInfo implements Serializable{
/
/
private static final long serialVersionUID = -3937199642590071261L;
private String mailServerHost;// 服务器ip
private String mailServerPort;// 端口
private long timeout;// 超时时间
private String fromAddress;// 发送者的邮件地址
private String[] toAddress;// 邮件接收者地址
private String[] msAddress;// 密送地址
private String username;// 登录邮件发送服务器的用户名
private String password;// 登录邮件发送服务器的密码
private boolean validate = false;// 是否需要身份验证
private String subject;// 邮件主题
private String content;// 邮件内容
private String[] attachFileNames;// 附件的文件地址
private boolean debug;// 调试模式
public Properties getProperties() {
Properties p = new Properties();
pput("mailsmtphost", thismailServerHost);
pput("mailsmtpport", thismailServerPort);
pput("mailsmtpauth", validate "true" : "false");
pput("mailsmtptimeout", thistimeout);
return p;
}
public String getMailServerHost() {
return mailServerHost;
}
public void setMailServerHost(String mailServerHost) {
thismailServerHost = mailServerHost;
}
public String getMailServerPort() {
return mailServerPort;
}
public void setMailServerPort(String mailServerPort) {
thismailServerPort = mailServerPort;
}
public String getFromAddress() {
return fromAddress;
}
public void setFromAddress(String fromAddress) {
thisfromAddress = fromAddress;
}
public String[] getToAddress() {
return toAddress;
}
public void setToAddress(String[] toAddress) {
thistoAddress = toAddress;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
thisusername = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
thispassword = password;
}
public boolean isValidate() {
return validate;
}
public void setValidate(boolean validate) {
thisvalidate = validate;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
thissubject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
thiscontent = content;
}
public String[] getAttachFileNames() {
return attachFileNames;
}
public void setAttachFileNames(String[] attachFileNames) {
thisattachFileNames = attachFileNames;
}
public void setMsAddress(String[] msAddress) {
thismsAddress = msAddress;
}
public String[] getMsAddress() {
return msAddress;
}
public void setDebug(boolean debug) {
thisdebug = debug;
}
public boolean isDebug() {
return debug;
}
public void setTimeout(long timeout) {
thistimeout = timeout;
}
public long getTimeout() {
return timeout;
}
}
public class MyAuthenticator extends Authenticator {
private String username = null;
private String password = null;
public MyAuthenticator() {
};
public MyAuthenticator(String username, String password) {
thisusername = username;
thispassword = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
}
注意一下:
Myeclipse自带的JavaEE5jar和java mail会发生冲突
找到ME下的javeee包
D:\MyEclipse 85\Common\plugins\comgenuitececlipsej2eedtcore_850me201003231033\data\libraryset\EE_5\javaeejar
用rar等解压工具解开javaeejar,删除里面的javax\mail文件夹(可以先备份javaeejar)
也即,以后都不能使用javaeejar里面的邮件api发送邮件了搭建一套邮件系统其实并不是一件庞大的工程,一套邮件系统的搭建构成可以分为以下三个部分:邮件服务器硬件、域名和固定ip地址、邮件服务器软件,搭建的便捷与否决定于邮件服务器软件的易用程度。(本文章以turbomail为例进行邮件系统的搭建说明)
一,邮件服务器硬件:最低配置要求piii以上,512m内存,硬盘在40g以上。
二,域名和ip地址:需要有独立的域名,并有更改mx记录的权限,内网用户可以使用自定义域名;需要有互联网固定ip,没有固定ip采用动态ip绑定域名软件也可。
三,邮件服务器软件:目前市场上的邮件服务器软件很多,比如exchange, mdaemon,imail,turbomail等,价格不等,质量也不等,售后服务也不等,建议用户综合比较价格,质量和技术服务,并索取试用期进行测试后进行选择(本文章以turbomail为例进行邮件系统的搭建说明)
搭建步骤:
一,在购进了服务器硬件后首先是要安装 *** 作系统,建议用户使用linux *** 作系统,非常稳定,在熟悉代码后 *** 作也不麻烦,邮件服务器最关键的就是稳定性,有了好的 *** 作系统就有了稳定的保障。
二,域名请向域名供应商申请,国内比较大的有万网和新网,域名供应商提供域名解析的服务;mx记录可以通过域名供应商提供的管理界面进行修改。
三,有了这以上两个前提后就可以安装邮件服务器软件了。不同的邮件服务器软件的安装方法和简易度不同,我以国内最易安装的turbomail邮件服务器为例讲解安装过程:
1,下载安装包,请上官网直接下载。
2a,windows系统:双击下载的安装包,按照安装提示完成安装
3a,重启电脑
4a,电脑重启后,自动出现turbomail控制台,点击“运行mail服务器”和“运行webmail服务器”,启动邮件服务程序
1b,linux/solaris/aix/hp-ux/freebsd系统下:以root用户登录,解压安装包,生成turbomail安装目录,解压命令为:#tar -xvzfturbomail_linux_yyy_xxxtgz
(注意:turbomail安装包必须放在根目录上)
2b,启动turbomail server,进入turbomail目录,执行starttmsh,命令为:#/starttmsh
3b,启动webmail服务,进入进入 turbomail/web/bin 目录,执行startupsh。
命令为:#/startupsh
4b,启动反垃圾服务,进入 turbomail/sa目录,执行sa_serversh。命令为: #/sa_serversh
四,邮件系统已经安装完毕,登录>
1SMTP协议
用户连上邮件服务器后,要想给它发送一封电子邮件,需要遵循一定的通迅规则,SMTP协议就是用于定义这种通讯规则的。
因而,通常我们也把处理用户smtp请求(邮件发送请求)的邮件服务器称之为SMTP服务器。(25)
2POP3协议
同样,用户若想从邮件服务器管理的电子邮箱中接收一封电子邮件的话,他连上邮件服务器后,也需要遵循一定的通迅格式,POP3协议用于定义这种通讯格式。
因而,通常我们也把处理用户pop3请求(邮件接收请求)的邮件服务器称之为POP3服务器。(110)
下图用于演示两帐户相互发送邮件的过程
31JavaMail API按其功能划分通常可分为如下三大类:
创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。
32发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。
接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。
33Session类
Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。
4邮件组织结构相关的API
MimeMessage类表示整封邮件。
MimeBodyPart类表示邮件的一个MIME消息。
MimeMultipart类表示一个由多个MIME消息组合成的组合MIME消息。
5具体的例子程序
package cnedudlmusend;import javautilProperties;
import javaxactivationDataHandler;
import javaxactivationFileDataSource;
import javaxmailMessage;
import javaxmailSession;
import javaxmailTransport;
import javaxmailinternetInternetAddress;
import javaxmailinternetMimeBodyPart;
import javaxmailinternetMimeMessage;
import javaxmailinternetMimeMultipart;
import javaxmailinternetMimeUtility;
public class SendMail {
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
//连接的邮件服务器的主机名
propsetProperty("mailsmtphost", "smtpsinacomcn");
//发送邮件的协议
propsetProperty("mailtransportprotocol", "smtp");
//是否向邮件服务器提交认证
propsetProperty("mailsmtpauth", "true");
//创建session
Session session = SessiongetInstance(prop);
sessionsetDebug(true);
//得到transport
Transport ts = sessiongetTransport();
//连接邮件服务器
tsconnect("smtpsinacomcn", "xxxx@sinacom", "xxxxx");
//发送邮件
MimeMessage message = createMessage(session);
tssendMessage(message, messagegetAllRecipients());
tsclose();
}
public static MimeMessage createMessage(Session session) throws Exception {
MimeMessage message = new MimeMessage(session);
//设置邮件的基本信息
messagesetFrom(new InternetAddress("xxxx@sinacom"));
messagesetRecipient(MessageRecipientTypeTO, new InternetAddress("1219070362@qqcom"));
messagesetSubject("test");
//正文
MimeBodyPart text = new MimeBodyPart();
//设置charaset可以解决中文正文的乱码问题,内嵌可下载的
textsetContent("你好xxx,<img src='c:/dogjpg' />测试成功!<br/><img src='cid:aaajpg' />", "text/html;charset=gbk");
//1
MimeBodyPart image = new MimeBodyPart();
imagesetDataHandler(new DataHandler(new FileDataSource("src/88jpg")));
imagesetContentID("aaajpg");
//附件
MimeBodyPart attach = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("src/javamail架包jar"));
attachsetDataHandler(dh);
//解决文件中文乱码问题
attachsetFileName(MimeUtilityencodeText(dhgetName()));
//描述正文和的关系
MimeMultipart mp = new MimeMultipart();
mpaddBodyPart(text);
mpaddBodyPart(image);
mpsetSubType("related");
//描述正文和附件
MimeMultipart mp2 = new MimeMultipart();
mp2addBodyPart(attach);
//将正文封装为一个body
MimeBodyPart content = new MimeBodyPart();
contentsetContent(mp);
mp2addBodyPart(content);
mp2setSubType("mixed");
messagesetContent(mp2);
messagesaveChanges();
return message;
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)