使用JavaMail的Java邮件发送

时间:2022-05-25 19:00:15

简介:

当今时代,电子邮件在各大网站都是非常常见且应用非常的广泛,比喻在网站注册一个账号后,系统自动发送一个激活邮件,点击链接发送请求才能登录,以及通过邮件找回密码等等。本文将介绍使用java来发送邮件。

一、电子邮件协议

常用的电子邮件协议有SMTPPOP3IMAP4,它们都属TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143
建立连接。下面分别对其进行简单介绍


SMTP协议:

SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,
通过 它来 控制邮件的中转方式。 SMTP 协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP
服务器 就是 遵循SMTP协议的发送邮件服务器。SMTP认证, 简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP
服务器, 这就 使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

POP协议:

POP邮局协议负责从邮件服务器中检索电子邮件。主要作用是:从邮件服务器中检索邮件并从服务器中删除这个邮件;从邮
务器中检索邮件但不删除它;不检索邮件,只是询问是否有新邮件到达。POP协议支持多用户互联网邮件扩展,后者允许用户在
电子邮件上附带二进制文件,如文字处理文件和电子表格文件等,实际上这样就可以传输任何格式的文件了,包括图片和声音文件
等。


IMAP协议:

访问协议(IMAP)并且优于POP的新协议。和POP一样,IMAP也能下载邮件、从服务器中删除邮件或询问是否有新邮件,但
IMAP克服了POP的一些缺点。例如,
它可以决定客户机请求邮件服务器提交所收到邮件的方式,请求邮件服务器只下载所选中的邮件而不是全部邮件。

实例:

public static void sendMail(String to,String msg) throws Exception{


Properties prop = new Properties(); /** 创建连接对象,连接到邮件服务器**/
prop.setProperty("mail.host","smtp.163.com");/** 设置邮箱主机名 **/
prop.setProperty("mail.transport.protocol","smtp");/** 发送邮件协议名 **/
prop.setProperty("mail.smtp.auth","true");/** 发送服务器需要身份认证 **/
prop.setProperty("mail.smtp.timeou","3000");/** 发送邮件超时时间 **/

Session session = Session.getInstance(prop, passwordAuthentication());
Message message = new MimeMessage(session);/** 创建邮件对象 */
message.setFrom(new InternetAddress(USER_NAME)); /** 邮件发送者 */
message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(to)); /** 邮件接受者 */

// message.setRecipient(MimeMessage.RecipientType.CC,new InternetAddress(to)); /** 邮件接受者(抄送) */
// message.setRecipient(MimeMessage.RecipientType.BCC,new InternetAddress(to)); /** 邮件接受者(密送) */
message.setSentDate(new Date()); /**设置显示的发件时间*/

message.setSubject("欢迎注册battle<a href=''>点击激活</a>");
message.setText("激动地址:http://www.test.com/test?test=123");
//message.setContent("<h1>请点击链接进行激活<a href='localhost:8080/test'>点击激活</a></h1>", "text/html;charset=utf-8");
Transport.send(message);

}

private static Authenticator passwordAuthentication() {
return new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(USER_NAME, PASS_WORD);
}
};
}