- 浏览: 399964 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (139)
- java (39)
- linux (9)
- hibernate (2)
- Spring (10)
- Struts2 (1)
- Ext (38)
- Ext + Java (5)
- Oracle (5)
- JavaScript (15)
- 开发工具 (3)
- ajax (2)
- WebSerivice+Spring (2)
- WebService+CXF (2)
- 服务器 (4)
- MQ (1)
- Apache (3)
- axis (3)
- myeclipse,maven (2)
- WebService (4)
- web (11)
- httpinvoke (1)
- 多线程 (3)
- 同步 (1)
- Servlet (2)
- css (2)
- div (2)
- html (1)
- file (2)
- 应用软件 (1)
- myEclipse10 (1)
- mysql (2)
- Extjs4 (2)
- JavaScript css (1)
- mongodb (2)
- socket (6)
- 流媒体 (5)
- 语音技术 (5)
- freeswitch (1)
最新评论
-
白天看黑夜:
Apache Mina Server 2.0 中文参考手册(带 ...
Apache Mina 学习 -
stduPanda:
引用引用[自行车在现场咨询quote]引用引用引用引用引用引用 ...
Errors running builder 'DeploymentBuilder' on project '工程名' -
鱼翔空:
maven3 导入报Plugin execution not ...
CXF自动生成wsdl与xsd文件 -
哈哈哥_Supper:
closeAction:'hide',
Extjs4 tabPanel关闭后打开 cannot read property addcls of null -
哈哈哥_Supper:
var tab1 = tabPanel.add(
...
Extjs4 tabPanel关闭后打开 cannot read property addcls of null
SMTP:简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)由RFC821定义,它定义了发送邮件的机制,在JavaMail环境中,基于JavaMail的程序将和因特网服务供应商ISP(internet Service Provider ’ s)SMTP服务器通信.SMTP服务器会中转消息给接收方SMTP服务器以便最终让用户经由POP或者IMAP获得.
POP:代表邮局协议(Post Office Protocol).目前的版本是3.所以一般都称之为POP3.这个协议是由RFC1939定义的.POP是一种机制,因特网上多大数用户用它得到邮件.它规定每个用户一个邮箱的支持.使用POP协议的时候,用户的许多性能并不是由POP协议支持的,如查看几封新邮件消息这个功能,这些功能内建在如Eudora或MicrosoftOutlook之类的程序中,它们记住一些事.所以在用JavaMail的时候,如果你想要这些信息,你就必须自己算了.
IMAP:是更高级的用户接收消息的协议,被定义在RFC2060中,IMAP代表因特网消息访问协议(Internet Message Access Protocol),目前用的版本是4,所以也叫做IMAP4.在用到IMAP的时候,邮件服务器必须支持这个协议,不能仅仅把使用POP的程序用于IMAP,并指望它支持IMAP所有性能.
MIME:是因特网邮件扩展标准(Multipurpose Internet Mail Extensions).它不是邮件传输协议,但是对于传输的内容的消息,附件以及其他的内容定义了格式.可以理解成一个定义合适的标准.
NNTP:因为JavaMail将供应商和所有其它的东西分开了,您就能轻松添加额外的协议支持.NNTP 就是网络新闻传输协议.
JavaMailAPI可以到 http://java.sun.com/products/javamail/index.html 进行下载,并将mail.jar添加到classpath即可.
JAF框架可以到 http://java.sun.com/products/javabeans/glasgow/jaf.html 进行下载,并将activation.jar添加到classpath即可.
如果实用J2EE就没由什么特定非要用基本的JavaMailAPI了.J2EE的类就能处理了.只要确保j2ee.jar文件在classpath中就Ok了.
下面我用一个最简单的例子还演示第一条消息的发送.
1,获取系统Properties.
Properties props = System.getProperties();
2,将您的SMTP服务器名添加到mail.smtp.host关键字的属性中.
Props.pout( “ mail.smtp.host ” ,host);
3,获取基于Properties Session对象.
Session session = Session.getDefaultInstance(props,null);
4,从Session创建一个MimeMessage.
MimeMessage message = new MimeMessage(session);
5,设置消息from域.
Message.setForm(new InternetAddress(from));
6,设置to域.
Message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
7,设置消息主题.
message.setSubject( “ HelloJavaMail ” );
8,设置消息内容.
Message.setText( “ Welcome to JavaMail ” );
9发送消息.
Transport.send(message);
10,在编译用运的时候传递MSTP服务器,from地址,to地址.
通过简单的接触了JavaMail相信大家多邮件发送也有了简单的了解和认识,下面我主要研究一下它的具体功能,也就是说具体的接口或类的含义.
Session类定义了一个基本的邮件会话,所有的其他类都是由这个session才得意生效的,Session对象用java.util.Properties对象获取信息,如邮件服务器,用户名,密码及整个应用程序中共享的其他信息.类的构造器是此有的,private.它能用getDefaultInstance()方法来共享.获取Session对象的方方法如下:
Properties props = new Properties();
Session session = Session.getDefaultInstance(props,null);
Null参数都是Authenticator对象,在这里没有使用.
对于大多数情况,共享的session已经足够用了.
Message消息类,在获得了Session对象后,就可以继续创建要发送的消息.因为Message是个抽象类,您必须用一个子类,多数情况下为java.mail.internet.MimeMessage.这个能理解成MIME类型和头的电子邮件消息.正如不同的RFC中定义的,虽然在某些头部域非ASCII字符也能被编译,但是Message头只能被限制用US-ASCII字符.要创建一个Message请将Session对象传递给MimeMessage的构造器.
MimeMessage message = newMimeMessage(session);
一旦获得消息,就可以设置各个部分了.最基本的就是setContent()方法,例如/
message.setContent( “ Hello ” , ” text/plain ” );
如果知道在实用MimeMessage,而且消息是纯文本格式,就可以用setText()方法,它只需要代表实际内容的参数.(Mime类型缺省为text/plain)
用setSubject()方法设置subject(主题);
message.setSubject( “ 主题 ” );
Address地址类,和Message一样也是一个抽象类,一旦创建了Session和Message并将内容填入消息后,就可以用Address确定信件的地址了,用javax.mail.internet.
InternetAddress类.若创建的地址只包含电子邮件地址,只要传递电子邮件地址给构造器就可以了.例如:Address address = new InternetAddress( “ it5719@163.com ” );
若希望名字挨着电子邮件现实,就可以把它传递给构造器,如下:
Address address = new InternetAddress( “ it5719@163.com ” , ” 我心依旧 ” );
需要为消息的from域和to域创建地址对象,除非邮件服务器阻止,没有什么能阻止你发送一段看上去是任何人的消息了呵呵.一旦创建address将他们域消息连接方法有两种,如要要识别发件人的就可以用setFrom()和setReplyTo方法.然后message.setFrom(address);
需要实用多个from地址的就用addFrom()方法.例子如下:
Address[] address = ,.,. ; message.addFrom(address);
若要识别消息recipient收件人,就要实用addRecipient()方法了.例如:
message.addRecipient(type,address)
Authenticator与java.net类一样,JavaMailAPI也可以利用Authentcator通过用户名密码访问受保护的资源.对于JavaMail来说,这些资源就是邮件服务器,Authentcator类在javax.mail包中.要使用Authenticator,首先创建一个抽象的子类,并从
GetPasswordAuthentication方法中返回passwordAuthentication实例,创建完成后,您必须向session注册Authenticator,然后在需要认证的时候会通知它,其实说白了就是把配置的用户名和密码返回给调用它的程序.例如:
Properties props = new properties();
Authenticator auth = new MailAuthenticator()//接口声明,创建自己新类的实例.
Session session = Session.getDefauItInstance(props,auth);
Transport消息发送传输类,这个类用协议指定的语言发送消息,通常是SMTP,它是抽象类,它的工作方式与Session有些类似,尽调用静态方法send()方法,就OK了.例如:
Transport.send(message);
或者也可以从针对协议的会话中获取一个特定的实例,传递用户名和密码.发送消息,然后关闭连接,例如:
message.saveChanges();
transport transport = session.getTreansport( “ smtp ” );//指定的协议
transport.connect(host,username,password);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
如果要观察传到邮件服务器上的邮件命令,请用session.setDubug(true)设置调试标志.
Store和folder用session获取消息,与发送消息开始很相似,但是在session得到后,很可能实用用户名和密码或实用Authenticator连接到一个Store.类似于Transport,也是一样要告诉store用什么协议.例如
Store store = session.getStore( “ pop3 ” );
Store.connect(host,username,password);
连接到Store之后,接下来,获得一个folder,必须打开它就可以读取里边的消息了.
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message[] message = folder.getMessages();
POP3唯一可用的文件夹就是INBOX,如果实用IMAP,还可以用其他的文件夹.
当读到了具体的message以后,就可以用getContent来获取内容,或者用writeTo()将内容写入流,getContent()方法只能得到消息内容,而writeTo()的输出却包含消息头.
System.out.println(((MimeMessage)message).getConntent());
一旦读取完毕邮件,要关闭store和folder的连接.
folder.colse(boolean);
store.colse();
传递给folder的close()方法的boolean参数表示是否清楚已删除的消息从而更新folder.
上面就是JavaMail邮件操作的基本的常用类,我觉得理解了这几个类的机制,基本就可以处理一般的邮件操作了.下面是一个我写的JavaMail实现邮件发送的代码.
首先是一个Authenticator类的实现:记录用户名和密码:
import javax.mail.*;
public class MailAuthenticator extends Authenticator
{
//******************************
//由于发送邮件的地方比较多,
//下面统一定义用户名,口令.
//******************************
public static String HUAWEI_MAIL_USER = "it5719@163.com";
public static String HUAWEI_MAIL_PASSWORD = "密码";
public MailAuthenticator()
{
}
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(HUAWEI_MAIL_USER, HUAWEI_MAIL_PASSWORD);
}
}
这个类是发送邮件的类.
package com.deepdo.common.mail;
/**
* 此处插入类型说明。
* 创建日期:(2011-5-31 10:57:16)
* @author:Andy.yale
*/
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendMail {
//要发送Mail地址
private String mailTo = null;
//Mail发送的起始地址
private String mailFrom = null;
//SMTP主机地址
private String smtpHost = null;
//是否采用调试方式
private boolean debug = false;
private String messageBasePath = null;
//Mail主题
private String subject;
//Mail内容
private String msgContent;
private Vector attachedFileList;
private String mailAccount = null;
private String mailPass = null;
private String messageContentMimeType ="text/html; charset=gb2312";
private String mailbccTo = null;
private String mailccTo = null;
/**
* SendMailService 构造子注解。
*/
public SendMail() {
super();
}
private void fillMail(Session session,MimeMessage msg) throws IOException, MessagingException{
String fileName = null;
Multipart mPart = new MimeMultipart();
if (mailFrom != null) {
msg.setFrom(new InternetAddress(mailFrom));
System.out.println("发送人Mail地址:"+mailFrom);
} else {
System.out.println("没有指定发送人邮件地址!");
return;
}
if (mailTo != null) {
InternetAddress[] address = InternetAddress.parse(mailTo);
msg.setRecipients(Message.RecipientType.TO, address);
System.out.println("收件人Mail地址:"+mailTo);
} else {
System.out.println("没有指定收件人邮件地址!");
return;
}
if (mailccTo != null) {
InternetAddress[] ccaddress = InternetAddress.parse(mailccTo);
System.out.println("CCMail地址:"+mailccTo);
msg.setRecipients(Message.RecipientType.CC, ccaddress);
}
if (mailbccTo != null) {
InternetAddress[] bccaddress = InternetAddress.parse(mailbccTo);
System.out.println("BCCMail地址:"+mailbccTo);
msg.setRecipients(Message.RecipientType.BCC, bccaddress);
}
msg.setSubject(subject);
InternetAddress[] replyAddress = { new InternetAddress(mailFrom)};
msg.setReplyTo(replyAddress);
// create and fill the first message part
MimeBodyPart mBodyContent = new MimeBodyPart();
if (msgContent != null)
mBodyContent.setContent(msgContent, messageContentMimeType);
else
mBodyContent.setContent("", messageContentMimeType);
mPart.addBodyPart(mBodyContent);
// attach the file to the message
if (attachedFileList != null) {
for (Enumeration fileList = attachedFileList.elements(); fileList.hasMoreElements();) {
fileName = (String) fileList.nextElement();
MimeBodyPart mBodyPart = new MimeBodyPart();
// attach the file to the message
FileDataSource fds = new FileDataSource(messageBasePath + fileName);
System.out.println("Mail发送的附件为:"+messageBasePath + fileName);
mBodyPart.setDataHandler(new DataHandler(fds));
mBodyPart.setFileName(fileName);
mPart.addBodyPart(mBodyPart);
}
}
msg.setContent(mPart);
msg.setSentDate(new Date());
}
/**
* 此处插入方法说明。
*/
public void init()
{
}
/**
* 发送e_mail,返回类型为int
* 当返回值为0时,说明邮件发送成功
* 当返回值为3时,说明邮件发送失败
*/
public int sendMail() throws IOException, MessagingException {
int loopCount;
Properties props = System.getProperties();
props.put("mail.smtp.host", smtpHost);
props.put("mail.smtp.auth", "true");
MailAuthenticator auth = new MailAuthenticator();
Session session = Session.getInstance(props, auth);
session.setDebug(debug);
MimeMessage msg = new MimeMessage(session);
Transport trans = null;
try {
fillMail(session,msg);
// send the message
trans = session.getTransport("smtp");
try {
trans.connect(smtpHost, MailAuthenticator.HUAWEI_MAIL_USER, MailAuthenticator.HUAWEI_MAIL_PASSWORD);//, HUAWEI_MAIL_PASSWORD);
} catch (AuthenticationFailedException e) {
e.printStackTrace();
System.out.println("连接邮件服务器错误:");
return 3;
} catch (MessagingException e) {
System.out.println("连接邮件服务器错误:");
return 3;
}
trans.send(msg);
trans.close();
} catch (MessagingException mex) {
System.out.println("发送邮件失败:");
mex.printStackTrace();
Exception ex = null;
if ((ex = mex.getNextException()) != null) {
System.out.println(ex.toString());
ex.printStackTrace();
}
return 3;
} finally {
try {
if (trans != null && trans.isConnected())
trans.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
System.out.println("发送邮件成功!");
return 0;
}
public void setAttachedFileList(java.util.Vector filelist)
{
attachedFileList = filelist;
}
public void setDebug(boolean debugFlag)
{
debug=debugFlag;
}
public void setMailAccount(String strAccount) {
mailAccount = strAccount;
}
public void setMailbccTo(String bccto) {
mailbccTo = bccto;
}
public void setMailccTo(String ccto) {
mailccTo = ccto;
}
public void setMailFrom(String from)
{
mailFrom=from;
}
public void setMailPass(String strMailPass) {
mailPass = strMailPass;
}
public void setMailTo(String to)
{
mailTo=to;
}
public void setMessageBasePath(String basePath)
{
messageBasePath=basePath;
}
public void setMessageContentMimeType(String mimeType)
{
messageContentMimeType = mimeType;
}
public void setMsgContent(String content)
{
msgContent=content;
}
public void setSMTPHost(String host)
{
smtpHost=host;
}
public void setSubject(String sub)
{
subject=sub;
}
public static void main(String[] argv) throws Exception
{
for(int i = 0;i<10;i++) {
SendMail sm = new SendMail();
sm.setSMTPHost("SMTP地址");
sm.setMailFrom("发送地址");
sm.setMailTo("目标地址");
sm.setMsgContent("内容");
sm.setSubject("标题");
sm.sendMail();
}
}
}
POP:代表邮局协议(Post Office Protocol).目前的版本是3.所以一般都称之为POP3.这个协议是由RFC1939定义的.POP是一种机制,因特网上多大数用户用它得到邮件.它规定每个用户一个邮箱的支持.使用POP协议的时候,用户的许多性能并不是由POP协议支持的,如查看几封新邮件消息这个功能,这些功能内建在如Eudora或MicrosoftOutlook之类的程序中,它们记住一些事.所以在用JavaMail的时候,如果你想要这些信息,你就必须自己算了.
IMAP:是更高级的用户接收消息的协议,被定义在RFC2060中,IMAP代表因特网消息访问协议(Internet Message Access Protocol),目前用的版本是4,所以也叫做IMAP4.在用到IMAP的时候,邮件服务器必须支持这个协议,不能仅仅把使用POP的程序用于IMAP,并指望它支持IMAP所有性能.
MIME:是因特网邮件扩展标准(Multipurpose Internet Mail Extensions).它不是邮件传输协议,但是对于传输的内容的消息,附件以及其他的内容定义了格式.可以理解成一个定义合适的标准.
NNTP:因为JavaMail将供应商和所有其它的东西分开了,您就能轻松添加额外的协议支持.NNTP 就是网络新闻传输协议.
JavaMailAPI可以到 http://java.sun.com/products/javamail/index.html 进行下载,并将mail.jar添加到classpath即可.
JAF框架可以到 http://java.sun.com/products/javabeans/glasgow/jaf.html 进行下载,并将activation.jar添加到classpath即可.
如果实用J2EE就没由什么特定非要用基本的JavaMailAPI了.J2EE的类就能处理了.只要确保j2ee.jar文件在classpath中就Ok了.
下面我用一个最简单的例子还演示第一条消息的发送.
1,获取系统Properties.
Properties props = System.getProperties();
2,将您的SMTP服务器名添加到mail.smtp.host关键字的属性中.
Props.pout( “ mail.smtp.host ” ,host);
3,获取基于Properties Session对象.
Session session = Session.getDefaultInstance(props,null);
4,从Session创建一个MimeMessage.
MimeMessage message = new MimeMessage(session);
5,设置消息from域.
Message.setForm(new InternetAddress(from));
6,设置to域.
Message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
7,设置消息主题.
message.setSubject( “ HelloJavaMail ” );
8,设置消息内容.
Message.setText( “ Welcome to JavaMail ” );
9发送消息.
Transport.send(message);
10,在编译用运的时候传递MSTP服务器,from地址,to地址.
通过简单的接触了JavaMail相信大家多邮件发送也有了简单的了解和认识,下面我主要研究一下它的具体功能,也就是说具体的接口或类的含义.
Session类定义了一个基本的邮件会话,所有的其他类都是由这个session才得意生效的,Session对象用java.util.Properties对象获取信息,如邮件服务器,用户名,密码及整个应用程序中共享的其他信息.类的构造器是此有的,private.它能用getDefaultInstance()方法来共享.获取Session对象的方方法如下:
Properties props = new Properties();
Session session = Session.getDefaultInstance(props,null);
Null参数都是Authenticator对象,在这里没有使用.
对于大多数情况,共享的session已经足够用了.
Message消息类,在获得了Session对象后,就可以继续创建要发送的消息.因为Message是个抽象类,您必须用一个子类,多数情况下为java.mail.internet.MimeMessage.这个能理解成MIME类型和头的电子邮件消息.正如不同的RFC中定义的,虽然在某些头部域非ASCII字符也能被编译,但是Message头只能被限制用US-ASCII字符.要创建一个Message请将Session对象传递给MimeMessage的构造器.
MimeMessage message = newMimeMessage(session);
一旦获得消息,就可以设置各个部分了.最基本的就是setContent()方法,例如/
message.setContent( “ Hello ” , ” text/plain ” );
如果知道在实用MimeMessage,而且消息是纯文本格式,就可以用setText()方法,它只需要代表实际内容的参数.(Mime类型缺省为text/plain)
用setSubject()方法设置subject(主题);
message.setSubject( “ 主题 ” );
Address地址类,和Message一样也是一个抽象类,一旦创建了Session和Message并将内容填入消息后,就可以用Address确定信件的地址了,用javax.mail.internet.
InternetAddress类.若创建的地址只包含电子邮件地址,只要传递电子邮件地址给构造器就可以了.例如:Address address = new InternetAddress( “ it5719@163.com ” );
若希望名字挨着电子邮件现实,就可以把它传递给构造器,如下:
Address address = new InternetAddress( “ it5719@163.com ” , ” 我心依旧 ” );
需要为消息的from域和to域创建地址对象,除非邮件服务器阻止,没有什么能阻止你发送一段看上去是任何人的消息了呵呵.一旦创建address将他们域消息连接方法有两种,如要要识别发件人的就可以用setFrom()和setReplyTo方法.然后message.setFrom(address);
需要实用多个from地址的就用addFrom()方法.例子如下:
Address[] address = ,.,. ; message.addFrom(address);
若要识别消息recipient收件人,就要实用addRecipient()方法了.例如:
message.addRecipient(type,address)
Authenticator与java.net类一样,JavaMailAPI也可以利用Authentcator通过用户名密码访问受保护的资源.对于JavaMail来说,这些资源就是邮件服务器,Authentcator类在javax.mail包中.要使用Authenticator,首先创建一个抽象的子类,并从
GetPasswordAuthentication方法中返回passwordAuthentication实例,创建完成后,您必须向session注册Authenticator,然后在需要认证的时候会通知它,其实说白了就是把配置的用户名和密码返回给调用它的程序.例如:
Properties props = new properties();
Authenticator auth = new MailAuthenticator()//接口声明,创建自己新类的实例.
Session session = Session.getDefauItInstance(props,auth);
Transport消息发送传输类,这个类用协议指定的语言发送消息,通常是SMTP,它是抽象类,它的工作方式与Session有些类似,尽调用静态方法send()方法,就OK了.例如:
Transport.send(message);
或者也可以从针对协议的会话中获取一个特定的实例,传递用户名和密码.发送消息,然后关闭连接,例如:
message.saveChanges();
transport transport = session.getTreansport( “ smtp ” );//指定的协议
transport.connect(host,username,password);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
如果要观察传到邮件服务器上的邮件命令,请用session.setDubug(true)设置调试标志.
Store和folder用session获取消息,与发送消息开始很相似,但是在session得到后,很可能实用用户名和密码或实用Authenticator连接到一个Store.类似于Transport,也是一样要告诉store用什么协议.例如
Store store = session.getStore( “ pop3 ” );
Store.connect(host,username,password);
连接到Store之后,接下来,获得一个folder,必须打开它就可以读取里边的消息了.
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message[] message = folder.getMessages();
POP3唯一可用的文件夹就是INBOX,如果实用IMAP,还可以用其他的文件夹.
当读到了具体的message以后,就可以用getContent来获取内容,或者用writeTo()将内容写入流,getContent()方法只能得到消息内容,而writeTo()的输出却包含消息头.
System.out.println(((MimeMessage)message).getConntent());
一旦读取完毕邮件,要关闭store和folder的连接.
folder.colse(boolean);
store.colse();
传递给folder的close()方法的boolean参数表示是否清楚已删除的消息从而更新folder.
上面就是JavaMail邮件操作的基本的常用类,我觉得理解了这几个类的机制,基本就可以处理一般的邮件操作了.下面是一个我写的JavaMail实现邮件发送的代码.
首先是一个Authenticator类的实现:记录用户名和密码:
import javax.mail.*;
public class MailAuthenticator extends Authenticator
{
//******************************
//由于发送邮件的地方比较多,
//下面统一定义用户名,口令.
//******************************
public static String HUAWEI_MAIL_USER = "it5719@163.com";
public static String HUAWEI_MAIL_PASSWORD = "密码";
public MailAuthenticator()
{
}
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(HUAWEI_MAIL_USER, HUAWEI_MAIL_PASSWORD);
}
}
这个类是发送邮件的类.
package com.deepdo.common.mail;
/**
* 此处插入类型说明。
* 创建日期:(2011-5-31 10:57:16)
* @author:Andy.yale
*/
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendMail {
//要发送Mail地址
private String mailTo = null;
//Mail发送的起始地址
private String mailFrom = null;
//SMTP主机地址
private String smtpHost = null;
//是否采用调试方式
private boolean debug = false;
private String messageBasePath = null;
//Mail主题
private String subject;
//Mail内容
private String msgContent;
private Vector attachedFileList;
private String mailAccount = null;
private String mailPass = null;
private String messageContentMimeType ="text/html; charset=gb2312";
private String mailbccTo = null;
private String mailccTo = null;
/**
* SendMailService 构造子注解。
*/
public SendMail() {
super();
}
private void fillMail(Session session,MimeMessage msg) throws IOException, MessagingException{
String fileName = null;
Multipart mPart = new MimeMultipart();
if (mailFrom != null) {
msg.setFrom(new InternetAddress(mailFrom));
System.out.println("发送人Mail地址:"+mailFrom);
} else {
System.out.println("没有指定发送人邮件地址!");
return;
}
if (mailTo != null) {
InternetAddress[] address = InternetAddress.parse(mailTo);
msg.setRecipients(Message.RecipientType.TO, address);
System.out.println("收件人Mail地址:"+mailTo);
} else {
System.out.println("没有指定收件人邮件地址!");
return;
}
if (mailccTo != null) {
InternetAddress[] ccaddress = InternetAddress.parse(mailccTo);
System.out.println("CCMail地址:"+mailccTo);
msg.setRecipients(Message.RecipientType.CC, ccaddress);
}
if (mailbccTo != null) {
InternetAddress[] bccaddress = InternetAddress.parse(mailbccTo);
System.out.println("BCCMail地址:"+mailbccTo);
msg.setRecipients(Message.RecipientType.BCC, bccaddress);
}
msg.setSubject(subject);
InternetAddress[] replyAddress = { new InternetAddress(mailFrom)};
msg.setReplyTo(replyAddress);
// create and fill the first message part
MimeBodyPart mBodyContent = new MimeBodyPart();
if (msgContent != null)
mBodyContent.setContent(msgContent, messageContentMimeType);
else
mBodyContent.setContent("", messageContentMimeType);
mPart.addBodyPart(mBodyContent);
// attach the file to the message
if (attachedFileList != null) {
for (Enumeration fileList = attachedFileList.elements(); fileList.hasMoreElements();) {
fileName = (String) fileList.nextElement();
MimeBodyPart mBodyPart = new MimeBodyPart();
// attach the file to the message
FileDataSource fds = new FileDataSource(messageBasePath + fileName);
System.out.println("Mail发送的附件为:"+messageBasePath + fileName);
mBodyPart.setDataHandler(new DataHandler(fds));
mBodyPart.setFileName(fileName);
mPart.addBodyPart(mBodyPart);
}
}
msg.setContent(mPart);
msg.setSentDate(new Date());
}
/**
* 此处插入方法说明。
*/
public void init()
{
}
/**
* 发送e_mail,返回类型为int
* 当返回值为0时,说明邮件发送成功
* 当返回值为3时,说明邮件发送失败
*/
public int sendMail() throws IOException, MessagingException {
int loopCount;
Properties props = System.getProperties();
props.put("mail.smtp.host", smtpHost);
props.put("mail.smtp.auth", "true");
MailAuthenticator auth = new MailAuthenticator();
Session session = Session.getInstance(props, auth);
session.setDebug(debug);
MimeMessage msg = new MimeMessage(session);
Transport trans = null;
try {
fillMail(session,msg);
// send the message
trans = session.getTransport("smtp");
try {
trans.connect(smtpHost, MailAuthenticator.HUAWEI_MAIL_USER, MailAuthenticator.HUAWEI_MAIL_PASSWORD);//, HUAWEI_MAIL_PASSWORD);
} catch (AuthenticationFailedException e) {
e.printStackTrace();
System.out.println("连接邮件服务器错误:");
return 3;
} catch (MessagingException e) {
System.out.println("连接邮件服务器错误:");
return 3;
}
trans.send(msg);
trans.close();
} catch (MessagingException mex) {
System.out.println("发送邮件失败:");
mex.printStackTrace();
Exception ex = null;
if ((ex = mex.getNextException()) != null) {
System.out.println(ex.toString());
ex.printStackTrace();
}
return 3;
} finally {
try {
if (trans != null && trans.isConnected())
trans.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
System.out.println("发送邮件成功!");
return 0;
}
public void setAttachedFileList(java.util.Vector filelist)
{
attachedFileList = filelist;
}
public void setDebug(boolean debugFlag)
{
debug=debugFlag;
}
public void setMailAccount(String strAccount) {
mailAccount = strAccount;
}
public void setMailbccTo(String bccto) {
mailbccTo = bccto;
}
public void setMailccTo(String ccto) {
mailccTo = ccto;
}
public void setMailFrom(String from)
{
mailFrom=from;
}
public void setMailPass(String strMailPass) {
mailPass = strMailPass;
}
public void setMailTo(String to)
{
mailTo=to;
}
public void setMessageBasePath(String basePath)
{
messageBasePath=basePath;
}
public void setMessageContentMimeType(String mimeType)
{
messageContentMimeType = mimeType;
}
public void setMsgContent(String content)
{
msgContent=content;
}
public void setSMTPHost(String host)
{
smtpHost=host;
}
public void setSubject(String sub)
{
subject=sub;
}
public static void main(String[] argv) throws Exception
{
for(int i = 0;i<10;i++) {
SendMail sm = new SendMail();
sm.setSMTPHost("SMTP地址");
sm.setMailFrom("发送地址");
sm.setMailTo("目标地址");
sm.setMsgContent("内容");
sm.setSubject("标题");
sm.sendMail();
}
}
}
发表评论
-
linux下查找java进程占用CPU过高原因
2018-04-03 12:35 8171. 查找进程 top查看进程占用资源情况 ... -
Apache Mina TCP/UDP功能使用说明
2017-03-14 14:18 1807Apache Mina ... -
WebService CXF客户端调用样例
2013-01-04 14:48 2071如果服务端提供jar包,客户端直接引用jar ... -
ExtJS layout的9种样式风格总结
2012-12-18 10:29 1132文章转载自:http://virgoooos.iteye.co ... -
Zip文件解析(包含中文目录)
2012-12-11 13:22 2442在解析zip文件时,由于默认版本不支持中文目录,导致解析时遇到 ... -
正则表达式详解
2012-10-09 15:13 969转载自:http://edu.yesky.com/ ... -
map 排序
2012-09-28 10:44 1203用于map的值排序的方法,修改SortedSet 的方法即 ... -
java读写txt文件
2012-09-19 18:49 30047import java.io.BufferedReader; ... -
UTF-8 的bom格式处理
2012-09-14 11:54 1700一般通过httpcient请求的内容,有可能返回utf- ... -
java获取当前工程目录
2012-08-23 17:41 1699转载自:http://blog.csdn.net/yan ... -
用sax解析xml文件把读取的内容写入txt
2012-08-17 10:07 2223import java.io.BufferedWrite ... -
div+css实现圆角聊天框
2012-08-14 15:50 4842需要做个聊天样式的对话框,找了半天,终于找到一个比较好的样式, ... -
linux 启动oracle
2012-07-24 10:58 1070转载:http://www.cnitb ... -
java写excel03文件
2012-07-18 00:06 1008用java jxl写入excel03文件,下面给出一个简 ... -
JSP页面查询显示常用模式
2012-07-16 21:09 1268全文转载自:http://pharaohsprinc ... -
Servlet调用Spring bean
2012-07-13 16:30 1733servlet中直接调用spring时会出现Nullpo ... -
Json
2012-07-11 11:25 1121原文转载自:http://www.cnblogs.com ... -
java常用英语词汇翻译
2012-06-04 14:07 2505<java常用英语词汇>abstract 抽象的 ... -
JAVA垃圾回收分析&& java虚拟机垃圾回收机制
2012-06-04 11:11 1274JAVA垃圾回收分析&&a ... -
原子变量(AtomicLong, AtomicInteger, AtomicReference)
2012-05-30 11:49 1798原文转载:http://meng ...
相关推荐
自己做的javamailAPI.chm文档,欢迎大家下载学习。
这个“javaMailAPI帮助文档chm”是一个官方编译的.chm(Microsoft HTML Help)文件,包含了详尽的JavaMail API参考文档,对于学习和使用JavaMail API的开发者来说是非常宝贵的资源。 JavaMail API的核心概念和组件...
JavaMail API通常与两个重要的JAR包一起使用:`mail.jar`和`activation.jar`。 `mail.jar`是JavaMail API的核心库,包含了处理邮件服务所需的所有类和接口。这些类包括`Session`(邮件会话)、`Message`(邮件对象...
在提供的压缩包中,`JavaMail_API.chm` 是JavaMail的API帮助文档,通常包含了关于JavaMail API的所有类、接口、方法的详细说明,以及示例代码,对于开发者来说是理解和使用JavaMail的重要参考资料。你可以通过查阅这...
4.端口号:一般SMTP服务使用端口25,启用SSL的SMTP服务使用端口465,而支持TLS的SMTP服务使用端口587。 邮件接收时,需要设置的属性包括: 1. POP3或IMAP主机:邮件服务器地址,如果是使用IMAP协议,则通常为“***...
通过使用 JavaMail API,开发人员能够创建类似于 Eudora、Pine 或 Microsoft Outlook 的邮件用户代理 (Mail User Agent, MUA) 类型的应用程序。 - **主要功能**:JavaMail API 主要用于创建 MUA 类型的程序,即用户...
在使用JavaMail API时,首先需要创建一个`Session`实例,配置相应的属性,如`Properties`对象中的`mail.smtp.host`、`mail.smtp.port`等。然后,通过`Store`类连接到邮件服务器,获取或创建邮箱,并使用`Folder`对象...
在使用JavaMail API 时,开发者需要了解这些协议的基本概念和工作方式,以便正确地配置和使用API。例如,发送邮件时,开发者可能需要配置SMTP服务器的地址、端口和认证信息;接收邮件则可以选择使用POP3或IMAP4,...
该文档时javaMail开发文档,对于学习java电子邮件的开发很有用,里面详细的介绍的javamail的核心类和如何去使用它开发出类似MSOutlook,foxmail等电子邮件客户端程序!希望对那些学习javamail的人有帮助。
在本文中,我们将深入探索 JavaMail 的世界,了解 JavaMail 的基本概念、邮件传输协议、JavaMailAPI 的使用等方面的知识。 邮件传输协议 在了解 JavaMail 之前,首先需要了解邮件传输协议。常见的邮件传输协议有 ...
总结起来,JavaMailWebBased项目涵盖了使用JavaMailAPI在Web应用中实现邮件功能的关键技术。这包括发送邮件、接收邮件、处理用户输入、整合Web框架以及确保通信安全。通过深入理解这些概念和API,开发者能够构建出...
在这个“javaemail源码-java-mail-api”项目中,我们很可能是得到了一个使用JavaMail API发送电子邮件的示例源代码库。 在JavaMail API中,主要涉及以下几个关键类和接口: 1. `Session`: 这是整个邮件会话的核心...
电子邮件Java 软件包gmailemail; 导入java.util.Properties; 导入java.util.logging.Level; 导入java.util.logging.Logger; 导入javax.mail.Session;...导入javax.mail.PasswordAuthentication;...导入javax.mail....
"JavaMail操作的总结.txt"和"JavaMail.txt"可能会更深入地讨论JavaMail的使用技巧和常见问题,而"用Java程序生成文本的捷径.TXT"可能是关于如何在Java中生成文本内容以填充邮件的说明,"为什么要自己写底层涵式.txt...
上使用 JavaMail 遇到问题或困难的开发人员有用。 遇到了一些麻烦: 缺少 java.awt.Datatransfer 类(和相关接口):它们在 Apache Harmony SVN 中可用。 有一些 java.awt.Image 依赖项,已被删除。 最新的 Sun ...
适用于Android的JavaMail API 使用JavaMailAPI在Android中使用gmail帐户发送电子邮件的示例JavaMail API文档先决条件Android SDK v10入门该项目使用Gradle构建系统。 要构建此项目,请使用“ gradlew build”命令或...
- 使用JavaMailAPI发送邮件时,应调用`Transport.send()`方法。 9. JSP转译阶段 - JSP在转译阶段会生成一个对应的Servlet源文件,扩展名为.java。 10. JSP特性 - JSP可以处理静态和动态内容,最终编译为Servlet...
4. 接收邮件方面,可以使用IMAP或POP3协议,通过`JavaMailAPI`创建监听器实时监控邮件。 5. 当接收到邮件时,提取附件,用Apache POI解析XLS文件,进行数据分析。 综上所述,Java通过JavaMail API和Apache POI库...