JavaMail,自己给自己看得备忘录

JavaMail  SUN。。好吧,Oracle提供的电子邮件相关接口,随便写点备忘:

简介:

四个常用协议:SMTP、POP、IMAP、MIME

SMTP:帮每一台计算机找到下一个目标地址,发送和转发用得。

POP:邮局协议,用于电子邮件接收。邮件服务器上的邮件会在转发到客户端之后被删除。用TCP传输。是一个离线协议。

IMAP:因特网信息访问协议。消息存储在远程服务器上,通过客户端操作远程服务器。IMPA提供在线、离线、无连接三种形式。可以多台计算机共同访问维护一个邮箱 *也是主要用得。

MIME:多用途互联网邮件扩展? 好复杂的名字。用于指定是什么类型以及要用什么东西打开的那么一种东西。。(大概)不用管它。

注:J2EE.jar 包种包含javamail (也包含OneToMany。。。)

核心类:Session、Message、Address、Authenticator、Transport、Store、Folder。

Session:主要基于这个会话操作邮件。定义了基本的邮件会话。Session需要Properties来获取所需要的信息。类构造方法私有,所以用得时候需要调用getDefaultInstance(静态工厂方法)来获取Session实例。

Authenticator:抽象类,用于认证。

Properties props = new Properties();
//填充,比方说:
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
props.load(classLoader.getResourceAsStream("文件名.properties"));
//创建session  无授权的写法
Session sessionWithoutAuth = Session.getDefaultInstacne(props,null);
//有授权的写法
Session sessionWithAuth = Session.getDefaultInstance(props,new Authenticator(){
    //需要重写 getPasswordAuthentication() 方法,返回PasswordAuthentication对象。
    @Override
    protectrd PasswordAuthentication getPasswordAuthentication(){
        return new PasswordAuthentication(【用户名】,【密码】);
    }
});

好的,Session得到了。

Message:用户构造邮件信息体的抽象类。Sun提供了一个封装好的子类MimeMessage。信息头只能使用US-ASCII字符。有好多构造方法,最基本的只需要传入Session。

MimeMessage message = new MimeMessage(sessionWithAuth);

建立Message之后,需要填充邮件的各个部分:

小知识~  邮件包含哪些部分呢?

邮件头,邮件体(我猜的)

邮件头应该包含发件人、收件人、主题、时间、MIME版本、邮件内容类型等等。

邮件体应该就是邮件本身了。由Content_type域指出邮件体的类型。(比如说 text/plain,text/html 还有multipart之类的。)

具体暂时不表。。

第一步,设置邮件标题

message.setSubject(标题);

第二步,设置邮件来源

message.setFrom(new InternetAddress(邮件FROM));//不要在意那个InternetAddress....

第三部,设置收件人

有三个关键的东西(常量):

  • Message.RecipientType.TO 邮件接收者

  • Message.RecipientType.CC 邮件CC者

  • Message.RecipientType.BCC 邮件BCC者

这时候会用到邮件地址类Address

//也可以new一个Address类
//Address address = new InternetAddress("xxx@test.com")
//不过我比较懒,喜欢用InternetAddress.parse();
message.setRecipients(
    Message.RecipientType.TO, InternetAddress.parse("TO邮件地址",false);//别问我false是干嘛的
);
message.addRecipients(
    Message.RecipientType.CC, InternetAddress.parse("CC邮件地址",false);
);
message.addRecipients(
    Message.RecipientType.BCC, InternetAddress.parse("BCC邮件地址",false);
};

第四步,设置正文

简单的设置方法:

message.setContent("正文内容","text/plain");//等价于 message.setText("正文内容");

复杂一点的:

//添加文字
MimeBodyPart messagebodyPart = new MimeBodyPart();
message.BodyPart.setContent("正文","text/html: charset=utf-8");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messagebodyPart);
//添加文件:
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource("文件源");
messageBodyPart.setDataHandler(new DataHandler(source));
String fileName = new String("文件名");
messageBodyPart.setFileName(fileName);
multipart.addBodyPart(messageBodyPart);

//设置到Conotent中
message.setContent(multipart);


OK,标题和邮件体都搞定之后就可以开始发送了。

发送会用到这个类:

Transport

他提供了一个静态方法

Transprot.send(message);

当然也可以复杂一点:

Transport transport = sessionWithAuth.getTransoprt();
transport.connect();
transprot.sendMessage(message,message.getReciptients(Message.recipentType.TO));
transprot.close();//记得关是好习惯

发出去了。 收工。




转载于:https://my.oschina.net/u/1770057/blog/284050

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值