0hi猿团提供了移动跨平台开发视频,包括html5,apicloud appcan,dcloud,具体请看http://www.9y.cm
邮件原理与JavaMail开发以及Base64Util
1.SMTP协议
Ehlo 主机名
auth login
mail from
rcpt to
Data .号代表邮件内容的结束
quit
手工使用SMTP协议发送邮件
2.Tip1: POP3协议
POP3协议
user<SP>username<CRLF>
pass<SP>password<CRLF>
stat<CRLF>
list<SP>[msg#]<CRLF>
retr<SP>msg#<CRLF> 最重要的一个命令
quit<CRLF>
使用POP3协议手工接收邮件
3.Tip2:RFC822文档
RFC822文档规定了如何编写一封简单邮件
邮件头和邮件体,两者使用空行分隔
邮件头
from字段
to字段
subject字段
cc、bcc字段
邮件体
邮件内容
冒充邮箱,编写欺骗邮件
4.Tip2:MIME协议
MIME协议规定了如何编写一封复杂邮件,MIME协议是对RFC822文档的升级和补充。
对于包含不同类型数据的复杂邮件,MIME协议对不同数据进行分隔,并使用Content-Type头字段描述数据类型、以及不同数据之间的关系。
数据类型
以“主类型/子类型”的形式出现,主类型有text、image、audio、video、application、multipart、message等,分别表示文本、图片、音频、视频、应用程序、组合结构、消息等。每个主类型下面都有多个子类型,例如text主类型包含plain、html、xml、css等子类型。
数据的关系
multipart/mixed、multipart/related、multipart/alternative
MIME协议描述的邮件称之为MIME邮件,MIME协议描述的数据也称之为MIME消息。
5.MIME协议中的其它常见头字段
Content-Disposition头字段Content-Disposition头字段用于指定邮件阅读程序处理数据内容的方式,有inline和attachment两种标准方式,inline表示直接处理,而attachment表示当作附件处理。如果将Content-Disposition设置为attachment,在其后还可以指定filename属性,如下所示: Content-Disposition: attachment; filename=“1.bmp” 上面的MIME头字段表示MIME消息体的内容为邮件附件,附件名“1.bmp”。
Content-ID头字段 Content-ID头字段用于为“multipart/related”组合消息中的内嵌资源指定一个唯一标识号,在HTML格式的正文中可以使用这个唯一标识号来引用该内嵌资源。例如,假设将一个表示内嵌图片的MIME消息的Content-ID头字段设置为如下形式: Content-ID: it315logo_gif 那么,在HTML正文中就需要使用如下HTML语句来引用该图片资源: <img src="cid:it315logo_gif"> 注意,在引用Content-ID头字段标识的内嵌资源时,要在资源的唯一标识号前面加上“cid:”,以说明要采用唯一标识号对资源进行引用。
6.使用JavaMail API收发邮件
JavaMail API按其功能划分通常可分为如下三大类:
创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。
发送邮件的API:Transport类是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。
接收邮件的API:Store类是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。
Session类
Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。
7.Base64Util
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import sun.misc.BASE64Encoder;
public class Base64Util
{
public static void main(String args[]) throws IOException
{
System.out.print("请输入用户名:");
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String userName = in.readLine();
System.out.print("请输入密码:");
String password = in.readLine();
BASE64Encoder encoder = new BASE64Encoder();
System.out.println("编码后的用户名为:"
+ encoder.encode(userName.getBytes()));
System.out.println("编码后的密码为:"
+ encoder.encode(password.getBytes()));
}
}
8.使用JavaMail发送一封简单的邮件:
创建包含邮件服务器的网络连接信息的Session对象。
创建代表邮件内容的Message对象。
创建Transport对象、连接服务器、发送Message、关闭连接。
public class SendMail {
public static void send(String[] args) throws Exception {
String from = "flx@flx.com";
String to = "flx@flx.com";
String subject = "玩一把";
String content = "uuuuuuuuuuuuuuuuuuu";
Properties prop = new Properties();
prop.setProperty("mail.smtp.host", "localhost");
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(prop);
session.setDebug(true);
Message message = createMessage(session,from,to,subject,content);
Transport ts = session.getTransport();
ts.connect("flx","123456");
ts.sendMessage(message, new InternetAddress[]{new InternetAddress(to)});
ts.close();
}
public static Message createMessage(Session session,String from,String to,String subject,String content) throws Exception{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject(subject);
message.setContent(content, "text/html");
message.saveChanges();
return message;
}
}