- 浏览: 114240 次
- 性别:
- 来自: 山东
文章分类
最新评论
-
ly5188:
大虾,例子少了些东西,
javax.mail.Messagin ...
支持邮件群发,多附件发送的javaMail代码 -
DepthJava:
请问楼主,你的就能全部解析?
目前还没找到完全解析的方法,很多 ...
javamail接收邮件的bean,可以正确的解析中文(转)(一)
mail.jar : http://java.sun.com/products/javamail/index.html 并添加到classpath即可.
activation.jar: http://java.sun.com/products/javabeans/glasgow/jaf.html 并添加到
classpath即可.
下面是发送邮件SendMail.java(含附件)代码:
//SendMail.java
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import javax.activation.*;
public class SendMail {
public static void send(String customMailBoxAddress,String username,String password,String serverMailBoxAddress,String subject,String attachmentPath,String attachmentName) {
//这里面使用新浪作为发送邮件的邮件服务器,其他的smtp服务器可以到相关网站上查到。
String host = "smtp.sina.com.cn";
//发送方邮箱地址(如BlogJava2006@blog.com.cn.)
String from = customMailBoxAddress;
//收件人邮箱地址
String to = serverMailBoxAddress;
//发送者的邮箱用户名
String user = username;
//发送者的邮箱密码
String ps = password;
Properties props = new Properties();
//设置发送邮件的邮件服务器的属性(这里使用新浪的smtp服务器)
props.put("mail.smtp.host", host);
//需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有//这一条)
props.put("mail.smtp.auth", "true");
//用刚刚设置好的props对象构建一个session
Session session = Session.getDefaultInstance(props);
//有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
//用(有的时候网络连通性不够好,发送邮件可能会有延迟,在这里面会有所//提示,所以最好是加上这句,避免盲目的等待)
session.setDebug(true);
//定义消息对象
MimeMessage message = new MimeMessage(session);
try{
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject(subject);
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
//设置邮件的文本内容
BodyPart contentPart = new MimeBodyPart();
contentPart.setText("邮件的具体内容在此");
multipart. addBodyPart(contentPart);
//添加附件
BodyPart attachmentPart= new MimeBodyPart();
DataSource source = new FileDataSource(attachmentPath);
attachmentPart.setDataHandler(new DataHandler(source));
//注意:下面定义的enc对象用来处理中文附件名,否则名称是中文的附//件在邮箱里面显示的会是乱码,
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
messageBodyPart.setFileName("=?GBK?B?"+enc.encode(attachmentName.getBytes())+"?=");
multipart.addBodyPart(messageBodyPart);
//将multipart对象放到message中
message.setContent(multipart);
//发送邮件
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(host, username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}catch(Exception e){
e.printStackTrace();
}
}
}ReceiveMail.java代码如下: import javax.mail.*;
import java.util.*;
import java.io.*;
public class ReceiveMail {
//处理任何一种邮件都需要的方法
private void handle(Message msg) throws Exception {
System.out.println("邮件主题:" + msg.getSubject());
System.out.println("邮件作者:" + msg.getFrom()[0].toString());
System.out.println("发送日期:" + msg.getSentDate());
}
//处理文本邮件
private void handleText(Message msg) throws Exception {
this.handle(msg);
System.out.println("邮件内容:"+msg.getContent());
}
//处理Multipart邮件,包括了保存附件的功能
private static void handleMultipart(Message msg) throws Exception {
String disposition;
BodyPart part;
Multipart mp = (Multipart) msg.getContent();
//Miltipart的数量,用于除了多个part,比如多个附件
int mpCount = mp.getCount();
for (int m = 0; m < mpCount; m++) {
this.handle(msg);
part = mp.getBodyPart(m);
disposition = part.getDisposition();
//判断是否有附件
if (disposition != null && disposition.equals(Part.ATTACHMENT))
{
//这个方法负责保存附件
saveAttach(part);
} else {
//不是附件,就只显示文本内容
System.out.println(part.getContent());
}
}
}
private static void saveAttach(BodyPart part) throws Exception {
//得到未经处理的附件名字
String temp = part.getFileName();
//除去发送邮件时,对中文附件名编码的头和尾,得到正确的附件名
//(请参考发送邮件程序SendMail的附件名编码部分)
String s = temp.substring(8, temp.indexOf("?="));
//文件名经过了base64编码,下面是解码
String fileName = base64Decoder(s);
System.out.println("有附件:" + fileName);
InputStream in = part.getInputStream();
FileOutputStream writer = new FileOutputStream(new File(
"保存附件的本地路径"+ "\\"+fileName));
byte[] content = new byte[255];
int read = 0;
while ((read = in.read(content)) != -1) {
writer.write(content);
}
writer.close();
in.close();
}
//base64解码
private static String base64Decoder(String s) throws Exception {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] b = decoder.decodeBuffer(s);
return (new String(b));
}
public static void receive(String receiverMailBoxAddress, String username,String password) {
//本人用的是yahoo邮箱,故接受邮件使用yahoo的pop3邮件服务器
String host = "pop.mail.yahoo.com.cn";
try {
//连接到邮件服务器并获得邮件
Properties prop = new Properties();
prop.put("mail.pop3.host", host);
Session session = Session.getDefaultInstance(prop);
Store store = session.getStore("pop3");
store.connect(host, username, password);
Folder inbox = store.getDefaultFolder().getFolder("INBOX");
//设置inbox对象属性为可读写,这样可以控制在读完邮件后直接删除该附件
inbox.open(Folder.READ_WRITE);
Message[] msg = inbox.getMessages();
FetchProfile profile = new FetchProfile();
profile.add(FetchProfile.Item.ENVELOPE);
inbox.fetch(msg, profile);
for (int i = 0; i < msg.length; i++) {
//标记此邮件的flag标志对象的DELETED位为true,可以在读完邮件后直接删除该附件,具体执行时间是在调用
//inbox.close()方法的时候
msg[i].setFlag(Flags.Flag.DELETED, true);
handleMultipart(msg[i]);
System.out.println("****************************");
}
if (inbox != null) {
//参数为true表明阅读完此邮件后将其删除,更多的属性请参考mail.jar的API
inbox.close(true);
}
if (store != null) {
store.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
对于解码应当使用sun的JavaMail中固有的包。
使用如下方法MimeUtility.decodeText(String s);
activation.jar: http://java.sun.com/products/javabeans/glasgow/jaf.html 并添加到
classpath即可.
下面是发送邮件SendMail.java(含附件)代码:
//SendMail.java
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import javax.activation.*;
public class SendMail {
public static void send(String customMailBoxAddress,String username,String password,String serverMailBoxAddress,String subject,String attachmentPath,String attachmentName) {
//这里面使用新浪作为发送邮件的邮件服务器,其他的smtp服务器可以到相关网站上查到。
String host = "smtp.sina.com.cn";
//发送方邮箱地址(如BlogJava2006@blog.com.cn.)
String from = customMailBoxAddress;
//收件人邮箱地址
String to = serverMailBoxAddress;
//发送者的邮箱用户名
String user = username;
//发送者的邮箱密码
String ps = password;
Properties props = new Properties();
//设置发送邮件的邮件服务器的属性(这里使用新浪的smtp服务器)
props.put("mail.smtp.host", host);
//需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有//这一条)
props.put("mail.smtp.auth", "true");
//用刚刚设置好的props对象构建一个session
Session session = Session.getDefaultInstance(props);
//有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使
//用(有的时候网络连通性不够好,发送邮件可能会有延迟,在这里面会有所//提示,所以最好是加上这句,避免盲目的等待)
session.setDebug(true);
//定义消息对象
MimeMessage message = new MimeMessage(session);
try{
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject(subject);
// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
Multipart multipart = new MimeMultipart();
//设置邮件的文本内容
BodyPart contentPart = new MimeBodyPart();
contentPart.setText("邮件的具体内容在此");
multipart. addBodyPart(contentPart);
//添加附件
BodyPart attachmentPart= new MimeBodyPart();
DataSource source = new FileDataSource(attachmentPath);
attachmentPart.setDataHandler(new DataHandler(source));
//注意:下面定义的enc对象用来处理中文附件名,否则名称是中文的附//件在邮箱里面显示的会是乱码,
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
messageBodyPart.setFileName("=?GBK?B?"+enc.encode(attachmentName.getBytes())+"?=");
multipart.addBodyPart(messageBodyPart);
//将multipart对象放到message中
message.setContent(multipart);
//发送邮件
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(host, username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}catch(Exception e){
e.printStackTrace();
}
}
}ReceiveMail.java代码如下: import javax.mail.*;
import java.util.*;
import java.io.*;
public class ReceiveMail {
//处理任何一种邮件都需要的方法
private void handle(Message msg) throws Exception {
System.out.println("邮件主题:" + msg.getSubject());
System.out.println("邮件作者:" + msg.getFrom()[0].toString());
System.out.println("发送日期:" + msg.getSentDate());
}
//处理文本邮件
private void handleText(Message msg) throws Exception {
this.handle(msg);
System.out.println("邮件内容:"+msg.getContent());
}
//处理Multipart邮件,包括了保存附件的功能
private static void handleMultipart(Message msg) throws Exception {
String disposition;
BodyPart part;
Multipart mp = (Multipart) msg.getContent();
//Miltipart的数量,用于除了多个part,比如多个附件
int mpCount = mp.getCount();
for (int m = 0; m < mpCount; m++) {
this.handle(msg);
part = mp.getBodyPart(m);
disposition = part.getDisposition();
//判断是否有附件
if (disposition != null && disposition.equals(Part.ATTACHMENT))
{
//这个方法负责保存附件
saveAttach(part);
} else {
//不是附件,就只显示文本内容
System.out.println(part.getContent());
}
}
}
private static void saveAttach(BodyPart part) throws Exception {
//得到未经处理的附件名字
String temp = part.getFileName();
//除去发送邮件时,对中文附件名编码的头和尾,得到正确的附件名
//(请参考发送邮件程序SendMail的附件名编码部分)
String s = temp.substring(8, temp.indexOf("?="));
//文件名经过了base64编码,下面是解码
String fileName = base64Decoder(s);
System.out.println("有附件:" + fileName);
InputStream in = part.getInputStream();
FileOutputStream writer = new FileOutputStream(new File(
"保存附件的本地路径"+ "\\"+fileName));
byte[] content = new byte[255];
int read = 0;
while ((read = in.read(content)) != -1) {
writer.write(content);
}
writer.close();
in.close();
}
//base64解码
private static String base64Decoder(String s) throws Exception {
sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
byte[] b = decoder.decodeBuffer(s);
return (new String(b));
}
public static void receive(String receiverMailBoxAddress, String username,String password) {
//本人用的是yahoo邮箱,故接受邮件使用yahoo的pop3邮件服务器
String host = "pop.mail.yahoo.com.cn";
try {
//连接到邮件服务器并获得邮件
Properties prop = new Properties();
prop.put("mail.pop3.host", host);
Session session = Session.getDefaultInstance(prop);
Store store = session.getStore("pop3");
store.connect(host, username, password);
Folder inbox = store.getDefaultFolder().getFolder("INBOX");
//设置inbox对象属性为可读写,这样可以控制在读完邮件后直接删除该附件
inbox.open(Folder.READ_WRITE);
Message[] msg = inbox.getMessages();
FetchProfile profile = new FetchProfile();
profile.add(FetchProfile.Item.ENVELOPE);
inbox.fetch(msg, profile);
for (int i = 0; i < msg.length; i++) {
//标记此邮件的flag标志对象的DELETED位为true,可以在读完邮件后直接删除该附件,具体执行时间是在调用
//inbox.close()方法的时候
msg[i].setFlag(Flags.Flag.DELETED, true);
handleMultipart(msg[i]);
System.out.println("****************************");
}
if (inbox != null) {
//参数为true表明阅读完此邮件后将其删除,更多的属性请参考mail.jar的API
inbox.close(true);
}
if (store != null) {
store.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
对于解码应当使用sun的JavaMail中固有的包。
使用如下方法MimeUtility.decodeText(String s);
发表评论
-
使用javamail的一些问题
2009-09-02 21:33 997今天用javamail做了一个发送邮件的功能.遇到了一系列的问 ... -
使用javamail api开发邮件服务系统时,常碰的中文乱码问题
2009-09-02 16:50 1733乱码是因为不同语系操作系统之间文字编码不通用造成的,可以用南极 ... -
javamail接收邮件的bean,可以正确的解析中文(转)(四)
2009-09-02 16:42 1390Pop3Bean.java是主要的代码 FileProper ... -
javamail接收邮件的bean,可以正确的解析中文(转)(三)
2009-09-02 16:35 1125//接上一文章 /** * 从folder中提取 ... -
javamail接收邮件的bean,可以正确的解析中文(转)(二)
2009-09-02 16:34 1119//接上一文章 /** * 获取日期显示格式 ... -
支持邮件群发,多附件发送的javaMail代码
2009-09-02 16:31 1859在网上找了半天才找到了一点比较满意的代码,但是不能直接拿来用, ... -
用JavaMail API编写可带附件的邮件发送程序
2009-09-02 16:30 1752用JavaMail API编写可带附 ... -
javamail接收邮件的bean,可以正确的解析中文(转)(一)
2009-09-02 16:23 1491这几天写的javamail项目中接收邮件和解析邮件的类,参考了 ... -
java电子邮件(四)JavaMail(JAVA邮件服务) API详解
2009-09-02 15:35 1451一、JavaMail API简介 JavaMa ... -
java电子邮件(三)
2009-09-02 15:33 1098最新的JavaMail 1.3.1增强了在国际化字符集的处理, ... -
java电子邮件(一)
2009-09-02 15:31 1417import java.io.UnsupportedEncod ...
相关推荐
#### 二、使用JavaMail收发Gmail邮件 在使用JavaMail进行Gmail邮件的收发时,需要注意几个关键点: 1. **SSL加密**: 为了确保数据的安全传输,通常会使用SSL加密技术。 2. **Gmail的SMTP和POP3设置**: - SMTP服务器...
JavaMail 是一个强大的开源库,专门用于在Java应用程序中实现电子邮件的发送和接收。它支持多种邮件协议,如SMTP(简单邮件传输协议)用于发送邮件,IMAP(因特网消息访问协议)和POP3(邮局协议)用于接收邮件。在...
在提供的压缩包文件“james+javaMail收发邮件”中,可能包含了示例代码和配置文件,供开发者参考和学习如何在实际项目中实现邮件收发功能,特别是处理中文内容和附件。通过理解和实践这些示例,开发者可以更好地掌握...
JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。它支持多种协议,如POP3(Post Office Protocol version 3)和IMAP(Internet Message Access Protocol),这两种协议常用于从邮件服务器...
JavaMail 是一个开源的 Java 库,用于处理电子邮件的发送和接收。它提供了一组 API,使得开发者可以方便地在 Java 应用程序中集成邮件功能。JavaMail 使用了 javax.mail 包,提供了多种协议(如 SMTP、POP3、IMAP)...
Java是一种广泛使用的编程语言,尤其在企业级应用中,它提供了强大的功能来处理XML文档和发送电子邮件。在本文中,我们将深入探讨Java如何实现XML的读写操作以及使用JavaMail API进行邮件收发。 首先,让我们看看...
JavaMail 是一个强大的开源类库,用于在Java应用程序中实现电子邮件的发送和接收。它提供了对SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等标准的全面支持,使得开发者可以方便地进行...
JavaMail API是Java平台上用于处理电子邮件的一组接口和类。它提供了一种标准的方式来访问邮件服务器,无论是发送还是接收邮件。JavaMail API包括了MIME(Multipurpose Internet Mail Extensions)支持,使得开发者...
JavaMail是一个开放源码的API,它为Java程序员提供了一套全面的接口来处理电子邮件。这个系统的设计目的是使得开发者能够方便地发送和接收邮件,包括附件、HTML内容以及MIME多部分消息。在毕业设计中,基于Javamail...
JavaMail 是一个开源库,广泛用于在Java应用程序中发送和接收电子邮件。在JSP(JavaServer Pages)中使用JavaMail可以实现动态的邮件服务功能,比如注册验证、密码重置等场景。本项目通过JavaMail API实现了邮件的...
JavaMail 是一个开源的 Java 库,用于处理电子邮件的发送和接收。这个“javaMail20090818151851.rar”压缩包可能包含了使用 JavaMail 进行邮件操作的示例代码和相关资源。在本文中,我们将深入探讨 JavaMail API 的...
【描述】:本文档详细介绍了如何使用JavaMail技术设计和实现一个电子邮件收发系统,涵盖了系统设计的目标、国内外发展趋势、技术选型、需求分析、详细设计以及功能实现和测试。 【标签】:互联网 【正文】: 基于...
这个"java收发邮件完整版"项目提供了一个完整的Java邮件发送和接收的解决方案,确保用户可以顺利地通过编程方式处理电子邮件。在这个压缩包中,可能包含了一个或多个Java源代码文件,例如"71112303梁洁"和"71112418...
JavaMail 是一个在Java平台上处理电子邮件的标准API,它允许开发者发送、接收和管理邮件消息。在JavaMail中,我们主要依赖几个关键库,包括activation.jar、commons-email-1.1.jar和mail.jar,这些库提供了丰富的...
JavaMail 是一个强大的开源库,专门用于在Java应用程序中处理电子邮件的发送和接收。它提供了丰富的API,使得开发者能够方便地实现SMTP(简单邮件传输协议)、POP3(邮局协议)和IMAP(因特网消息访问协议)等功能。...
Java邮件客户端是使用Java编程语言实现的用于发送和接收电子邮件的应用程序。在Java中,我们主要依靠JavaMail API(Java Mail Application Programming Interface)来处理邮件的收发功能,包括附件的处理。JavaMail ...
JavaMail 是一个用于在 Java 应用程序中发送和接收电子邮件的开源库。它提供了丰富的 API,使得开发者能够轻松地处理 SMTP、POP3 和 IMAP 协议。本篇文章将详细解析使用 JavaMail 收发邮件的基本步骤。 **1. 发送...
本教程将深入探讨如何使用JavaMail实现普通电子邮件以及带有附件的电子邮件的收发。 首先,要使用JavaMail,我们需要引入相关的依赖库,如`javax.mail`和`javax.mail-api`。这些库可以通过Maven或Gradle等构建工具...
基于Javamail的邮件收发系统是一款简单、方便、快捷的邮件系统。它能实现邮件的接收与发送,并能完成附件的传输,具有较好的人机交互性,易于使用。 开发环境:JDK1.6 + Windows平台 开发技术:Javamail 开发工具:...