您的位置:首页 > 编程语言 > Java开发

JavaMail邮件发送<一>

2017-03-01 00:00 375 查看
电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如果通过java代码来创建电子邮件,并连接邮件服务器发送邮件。

1. 电子邮件协议

电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所有本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。

拓展->对常用电子邮件协议的简单介绍

1.1、STMP

SMTP称为简单邮件传输协议(Simple Mail Transfer Protocal),目标是向用户提供高效、可靠的邮件传输。它的一个重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送。通常它工作在两种情况下:一是邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器。SMTP是一个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。

SMTP的连接和发送过程

(a)建立TCP连接

(b)客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令;

服务器端正希望以OK作为响应,表明准备接收

(c)客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行;

服务器端则表示是否愿意为收件人接收邮件

(d)协商结束,发送邮件,用命令DATA发送

(e)以.表示结束输入内容一起发送出去

(f)结束此次发送,用QUIT命令退出

实例:

C: telent SMTP.163.com 25 //以telenet方式连接163邮件服务器

S: 220 163.com Anti-spam GT for Coremail System //220为响应数字,其后的为欢迎信息

C: HELO SMTP.163.com //除了HELO所具有的功能外,EHLO主要用来查询服务器支持的扩充功能

S: 250-mail

S: 250-AUTH LOGIN PLAIN

S: 250-AUTH=LOGIN PLAIN

S: 250 8BITMIME //最后一个响应数字应答码之后跟的是一个空格,而不是'-'

C: AUTH LOGIN //请求认证

S: 334 dxNlcm5hbWU6 //服务器的响应——经过base64编码了的“Username”=

C: Y29zdGFAYW1heGl0Lm5ldA== //发送经过BASE64编码了的用户名

S: 334 UGFzc3dvcmQ6 //经过BASE64编码了的"Password:"=

C: MTk4MjIxNA== //客户端发送的经过BASE64编码了的密码

S: 235 auth successfully //认证成功

C: MAIL FROM: bripengandre@163.com //发送者邮箱

S: 250 … . //“…”代表省略了一些可读信息

C: RCPT TO: bripengandre@smail.hust.edu.cn //接收者邮箱

S: 250 … . // “…”代表省略了一些可读信息

C: DATA //请求发送数据

S: 354 Enter mail, end with "." on a line by itself

C: Enjoy Protocol Studing

C: .

S: 250 Message sent

C: QUIT //退出连接

S: 221 Bye

1.2、POP3

POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。

协议特性

POP3协议默认端口:110

POP3协议默认传输协议:TCP

POP3协议适用的构架结构:C/S

POP3协议的访问模式:离线访问

POP3示意图如下:



2、创建一封简单的电子邮件

JAVA邮件发送的大致过程是这样的:

1、构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法。此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利。

2、构建一个properties文件,该文件中存放SMTP服务器地址等参数。

3、通过构建的properties文件和javax.mail.Authenticator具体类来创建一个javax.mail.Session。Session的创建,就相当于登录邮箱一样。剩下的自然就是新建邮件。

4、构建邮件内容,一般是javax.mail.internet.MimeMessage对象,并指定发送人,收信人,主题,内容等等。

5、使用javax.mail.Transport工具类发送邮件。

Other>>>>>>>>

首先创建一个 Java 工程,把下载好的 javax.mail.jar 作为类库加入工程,这里不多说。

邮件创建步骤:

创建一个邮件对象(MimeMessage);

设置发件人,收件人,可选增加多个收件人,抄送人,密送人;

设置邮件的主题(标题);

设置邮件的正文(内容);

设置显示的发送时间;

保存到本地。

示例代码:

import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class JavaMailTest {

public static void main(String[] args) throws AddressException,
MessagingException {
// 配置发送邮件的环境属性
final Properties props = new Properties();
/*
* 可用的属性: mail.store.protocol / mail.transport.protocol / mail.host /mail.user / mail.from
*/
// 表示SMTP发送邮件,需要进行身份验证
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.163.com");
// 发件人的账号
props.put("mail.user", "#########@163.com");
// 访问SMTP服务时需要提供的密码
props.put("mail.password", "############");
// 构建授权信息,用于进行SMTP进行身份验证
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password); // 返回需要进行验证的用户名和密码
}
};
// 使用环境属性和授权信息,创建邮件会话
Session mailSession = Session.getInstance(props, authenticator);
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
// 设置发件人
InternetAddress form = new InternetAddress(props.getProperty("mail.user"));
message.setFrom(form);
// 设置收件人
InternetAddress to = new InternetAddress("########@qq.com");
message.setRecipient(RecipientType.TO, to);
// 设置邮件标题
message.setSubject("这是测试邮件");
// 设置邮件的内容体
message.setContent("Java Mail,小试牛刀~", "text/html;charset=UTF-8");
// 发送邮件
Transport.send(message);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: