在开始Javamail开发之前,需要对邮件服务器和邮件传输协议有所了解。邮件服务器按功能可以分为SMTP服务器和POP3服务器。SMTP服务器用于向用户提供邮件发送功能,POP3服务器用于向用户提供邮件接收功能。搭建一台互联网邮件服务器,需要在DNS服务器上进行正向的A记录解析和反向的MX记录解析。
SMTP协议定义了邮件客户端软件与SMTP服务器之间,以及两台SMTP服务器之间的通讯规则。使用SMTP协议发送邮件需要6条命令:ehlo domain --打招呼;auth para --认证;mail from:reverse_path --发件人地址;rcpt to:forward_path --收件人地址;Data回车后输入邮件内容 ,.号代表邮件内容的结束;quit –退出.
下面来讲讲MIME协议:MIME协议是RFC822文档的升级和补充,MIME协议对不同数据进行分隔,并使用Content-Type头字段描述数据类型、以及不同数据之间的关系。Content-type分为描述数据类型和描述数据关系两种,例如:Content-type:multipart/related, Content-type:image/application.
MIME协议中Content-ID头字段用于为“multipart/related”组合消息中的内嵌资源指定一个唯一标识号,在HTML格式的正文中可以使用这个唯一标识号来引用该内嵌资源。例如,假设将一个表示内嵌图片的MIME消息的Content-ID头字段设置为如下形式:Content-ID: it315logo_gif那么,在HTML正文中就需要使用如下HTML语句来引用该图片资源:<img src="cid:it315logo_gif"> 注意,在引用Content-ID头字段标识的内嵌资源时,要在资源的唯一标识号前面加上“cid:”,以说明要采用唯一标识号对资源进行引用。
下面开始讲使用JavamailAPI来收发邮件:
使用JavamailAPI发送简单邮件的步骤:
1. 创建包含邮件服务器的网络连接信息的Session对象
2. 创建代表邮件内容的Message对象
3. 创建Transport对象、连接服务器、发送Message、关闭连接
下面爽一下,写一个JavamailAPI收发邮件的程序。
class SendMail {
public static void send(String[] args) throws Exception {
String from = "zyf@zyf.com";
String to = "zyf@zyf.com";
String subject = "javamail";
String content = "I love javamail";
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("zyf","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;
}
}