与HTTP协议相同,收发邮件也是需要有传输协议的。

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。

JavaMail

JavaMail概述

Java Mail是由SUN公司提供的专门针对邮件的API,主要Jar包:mail.jar、activation.jar。

JavaMail中主要类

java mail中主要类:javax.mail.Session、javax.mail.internet.MimeMessage、javax.mail.Transport。

Session:表示会话,即客户端与邮件服务器之间的会话!想获得会话需要给出账户和密码,当然还要给出服务器名称。在邮件服务中的Session对象,就相当于连接数据库时的Connection对象。

MimeMessage:表示邮件类,它是Message的子类。它包含邮件的主题(标题)、内容,收件人地址、发件人地址,还可以设置抄送和暗送,甚至还可以设置附件。

Transport:用来发送邮件。它是发送器!

JavaMail牛刀小试

在使用telnet发邮件时,还需要自己来处理Base64编码的问题,但使用JavaMail就不必理会这些问题了,都由JavaMail来处理。

第一步:获得Session

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对象

创建MimeMessage需要使用Session对象来创建:

MimeMessage msg = new MimeMessage(session);

然后需要设置发信人地址、收信人地址、主题,以及邮件正文。

msg.setFrom(new InternetAddress(“it@163.com”));//设置发信人
msg.addRecipients(RecipientType.TO, “it_cx@qq.com,it_xu@sina.com”);//设置多个收信人
msg.addRecipients(RecipientType.CC, “it_xie@sohu.com,it_yang@126.com”);//设置多个抄送
msg.addRecipients(RecipientType.BCC, ”ithq@hotmail.com”);//设置暗送
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)