对于
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();
|