怎样才算比较完整的Javamail操作指南?我想应该包括绝大多数基本的email操作能够应付一般的应用在本指南中主要囊括了以下内容
● 发送email包括文本邮件HTML邮件带附件的邮件SMTP验证
● 接收emailpop远程连接收取不同MIME的邮件处理附件
我想有了上述功能的介绍应该可以应付很多email的相关应用了首先需要配置环境需要的包是mailjar和activationjar高版本的JSDK EE自带
一 邮件的发送
下面了弄个发邮件的Hello World热热身
/*************
Name:TextMailSenderjava
Author:Bromon
Version:
Date:
Note:发送email到
需要安装SMTP服务器
*************/
package orgbromonmail;
import javaxmail*;
import javaxmailinternet*;
import javautil*;
public class TextMailSender
{
public static void main(String args[])
{
try
{
Properties prop=new Properties();
//指定要使用的SMTP
服务器为bromonk
propput(mailsmtphostbromonk);
Session mailSession=SessiongetDefaultInstance(prop);
//发件人地址
InternetAddress from=new InternetAddress(
bromon@bromonk);
//收件人地址
InternetAddress to=new InternetAddress(
);
MimeMessage msg=new MimeMessage(mailSession);
msgsetFrom(from);
msgaddRecipient(
javaxmailMessageRecipientTypeTOto);
//发信日期
msgsetSentDate(new javautilDate());
//title
msgsetSubject(你好);
//邮件正文
msgsetText(hellobromon);
Transportsend(msg);
}catch(Exception e)
{
Systemoutprintln(e);
}
}
}
程序很简单但是它是不能运行的除非你的机器上安装了一个SMTP服务器而且你的机器还叫做bromonk写这么一段不能执行的程序不是因为其他一些原因而是想让各位对javamail有个基本印象下面演示的是如何通过sohu等email服务商提供的免费邮箱来发邮件基本操作和上面的一样只是多一个SMTP验证而已
/*
* Created on
*/
package orgbromonmail;
import javaxmail*;
import javautil*;
import javaxmailinternet*;
/**
* @author Bromon
*/
public class SenderWithSMTPVer
{
String host=;
String user=;
String password=;
public void setHost(String host)
{
thishost=host;
}
public void setAccount(
String userString password)
{
thisuser=user;
thispassword=password;
}
public void send(String fromString to
String subjectString content)
{
Properties props = new Properties();
propsput(mailsmtphost host);
//指定SMTP服务器
propsput(mailsmtpauth true);
//指定是否需要SMTP验证
try
{
Session mailSession = SessiongetDefaultInstance(props);
mailSessionsetDebug(true);
//是否在控制台显示debug信息
Message message=new MimeMessage(mailSession);
messagesetFrom(new InternetAddress(from));
//发件人
messageaddRecipient(MessageRecipientTypeTO
new InternetAddress(to));
//收件人
messagesetSubject(subject);
//邮件主题
messagesetText(content);
//邮件内容
messagesaveChanges();
Transport transport = mailSessiongetTransport(smtp);
nnect(host user password);
transportsendMessage(message messagegetAllRecipients());
transportclose();
}catch(Exception e)
{
Systemoutprintln(e);
}
}
public static void main(String args[])
{
SenderWithSMTPVer sm=new SenderWithSMTPVer();
smsetHost();
//指定要使用的邮件服务器
smsetAccount(abc);
//指定帐号和密码
/*
* @param String 发件人的地址
* @param String 收件人地址
* @param String 邮件标题
* @param String 邮件正文
*/
smsend(标题内容);
}
}
这段程序好像也不需要解释了吧把SMTP地址帐号密码等配置信息写到Properties里面Java里面很多API都需要这么干比如再程序中加入对代理服务器的支持等上面的程序修改一下服务器地址帐号密码就可以使用非常简单
如何发送一个HTML格式的Email呢?也很简单再邮件正文中写入HTML代码然后指定邮件的ContentType就OK下面只给出关键代码
………
MimeMessage msg=new MimeMessage(mailSession);
msgsetContent(contenttext/html);
msgsetText(<html><body><h>下面的你们好吗?</body></html>);
………
下面是发送带有附件的email稍微复杂一点而且和前面的程序有一些不同请仔细一点同时需要一点IO的知识相同的代码就不再列出只写关键部分
import javaxmail*;
import javaxmailinternet*;
import javaxactivation*;
import javautil*;
………
MimeMessage msg=
new MimeMessage(mailSession);
msgsetSentDate(new Date());
msgsetSubject(hello);
MimeBodyPart textBodyPart=new MimeBodyPart();
textBodyPartsetText(邮件正文);
MimeBodyPart fileBodyPart=new MimeBodyPart();
FileDataSource fds=new FileDataSource(GISrar);
//要发送的附件
fileBodyPartsetDataHandler(new DataHandler(fds));
fileBodyPartsetFileName(fdsgetName());
Multipart container=new MimeMultipart();
containeraddBodyPart(textBodyPart);
containeraddBodyPart(fileBodyPart);
msgsetContent(container);
Transportsend(msg);
…………
二 邮件的收取
通常情况下我们都使用pop协议来收邮件IMAP现在就不涉及了用一个程序就可以基本包括了收邮件的功能邮件大致可以分三种纯文本邮件含有其他数据的文本邮件含有附件的邮件
/*
* Created on
*/
package orgbromonmail;
import javaxmail*;
import javautil*;
import javaio*;
/**
* @author Bromon
*/
public class Receiver
{
Folder inbox;
Store store;
//连接邮件服务器获得所有邮件的列表
public Message[] getMail(
String hostString nameString password) throws Exception
{
Properties prop=new Properties();
propput(mailpophosthost);
Session session=SessiongetDefaultInstance(prop);
store=sessiongetStore(pop);
nnect(hostnamepassword);
inbox=storegetDefaultFolder()getFolder(INBOX);
inboxopen(FolderREAD_ONLY);
Message[] msg=inboxgetMessages();
FetchProfile profile=new FetchProfile();
profileadd(FetchProfileItemENVELOPE);
inboxfetch(msgprofile);
return(msg);
}
//处理任何一种邮件都需要的方法
private void handle(Message msg) throws Exception
{
Systemoutprintln(邮件主题:+msggetSubject());
Systemoutprintln(
邮件作者:+msggetFrom()[]toString());
Systemoutprintln(发送日期:+msggetSentDate());
}
//处理文本邮件
public void handleText(Message msg) throws Exception
{
thishandle(msg);
Systemoutprintln(邮件内容:+msggetContent());
}
//处理Multipart邮件包括了保存附件的功能
public void handleMultipart(Message msg) throws Exception
{
String disposition;
BodyPart part;
Multipart mp=(Multipart)msggetContent();
int mpCount=mpgetCount();
//Miltipart的数量用于除了多个part比如多个附件
for(int m=;m&