邮件基础知识
1 邮件客户端
-Foxmail
-OutLook(Express,Microsoft outLook)
- Thunderbind(linux平台)
2 邮件服务端
-Microsoft ExchangServer
- IBM Lotus Notes
- SendMail Qmail,james
3 主要协议
- 发送端口25,接收端口110
- 发送SMTP,Simple Mail Transfer Proctol
- 接收 Pop3,PostOffice protocol3(POP)
4 接收 IMAP,Internet Message Access Protocol IMAP4
-摘要浏览
-选择下载附件
-多文件夹
-网络硬盘
5 邮件格式
-RFC822邮件格式,邮件头,文字邮件正文
-MIME,图片,音频,视频
6 邮件编码
-纯英文邮件,ASCII编码,7bit
8Bit编码 – BASE64,6个bit, A-Za-z0-9+/ – Quoted-printable,对每个非ASCII字 符用“=“加上这个字符的十六进制编码.
7 JAVA邮件发送的依赖包
com.sun.main
javax.mail
1.6.2
8 主要类
-session:邮件会话 和httpsession不通
- store:邮件存储空间
- Folder:邮件文件夹
- Message 电子邮件
- Address邮件地址
- Transport发送协议类
9 邮件报文体封装
(1) 发送报文体封装
package messages;
import java.io.FileOutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class AttachmentMessage
{
public static MimeMessage generate() throws Exception
{
String from = "***********@qq.com "; // 发件人地址
String to = "*******************@qq.com"; // 收件人地址
String subject = "多附件邮件"; //邮件主题
String body = "<a href=http://www.ecnu.edu.cn>" +
"欢迎大家访问我们的网站</a></br>";
// 创建Session实例对象
Session session = Session.getDefaultInstance(new Properties());
// 创建MimeMessage实例对象
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
message.setSubject(subject);
//message.setRecipients("MimeMessage.RecipientType.CC", new InternetAddress("ee@receive.com", "USER_EE", "UTF-8"));
//创建代表邮件正文和附件的各个MimeBodyPart对象
MimeBodyPart contentPart = createContent(body);
MimeBodyPart attachPart1 = createAttachment("c:/temp/ecnu4.jpg");
MimeBodyPart attachPart2 = createAttachment("c:/temp/ecnu5.jpg");
//创建用于组合邮件正文和附件的MimeMultipart对象
MimeMultipart allMultipart = new MimeMultipart("mixed");
allMultipart.addBodyPart(contentPart);
allMultipart.addBodyPart(attachPart1);
allMultipart.addBodyPart(attachPart2);
//设置整个邮件内容为最终组合出的MimeMultipart对象
message.setContent(allMultipart);
message.saveChanges();
//message.writeTo(new FileOutputStream("e:/ComplexMessage.eml"));
return message;
}
public static MimeBodyPart createContent(String body) throws Exception
{
MimeBodyPart htmlBodyPart = new MimeBodyPart();
htmlBodyPart.setContent(body,"text/html;charset=gb2312");
return htmlBodyPart;
}
public static MimeBodyPart createAttachment(String filename) throws Exception
{
//创建保存附件的MimeBodyPart对象,并加入附件内容和相应信息
MimeBodyPart attachPart = new MimeBodyPart();
FileDataSource fds = new FileDataSource(filename);
attachPart.setDataHandler(new DataHandler(fds));
attachPart.setFileName(fds.getName());
return attachPart;
}
}
(2) text格式的报文体封装
package messages;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.FileOutputStream;
public class TextMessage {
public static MimeMessage generate() throws Exception {
String from = "***********@qq.com "; // 发件人地址
String to = "*******************@qq.com"; // 收件人地址
String subject = "test";
String body = "您好,这是来自一封qq的测试邮件";
// 创建Session实例对象
Session session = Session.getDefaultInstance(new Properties());
// 创建MimeMessage实例对象
MimeMessage message = new MimeMessage(session);
// 设置发件人
message.setFrom(new InternetAddress(from));
// 设置收件人
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// 设置发送日期
message.setSentDate(new Date());
// 设置邮件主题
message.setSubject(subject);
// 设置纯文本内容的邮件正文
message.setText(body);
// 保存并生成最终的邮件内容
message.saveChanges();
// 把MimeMessage对象中的内容写入到文件中
//msg.writeTo(new FileOutputStream("e:/test.eml"));
return message;
}
}
(3)发送邮件
package tools;
import javax.mail.*;
import java.util.*;
import messages.*;
public class MailClientSend {
private Session session;
private Transport transport;
private String username = "lychen@sei.ecnu.edu.cn";
private String password = "1234567899";
private String smtpServer = "webmail.ecnu.edu.cn";
public void init()throws Exception
{
//设置属性
Properties props = new Properties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.class", "com.sun.mail.smtp.SMTPTransport");
props.put("mail.smtp.host", smtpServer); //设置发送邮件服务器
props.put("mail.smtp.port", "25");
props.put("mail.smtp.auth", "true"); //SMTP服务器需要身份验证
// 创建Session对象
session = Session.getInstance(props,new Authenticator(){ //验账账户
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
session.setDebug(true); //输出跟踪日志
// 创建Transport对象
transport = session.getTransport();
}
public void sendMessage()throws Exception{
//创建一个邮件
//Message msg = TextMessage.generate();
//Message msg = HtmlMessage.generate();
Message msg = AttachmentMessage.generate();
//发送邮件
transport.connect();
transport.sendMessage(msg, msg.getAllRecipients());
//打印结果
System.out.println("邮件已经成功发送");
}
public void close()throws Exception
{
transport.close();
}
public static void main(String[] args)throws Exception {
MailClientSend client=new MailClientSend();
//初始化
client.init();
//发送邮件
client.sendMessage();
//关闭连接
client.close();
}
}
10 将邮件设为定时任务进行发送
结合java的定时器,进行邮件发送