您的位置:首页 > 编程语言 > Java开发

学习JavaMail

2016-02-25 20:20 513 查看

概念

1.JavaMail

JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft
Outlook的应用程序。
虽然JavaMail是Sun的API之一,但它目前还没有被加在标准的java开发工具包中(Java
Development Kit),这就意味着你在使用前必须另外下载Jav
aMail文件。除此以外,你还需要有Sun的JavaBeans
Activation Framework (JAF)。JavaBeans Activation Framework的运行很复杂,在这里简单的说就是JavaMail的运行必须得依赖于它的支持

2.JavaMail写邮件常用到的类和常用方法

Session, MimeMessage, Message , Properties, Address

代码实例

//例子中没有抄送人
//代码中的邮箱名,邮箱密码,邮件服务器的名字都换成了xxxx,(因为我用公司的邮箱,不能写出来,你换成qq或163的就行了)
//代码显然写的不完善,因为公司电脑不能带走,先穿上来,后面会完善代码。。。
//邮箱的应用可以在忘记密码,做密码验证,也可以注册时间的注册验证。

package
mail;

import java.util.Date;

import java.util.Properties;

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.NoSuchProviderException;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.AddressException;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeBodyPart;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMultipart;

/**

 * 1.该类用于测试JavaMail发送邮件,普通的文本邮件,带有内嵌资源的邮件,带有附件的资源,带有抄送人(多个),收件人(多个),发件人(多个)--这个要考虑下

 * 2.发送邮件要用到的类是Properties, Session, MimeMessage, Address, Message

 * @param args

 */

public class SendMali_final1 {
//换成可以用的邮箱
private final static String FORM = "xxxxx@xx.com.cn";//发件人邮箱
private final static String TO = "xxxx@xxx.com.cn";//收件人邮箱

//获得发送邮件的session会话
public Session getSession(){
Properties pro = new Properties();
pro.setProperty("mail.transport.protocol", "smtp");
//我这个用的是公司的邮箱,如果你的是其他的就换成其他的邮箱服务器
pro.setProperty("mail.smtp.host", "xxxx");//用那个服务器就换那个
pro.setProperty("mail.smtp.auth", "true");//其实这个还不太清楚是干嘛的呀??
Session
session = Session.getInstance(pro);
return session;
}

//发送普通的文本的邮件
public void sendMailText() throws Exception{
//获得会话
Session session = getSession();//SendMali_final1.getSession();为啥这样不行呢?
//写邮件对象
MimeMessage msg = new MimeMessage(session);

msg.setFrom(new InternetAddress(FORM));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));//设置收件人地址有几个方法,有什么区别呢?
msg.setSubject("文本邮件-测试javaMail");
msg.setContent("文本邮件的内容,都是纯文本邮件!!1234567jlkjlk", "text/html;charset=gbk");
msg.setSentDate(new Date());

//发送邮件

transport_mail(session,msg);

}

//发送带有图片资源的邮件
public void sendMailWithPicture() throws Exception{
//获得会话
Session session = getSession();//SendMali_final1.getSession();为啥这样不行呢?
//写邮件对象
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(FORM));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));//设置收件人地址有几个方法,有什么区别呢?
msg.setSubject("图片邮件-测试javaMail");

//文字信息
MimeBodyPart textpart = new MimeBodyPart();
textpart.setContent("这是一封邮件正文带图片<img src='cid:tupianid'>的邮件", "text/html;charset=UTF-8");
//图片信息--MimeBodyPart,  MimeMultipart
MimeBodyPart picpart = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("D:\\Files-my\\Photos\\colors.jpg"));
picpart.setDataHandler(dh);
picpart.setContentID("tupianid");

//描述数据关系
MimeMultipart mm = new MimeMultipart("related");
mm.addBodyPart(textpart);
mm.addBodyPart(picpart);

//邮件对象设置邮件的内容
msg.setContent(mm);
msg.saveChanges();

//发送邮件--Transport

transport_mail(session,msg);

}

//发送带有附件的邮件
public void sendMailwithMid() throws Exception{

//获得会话
Session session = getSession();//SendMali_final1.getSession();为啥这样不行呢?
//写邮件对象
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(FORM));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));//设置收件人地址有几个方法,有什么区别呢?
msg.setSubject("附件邮件-测试javaMail");

//文字信息
MimeBodyPart textpart = new MimeBodyPart();
textpart.setContent("这是一封邮件带有附件的", "text/html;charset=UTF-8");
//附件信息--图片附件
MimeBodyPart attach = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("D:\\Files-my\\Photos\\colors.jpg"));
attach.setDataHandler(dh);
attach.setFileName(dh.getName());  //这个地方是和发送图片不一样的地方,其他附件和图片是一样的
//文本文档附件
MimeBodyPart attach1 = new MimeBodyPart();
DataHandler dh1 = new DataHandler(new FileDataSource("D:\\Files-my\\Photos\\test.txt"));
attach1.setDataHandler(dh1);
attach1.setFileName(dh1.getName());  //这个地方是和发送图片不一样的地方,其他附件和图片是一样的
//doc附件
/*MimeBodyPart attach2 = new MimeBodyPart();
DataHandler dh2 = new DataHandler(new FileDataSource("D:\\Files-my\\Photos\\CMS组前端开发规范.doc"));
attach2.setDataHandler(dh2);
attach2.setFileName(dh2.getName());  //这个地方是和发送图片不一样的地方,其他附件和图片是一样的

*/
//描述数据关系
MimeMultipart mm = new MimeMultipart("mixed");
mm.addBodyPart(textpart);
mm.addBodyPart(attach);
mm.addBodyPart(attach1);
//mm.addBodyPart(attach2);

//邮件对象设置邮件的内容
msg.setContent(mm);
msg.saveChanges();

transport_mail(session,msg);
 
 
}
//发送图片,附件,文本资源的邮件
public void sendEmail_all() throws Exception{

//获得会话
Session session = getSession();//SendMali_final1.getSession();为啥这样不行呢?
//写邮件对象
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(FORM));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));//设置收件人地址有几个方法,有什么区别呢?
msg.setSubject("附件邮件-测试javaMail");

//文字信息
MimeBodyPart textpart = new MimeBodyPart();
textpart.setContent("这是一封邮件正文带图片<img src='cid:tupianid'>的邮件", "text/html;charset=UTF-8");
//图片信息--MimeBodyPart,  MimeMultipart
MimeBodyPart picpart = new MimeBodyPart();
DataHandler dh = new DataHandler(new FileDataSource("D:\\Files-my\\Photos\\colors.jpg"));
picpart.setDataHandler(dh);
picpart.setContentID("tupianid");
//附件1
MimeBodyPart attach1 = new MimeBodyPart();
DataHandler dh1 = new DataHandler(new FileDataSource("D:\\Files-my\\Photos\\test.txt"));
attach1.setDataHandler(dh1);
attach1.setFileName(dh1.getName());  //这个地方是和发送图片不一样的地方,其他附件和图片是一样的
//附件2
MimeBodyPart attach2 = new MimeBodyPart();
DataHandler dh2 = new DataHandler(new FileDataSource("D:\\Files-my\\Photos\\colors.jpg"));
attach2.setDataHandler(dh2);
attach2.setFileName(dh2.getName());  //这个地方是和发送图片不一样的地方,其他附件和图片是一样的

//描述数据关系
//正文和图片
MimeMultipart mm1 = new MimeMultipart("related");
mm1.addBodyPart(textpart);
mm1.addBodyPart(picpart);

//正文和附件
MimeMultipart mm2 = new MimeMultipart("mixed");
mm1.addBodyPart(attach1);
mm1.addBodyPart(attach2);

//代表正文
MimeBodyPart content = new MimeBodyPart();
content.setContent(mm1);
mm2.addBodyPart(content);

//邮件对象设置邮件的内容
msg.setContent(mm2);
msg.saveChanges();

transport_mail(session,msg);

}

//发送邮件
public void transport_mail(Session session,MimeMessage msg) throws Exception{
Transport tran = session.getTransport();
tran.connect("xxxx", "xxx", "xxxx");
tran.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));//为啥不能用send方法呢?
tran.close();
}

public static void main(String[] args) throws Exception {

SendMali_final1 sender = new SendMali_final1();
//sender.sendMailText();  //发送文本类的邮件
//sender.sendMailWithPicture();//发送带有内嵌资源(图片)的邮件
//sender.sendMailwithMid();//发送带有附件的邮件
sender.sendEmail_all();//发送综合的邮件
}

}

引用文章

http://www.cnblogs.com/xdp-gacl/p/4216311.html
http://www.360doc.com/content/14/0306/17/16088576_358273704.shtml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: