对于 JavaMail ,最基础的功能就是邮件的发送和接收,在这里,我先讲一讲邮件的发送。

在写具体的程序前,先讲一些概念。 1. 邮件的发送:如果你的邮件地址是 a@host.com ,而你要用这个邮箱发送一封邮件到 to@tohost.com ,这个发送过程是怎样的呢,你以为是先连接到 tohost.com 这服务器上,然后把邮件发送出去吗?其实不然。最初,你需要连接到服务器 host.com 上,当然这个连接可能需要认证,然后是发送邮件到服务器 host.com 上,关闭连接。在 host.com 上,你所发送的邮件进入发送队列中,轮到你要发送的邮件时, host.com 主机再联系 tohost.com ,将邮件传输到服务器 tohost.com 上。 2. 一些垃圾邮件的发送:在垃圾邮件中,可能大部分的发件人的地址都是假的,这是怎么回事呢?实际上在发送这些垃圾邮件的时候,这里的 host.com 有些特别,可能 host.com 不需要对用户进行认证,也可能发送垃圾邮件的人本来就控制着服务器 host.com ,然后控制着 host.com 向其他服务器,如 tohost.com ,发送邮件,而发送邮件的内容可以被控制,发件人的地址就可以随便填写。

发送邮件主要包括 3 个部分:创建连接,创建邮件体,发送邮件

JavaMail 中,是使用会话 (Session) 来管理连接的。创建一个连接,就需要创建一个会话。在会话中,有两个重要的因素,一是会话的属性,二是会话的认证。在我们使用 Hotmail 等邮件工具的时候,就要设置 ”SMTP 服务器身份验证 ,也就是这里的会话的认证。

 

 

首先,创建一个连接属性。

Properties props 
=   new  Properties();

props.put(
" mail.smtp.host " , " smtp.126.com " );   // 设置smtp的服务器地址是smtp.126.com

props.put(
" mail.smtp.auth " , " true " );           // 设置smtp服务器要身份验证。

 

 

在创建一个身份验证。身份验证稍微复杂一点,要创建一个 Authenticator 的子类,并重载 getPasswordAuthentication ()方法 , 代码如下:

class  PopupAuthenticator  extends  Authenticator  {

    
public  PasswordAuthentication getPasswordAuthentication()  {

        String username 
=   " cqhcp " // 126邮箱登录帐号

        String pwd 
=   " 12345 " // 登录密码

        
return   new  PasswordAuthentication(username, pwd);

    }


}


创建身份验证的实例:

PopupAuthenticator auth 
=   new  PopupAuthenticator();

 

创建会话 : 关于会话的创建,有两种方法,具体请参看后续的文章 , 这里只简单使用一种。

Session session = Session.getInstance(props, auth);

 

 

定义邮件地址 :

// 发送人地址

Address addressFrom = new InternetAddress("cqhcp@126.com", "George Bush");

// 收件人地址

Address addressTo = new InternetAddress("webmaster@javazy.com", "George Bush");

// 抄送地址

Address addressCopy = new InternetAddress("haocongping@gmail.com", "George Bush");

 

 

创建邮件体 :

message.setContent("Hello", "text/plain");// 或者使用 message.setText("Hello"); 更详细的信息请参看后续文章 .

message.setSubject("Title");

message.setFrom(addressFrom);

message.addRecipient(Message.RecipientType.TO,addressTo);

message.addRecipient(Message.RecipientType.CC,addressCopy);

message.saveChanges();

 

 

发送邮件的过程 :

Transport transport = session.getTransport("smtp");// 创建连接

transport.connect("smtp.126.com", "cqhcp", "12345");// 连接服务器

transport.send(message);// 发送信息

transport.close();// 关闭连接

 

 

整体程序的代码如下 :

class PopupAuthenticator extends Authenticator {

    public PasswordAuthentication getPasswordAuthentication() {

        String username = "cqhcp"; //163 邮箱登录帐号

        String pwd = "12345"; // 登录密码

        return new PasswordAuthentication(username, pwd);

    }

}

 

 

Properties props = new Properties();

props.put("mail.smtp.host","smtp.126.com");

props.put("mail.smtp.auth","true");

PopupAuthenticator auth = new PopupAuthenticator();

Session session = Session.getInstance(props, auth);

MimeMessage message = new MimeMessage(session);

           

Address addressFrom = new InternetAddress("cqhcp@126.com", "George Bush");

Address addressTo = new InternetAddress("webmaster@javazy.com", "George Bush");

Address addressCopy = new InternetAddress("haocongping@gmail.com", "George Bush");

 

message.setContent("Hello", "text/plain");// 或者使用 message.setText("Hello");

message.setSubject("Title");

message.setFrom(addressFrom);

message.addRecipient(Message.RecipientType.TO,addressTo);

message.addRecipient(Message.RecipientType.CC,addressCopy);

message.saveChanges();

 

Transport transport = session.getTransport("smtp");

transport.connect("smtp.126.com", "cqhcp", "12345");

transport.send(message);

transport.close();