JavaMail邮件发送<一>
2017-03-01 00:00
375 查看
电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如果通过java代码来创建电子邮件,并连接邮件服务器发送邮件。
拓展->对常用电子邮件协议的简单介绍
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示意图如下:
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);
设置发件人,收件人,可选增加多个收件人,抄送人,密送人;
设置邮件的主题(标题);
设置邮件的正文(内容);
设置显示的发送时间;
保存到本地。
示例代码:
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); } }
相关文章推荐
- JavaMail邮件发送<二>
- Python基础<十八:SMTP发送邮件>
- <MessageUI/MessageUI.h>发送邮件
- spring利用javamail,quartz定时发送邮件 <转>
- javamail发送邮件(简单-->复杂)
- 2013/8/29 TP发送邮件 <技巧类>
- Mlue系列<三>发送邮件
- 发送接收邮件<转>
- <a href="mailto:">发送邮件
- 黑马程序员 高新技术<一> eclipse使用技巧,静态导入和枚举
- android 四大组件之--------------Service <一>
- STL分析-准备工作<一>
- SharpMap源码学习<一>
- 【详解】Python每小时脚本中---<取数据库函数>和<发邮件问题>
- MFC框架仿真<一>
- JavaMail - javax.mail.MessagingException 解决java邮件有时候发送失败的错误
- 潜移默化学会WPF(转载篇<一>)--WPF 遍历DataTemplate(获取所有控件)
- IKanalyzer中文分词源码分析<一>字典的数据结构
- 【javaMail】【1.基础发邮件】java mail 发送plain text 邮件 helloworld
- 【LaTeX排版】LaTeX使用--入门基础<一>