SMTP:(Simple Mail Transfer Protocol,简单邮件传输协议)发邮件协议;
POP3:(Post Office Protocol Version 3,邮局协议第3版)收邮件协议;
IMAP:(Internet Message Access Protocol,因特网消息访问协议)收发邮件协议,我们的课程不涉及该协议。
其实每个邮件服务器都由SMTP服务器和POP3服务器构成,其中SMTP服务器负责发邮件的请求,而POP3负责收邮件的请求。
当然,有时我们也会使用163的账号,向126的账号发送邮件。这时邮件是发送到126的邮件服务器,而对于163的邮件服务器是不会存储这封邮件的。
这里列出只为讲述常规名称格式,具体参考各自官网。
163:smtp.163.com和pop3.163.com;
126:smtp.126.com和pop3.126.com;
sohu:smtp.sohu.com和pop3.sohu.com;
sina:smtp.sina.com和pop3.sina.com。
Java Mail是由SUN公司提供的专门针对邮件的API,主要Jar包:mail.jar、activation.jar。
java mail中主要类:javax.mail.Session、javax.mail.internet.MimeMessage、javax.mail.Transport。
Session:表示会话,即客户端与邮件服务器之间的会话!想获得会话需要给出账户和密码,当然还要给出服务器名称。在邮件服务中的Session对象,就相当于连接数据库时的Connection对象。
MimeMessage:表示邮件类,它是Message的子类。它包含邮件的主题(标题)、内容,收件人地址、发件人地址,还可以设置抄送和暗送,甚至还可以设置附件。
Transport:用来发送邮件。它是发送器!
在使用telnet发邮件时,还需要自己来处理Base64编码的问题,但使用JavaMail就不必理会这些问题了,都由JavaMail来处理。
Session session = Session.getInstance(Properties prop, Authenticator auth);
其中prop最少需要指定两个键值,一个是指定服务器主机名,另一个是指定是否需要认证!我们使用smtp服务器,当然需要认证!
Properties prop = new Properties();
prop.setProperty(“mail.host”, “smtp.163.com”);//设置服务器主机名
prop.setProperty(“mail.smtp.auth”, “true”);//设置需要认证
*特别注意,如果使用QQ邮箱,因为QQ邮箱使用了SSL,所以这里需要增加一下配置项
“mail.smtp.socketFactory.class”,“javax.NET.ssl.SSLSocketFactory“;
“mail.smtp.port”, “465”
“mail.smtp.socketFactory.port”, “465”
*
其中Authenticator是一个接口表示认证器,即校验客户端的身份。我们需要自己来实现这个接口,实现这个接口需要使用账户和密码。
Authenticator auth = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication () {
new PasswordAuthentication(“ittest”, “123456”);//用户名和密码
}
};
通过上面的准备,现在可以获取得Session对象了:
Session session = Session.getInstance(prop, auth);
创建MimeMessage需要使用Session对象来创建:
MimeMessage msg = new MimeMessage(session);
然后需要设置发信人地址、收信人地址、主题,以及邮件正文。
msg.setFrom(new InternetAddress(“[email protected]”));//设置发信人
msg.addRecipients(RecipientType.TO, “[email protected],[email protected]”);//设置多个收信人
msg.addRecipients(RecipientType.CC, “[email protected],[email protected]”);//设置多个抄送
msg.addRecipients(RecipientType.BCC, ”[email protected]”);//设置暗送
msg.setSubject(“这是一封测试邮件”);//设置主题(标题)
msg.setContent(“当然是hello world!”, “text/plain;charset=utf-8”);//设置正文
Transport.send(msg);//发送邮件
以上是JvaMail基本使用方法。
另外,如果要发送附件
如果想发送带有附件邮件,那么需要设置邮件的内容为MimeMultiPart。
MimeMulitpart parts = new MimeMulitpart();//多部件对象,可以理解为是部件的集合
msg.setContent(parts);//设置邮件的内容为多部件内容。
如果要查看JavaMail运行信息,则加上
session.setDebug(true)