请问那个知道怎么样利用JAVAMAIL来接收邮件,跟管理邮件,然后在JSP页面我要怎么做?希望那位高手能够提供帮助,最好有完整的列子代码!谢谢!实现成功的,马上给加分!
解决方案 »
- Java中的事件处理
- 一个面试题
- 线程的run()方法执行完毕后该如何重新start()?
- 请问,如何做垂直滚动文字
- 求救,我用Socket访问https,为什么readline()问题..
- 关于.java文件的存放?如何安排?
- HttpServletResponse 中能不能设置自动打开一个窗口? 如果不能,在jsp中怎么写?
- 怎么把邮件附件下载到本地。
- 关于用DataInputStream,DataOutputStream的read(),write()方法的问题(欢迎研究):
- 請教如何將textField設置為只能輸入數字.
- java怎么做试卷生成系统?
- JFileChooser能不能记住上次访问的路径
太长,分开贴了。 import java.io.*;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class WebMailBean implements HttpSessionBindingListener {
Session session = null;
String protocol = null;
String host = null;
int port = -1;
String user = null;
String defaultFrom = null;
Store store = null;
Folder[] folders = null;
String[] folderNames = null;
Folder currentFolder = null;
int currentMessageNumber = 0;
Message currentMessage = null;
//使用你选择的smtp服务器
public WebMailBean() {
Properties properties = System.getProperties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.host", "mail.yangnan.com");
session = Session.getInstance(properties, null);
// session.setDebug(true);
}
// 返回一个已安装协议的列表
public String[] getProtocols() {
Provider[] providers = session.getProviders();
List storeProtocols = new ArrayList();
for (int i = 0; i < providers.length; ++i) {
if (providers[i].getType() == Provider.Type.STORE) {
storeProtocols.add(providers[i].getProtocol());
}
}
return (String[]) storeProtocols.toArray(new String[0]);
}
// 属性设置方法
// 包括主机,协议,端口等
public void setProtocol(String protocol) {
if (this.protocol == null) {
this.protocol = protocol;
}
}
public String getProtocol() {
return this.protocol;
}
public void setHost(String host) {
if (this.host == null) {
this.host = host;
}
}
public String getHost() {
return this.host;
}
public void setPort(int port) {
if (this.port == -1) {
this.port = port;
}
}
public int getPort() {
return this.port;
}
//用户
public void setUser(String user) {
if (this.user == null) {
this.user = user;
}
}
public String getUser() {
return this.user;
}
//使用密码来初始化一个连接
public void setPassword(String password) throws MessagingException {
connect(password);
}
// 使用用户的名称和主机来初始化一个发送人地址
public String getFrom() {
if (defaultFrom == null) {
defaultFrom = user + "@" + host;
}
return defaultFrom;
}
void connect(String password) throws MessagingException {
if (store == null) {
store = session.getStore(protocol);
store.connect(host, port, user, password);
cacheFolders();
setFolder("INBOX");
}
}
// 在用户登录时判断是否仍然在连接中
public boolean isConnected() {
if (store != null) {
return store.isConnected();
}
return false;
}
// 关闭连接
void close() {
if (isConnected()) {
try {
//将所有打开的文件夹关闭
if (folders != null) {
for (int i = 0; i < folders.length; ++i) {
if (folders[i].isOpen()) {
folders[i].close(true);
}
}
}
if (store != null) {
store.close();
}
} catch (MessagingException e) {
// 异常的处理
}
}
}
// 对文件夹的操作进行缓存
void cacheFolders() throws MessagingException {
Folder defaultFolder = store.getDefaultFolder();
Folder[] childFolders = defaultFolder.list();
List availableFolders = new ArrayList();
for (int i = 0; i < childFolders.length; ++i) {
String folderName = childFolders[i].getName();
if (!folderName.startsWith(".")
&&!folderName.equalsIgnoreCase("INBOX")) {
availableFolders.add(childFolders[i]);
}
}
// 按照文件夹的名称进行排序
Collections.sort(availableFolders, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Folder) o1).getName()
.compareToIgnoreCase(((Folder) o2).getName());
}
});
// 将INBOX加到列表的第一的位置
Folder inbox = defaultFolder.getFolder("INBOX");
if (inbox.exists()) {
availableFolders.add(0, inbox);
}
folders = (Folder[]) availableFolders.toArray(new Folder[0]);
}
// 从缓存的数组中寻找文件夹
Folder findFolder(String folderName) {
for (int i = 0; i < folders.length; ++i) {
if (folders[i].getName().equals(folderName)) {
return folders[i];
}
}
return null;
}
public void setFolder(String folderName) throws MessagingException {
currentFolder = findFolder(folderName);
if ((!currentFolder.isOpen()) && (currentFolder.exists())
&& ((currentFolder.getType() & Folder.HOLDS_MESSAGES)
!= 0)) {
currentFolder.open(Folder.READ_WRITE);
}
currentMessageNumber = 0;
currentMessage = null;
}
// 得到当前文件夹名称
public String getFolderName() {
return currentFolder.getName();
}
//得到一个缓存文件夹名称数组
public String[] getFolderNames() {
String[] folderNames = new String[folders.length];
for (int i = 0; i < folders.length; ++i) {
folderNames[i] = folders[i].getName();
}
return folderNames;
}
//得到除当前文件夹以外的所有文件夹的名称
//以便用于信息在文件夹之间的转移
public String[] getOtherFolderNames() {
String[] folderNames = new String[folders.length - 1];
for (int i = 0, j = 0; i < folders.length; ++i) {
if (folders[i] != currentFolder) {
folderNames[j++] = folders[i].getName();
}
}
return folderNames;
}
// 返回当前文件夹中的信件数目
public int getMessageCount() throws MessagingException {
return currentFolder.getMessageCount();
}
//循环得到当前文件夹中未删除的信件
public boolean getNextMessage() throws MessagingException {
int messageCount = currentFolder.getMessageCount();
for (int i = currentMessageNumber + 1; i <= messageCount; ++i) {
Message nextMessage = currentFolder.getMessage(i);
if (!nextMessage.isSet(Flags.Flag.DELETED)) {
currentMessageNumber = i;
currentMessage = nextMessage;
return true;
}
}
return false;
}
// 设置信件编号,rest一下信件的指针。
public void setMessage(int messageNumber)
throws MessagingException {
if (messageNumber == 0) {
currentMessageNumber = messageNumber;
currentMessage = null;
} else {
currentMessageNumber = messageNumber - 1;
getNextMessage();
}
}
// 得到当前信件的编号
public int getMessageNumber() {
return currentMessage.getMessageNumber();
}
// 得到当前信件发送时间,转为字符串格式
public String getMessageSentDate() throws MessagingException {
Date sentDate = currentMessage.getSentDate();
if (sentDate != null) {
return sentDate.toString();
} else {
return "Date unknown";
}
}
// 得到信件的发送地址和回复地址。
public String getMessageFrom() throws MessagingException {
Address[] addresses = currentMessage.getFrom();
if (addresses == null) {
addresses = currentMessage.getReplyTo();
}
if (addresses.length > 0) {
return addresses[0].toString();
}
return "";
}
// 得到信件的回复地址。在地址数组中的第一个地址。
public String getMessageReplyTo() throws MessagingException {
Address[] addresses = currentMessage.getReplyTo();
if (addresses.length > 0) {
return addresses[0].toString();
}
return "";
}
public String getMessageTo() throws MessagingException {
Address[] addresses =
currentMessage.getRecipients(Message.RecipientType.TO);
if (addresses != null && addresses.length > 0) {
return addresses[0].toString();
}
return "";
}
// 得到信件主题
public String getMessageSubject() throws MessagingException {
String subject = currentMessage.getSubject();
if (subject == null) {
subject = "";
}
return subject;
}
//得到信件的大小
public String getMessageSize() throws MessagingException {
String size = "?";
int bSize = currentMessage.getSize();
if (bSize != -1) {
if (bSize >= 1024 * 1024) {
int mbSize = bSize / (1024 * 1024);
size = mbSize + " MB";
} else if (bSize >= 1024) {
int kbSize = bSize / 1024;
size = kbSize + " KB";
} else {
size = bSize + " Bytes";
}
}
return size;
}
// 得到信件的内容
public String getMessageText()
throws IOException, MessagingException {
String text = currentMessage.getContentType();
if (currentMessage.isMimeType("text/*")) {
text = (String) currentMessage.getContent();
} else if (currentMessage.isMimeType("multipart/*")) {
Multipart multipart = (Multipart) currentMessage.getContent();
BodyPart firstPart = multipart.getBodyPart(0);
if (firstPart.isMimeType("text/*")) {
text = (String) firstPart.getContent();
}
}
return text;
}
// 返回一个信件列表
// 主要用于多封信件的发送,删除,转移等
Message[] findMessages(String[] messageNumbers)
throws MessagingException {
if (messageNumbers != null) {
List messageList = new ArrayList();
for (int i = 0; i < messageNumbers.length; ++i) {
int messageNumber = 0;
try {
messageNumber = Integer.parseInt(messageNumbers[i]);
} catch (NumberFormatException e) {
messageNumber = 0;
}
if (messageNumber > 0) {
messageList.add(currentFolder.getMessage(messageNumber));
}
}
return (Message[]) messageList.toArray(new Message[0]);
}
return new Message[0];
}
// jsp调用时根据得到的命令参数来进行处理。
public void doCommand(HttpServletRequest request)
throws MessagingException {
String command = request.getParameter("command");
String[] messageNumbers = request.getParameterValues("number");
String toFolderName = request.getParameter("to");
Folder toFolder = findFolder(toFolderName);
//进行复制处理
if ("Copy".equalsIgnoreCase(command)) {
if (toFolder != null) {
Message[] messages = findMessages(messageNumbers);
currentFolder.copyMessages(messages, toFolder);
}
} else if ("Move".equalsIgnoreCase(command)) {//转移信件到别的文件夹
if (toFolder != null) {
Message[] messages = findMessages(messageNumbers);
currentFolder.copyMessages(messages, toFolder);
currentFolder.setFlags(messages,
new Flags(Flags.Flag.DELETED), true);
}
} else if ("Delete".equalsIgnoreCase(command)) {//删除信件
Message[] messages = findMessages(messageNumbers);
currentFolder.setFlags(messages, new Flags(Flags.Flag.DELETED),
true);
} else if ("Send".equalsIgnoreCase(command)) {//发送信件
//得到数据
//发送人地址
//发送地址
//抄送地址
//暗送地址
//主题
//内容
//回复(如果是回复信件的话,得到原信件的编号)
defaultFrom = request.getParameter("from");
String to = request.getParameter("to");
String cc = request.getParameter("cc");
String bcc = request.getParameter("bcc");
String subject = request.getParameter("subject");
String text = request.getParameter("text");
String reply = request.getParameter("reply");
Message message = null;
int replyNumber = 0;
try {
replyNumber = Integer.parseInt(reply);
} catch (NumberFormatException e) {}
if (replyNumber > 0) {
message = currentFolder.getMessage(replyNumber).reply(false);
} else {
message = new MimeMessage(session);
}
message.setFrom(new InternetAddress(defaultFrom));
if (to != null) {
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
}
if (cc != null) {
message.setRecipients(Message.RecipientType.CC,
InternetAddress.parse(cc));
}
if (bcc != null) {
message.setRecipients(Message.RecipientType.BCC,
InternetAddress.parse(bcc));
}
message.setSubject(subject);
message.setText(text);
Transport.send(message);
}
}
// 因扩展HttpSessionBindingListener接口所以必须实现valueBound,valueUnbound方法
public void valueBound(HttpSessionBindingEvent event) {}
public void valueUnbound(HttpSessionBindingEvent event) {
close();
}
}
http://jakarta.apache.org/commons/email/
import java.util.Properties;import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;public class SendMail {
private static MailAuthenticator autherticator=null;
public static void main(String[] args) {
for (int i=0;i<5;i++){
String from="[email protected]";
String to="[email protected]";
String smtpServer="smtp.163.com";
String subject="Hello ,this is a email Test!!";
String content ="Welcome to you!!";
Properties props = System.getProperties();
props.put("mail.smtp.host", smtpServer);
props.put("mail.smtp.auth","true");
autherticator = new MailAuthenticator("[email protected]","xtsaiyy");
Session session = Session.getDefaultInstance(props,autherticator);
MimeMessage msg = new MimeMessage(session);
try{
msg.setFrom(new InternetAddress(from));
msg.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(to));
msg.setSubject(subject);
msg.setSentDate(new Date());
msg.setText(content);
Transport.send(msg);
System.out.println("成功发送邮件......");
}catch(Exception se){
se.printStackTrace();
}
}
}
}
//现在的大部分的邮件服务器都要求有身份验证,所以需要此类实现验证功能
class MailAuthenticator extends Authenticator{
private String username = null;
private String userpasswd = null;
public MailAuthenticator(){}
public MailAuthenticator(String username,String userpasswd){
this.username = username;
this.userpasswd = userpasswd;
}
public void setUserName(String username){
this.username = username;
}
public void setPassword(String password){
this.userpasswd = password;
}
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication(username,userpasswd);
}
}
http://jakarta.apache.org/commons/email/
http://jakarta.apache.org/commons/email/ Commons Email aims to provide a API for sending email.
Commons 只是用于发送邮件