使用JavaMail的Java邮件发送

来源:互联网 发布:电子实验室软件 编辑:程序博客网 时间:2024/06/05 03:17

简介:

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