17. Java邮件开发(JavaMail)_第1页
17. Java邮件开发(JavaMail)_第2页
17. Java邮件开发(JavaMail)_第3页
17. Java邮件开发(JavaMail)_第4页
17. Java邮件开发(JavaMail)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaJava 邮件开发 邮件开发 JavaMailJavaMail 使用邮件发送的场景 新用户注册时的激活 Email 重置或找回密码时的确认 Email 会员生日的祝福 Email 活动 广告 Email 1 基本概念 基本概念 1 邮件服务器 邮件服务器 邮件服务器可以向用户提供邮件服务 想想 Web 应用服务器 数据库服务器 都是类似 的 它主要负责接收用户投递过来的邮件 并把邮件投递到邮件接收者的电子邮箱中 根据邮件服务器的功能不同 又分为发送服务器和接收服务器 后面还有 SMTP 服务器 POP3 服务器 2 电子邮箱 电子邮箱 电子邮箱其实就是用户在邮件服务器上申请的一个账户 邮件服务器会为这个账号分配一 定的空间 用户可以使用这个账户以及空间发送电子邮件及保存别人发送过来的电子邮件 3 邮件协议 邮件协议 邮件协议定义了发送和接收邮件所遵循的通信规则 包括 SMTP 协议 Simple Message Transfer Protocol 发送协议 默认端口号 25 SMTP 工作在两种情况下 一是电子邮件从客户端传输到服务器 二是从某一个服务 器传输到另一个服务器 见第 1 节图 SMTP 也是个请求 响应协议 请求和响应都是基 于 ASCII 文本 并以符 回车换行 结束 POP3 协议 Post Office Protocol 接收协议 默认端口号 110 接收协议还有 IMAP 4 电子邮件的发送过程图解 电子邮件的发送过程图解 模拟 lisi 与 wangwu 账户相互发送邮件 2 实验 通过 实验 通过 telnet 发送一封邮件发送一封邮件 1 动手实验 动手实验 通过在命令行发送一封邮件 来熟悉 SMTP 协议的工作过程 实验准备 实验准备 两个邮箱 发送和接收 本文图个方便 就准备了一个 模拟给自己发邮件 邮箱 flyne123 密码 www flyne org 对发邮件的邮箱账户名和密码进行 Base64 编码 账号 Zmx5bmUxMjM 密码 d3d3LmZseW5lLm9yZw 确保安装了 telnet 服务 win7 8 默认关闭 163 邮箱的 SMTP 服务器为 25 POP3 服务器为 110 实验步骤 实验步骤 步骤步骤操作操作备注备注 1进入命令行 2telnet 25远程连接 SMTP 服务器 端口号 25 3ehlo XXX向服务器打招呼 4auth login请求身份验证 5Zmx5bmUxMjM 6d3d3LmZseW5lLm9yZw 按照提示输入用户名和密码 Base64 编码 7mail from 用尖括号 8rcpt to rcpt recipient 收信人 9data开始编写 RFC822 文档 10from flyne123 11to flyne123 12subject this is a test email邮件主题 13空一行 14this is the content of the test email邮件正文 15 点 表示正文结束 16quit退出 注 操作过程中 如果有一点错误 就要从头开始 建议在记事本中写好 再复制粘贴 2 创建邮件详解 步骤 创建邮件详解 步骤 10 14 RFC822 文档 文档 该文档规定了如何编写一份简单邮件简单邮件 只有文本 如本实验 MIME 协议协议 MIME 协议是对 RFC822 文档的升级和补充 它描述了如何生成一封复杂邮件复杂邮件 通常 我们把 MIME 协议描述的邮件称之为 MIME 邮件 MIME 协议描述的数据称之为 MIME 消息消息 对于一封复杂邮件 如果包含了多个不同的数据 MIME 协议规定了要使用分割线对 多段数据进行分隔 MIME 协议常用头字段如下 Content type 对数据的类型 以及多个数据之间的关系进行描述 i 描述数据类型 描述数据类型 大类型 小类型 如 text html image jpg ii 描述数据的关系 描述数据的关系 如 multipart mixed multipart related Content Disposition 指定邮件阅读处理程序处理数据内容的方式 i inline 直接处理 如文本 ii attachment 当作附件处理 其后还可以指定 filename 属性表示文件名 如 Content Disposition attachment filename 1 jpg Content ID 用于为 multipart related 组合消息中的内嵌资源指定一个 ID 在 HTML 格式的正文中可以使用这个 ID 来引用该内嵌资源 例如 将一个表示内嵌图 片的 MIME 消息的 Content ID 头字段设置为 Content ID flyne logo gif 那么 在 HTML 正文中就需要使用如下 HTML 语句来引用该图片资源 下图是一封包含文本和图片的邮件的源文件 eml 除了发送复杂邮件时需要用到 MIME 协议 文件上传时表单数据也是通过 MIME 协议组织 的 见 文件上传 一文 3 Java 邮件开发 邮件开发 JavaMail 本文主要利用 JavaMail 创建 发送邮件 不讲邮件接收 1 核心 核心 API Message 抽象类 代表一封邮件 创建邮件时可使用其子类 MimeMessage MimeBodyPart 类 邮件体中的一个 Mime 消息 MimeMultiPart 类 由多个 Mime 消息组合而成的组合 Mime 消息 下图示例了如何将多个不同的 Mime 消息 文本 图片 附件 封装到邮件中 2 创建 发送邮件 创建 发送邮件 为了减少后面代码的篇幅 首先抽取公共部分 固定发件人和接收人 public class MailUtil private static Properties props new Properties private static Session session Session getInstance props static Props中配置的参数同发送邮件有关 仅创建邮件时可以不设置 props setProperty mail transport protocol smtp props setProperty mail host props setProperty mail smtp auth true 请求认证 public static MimeMessage createMessage String subject 创建MimeMessage对象 代表一封邮件 MimeMessage message new MimeMessage session 设置邮件头 try message setFrom new InternetAddress flyne123 message setRecipients Message RecipientType TO flyne123 message setSubject subject return message catch Exception e throw new RuntimeException e public static void sendMail Message message try Transport ts session getTransport ts connect flyne123 www flyne org ts sendMessage message message getAllRecipients catch Exception e throw new RuntimeException e 只有文本的邮件只有文本的邮件 public static void main String args throws Exception 创建message对象 已设置好邮件头 MimeMessage message MailUtil createMessage a mail just contains text 设置正文 邮件体 message setContent just contains text text html 保存并生成最终的邮件内容 message saveChanges 发送邮件 MailUtil sendMail message 顺便将邮件写到本地磁盘 只是看看效果 非必须 message writeTo new FileOutputStream C Users flyne Desktop 1 eml 文本中内嵌图片的邮件文本中内嵌图片的邮件 public static void main String args throws Exception MimeMessage message MailUtil createMessage a mail contains text 设置正文 文本部分 MimeBodyPart textPart new MimeBodyPart textPart setContent 美女图片 text text html charset UTF 8 设置正文 图片部分 MimeBodyPart imagePart new MimeBodyPart imagePart setContentID mm DataHandler是在JAF包中定义的 已集成到JDK1 6 中 DataHandler dh new DataHandler new FileDataSource src 0 jpg imagePart setDataHandler dh 设置正文 关联文本和图片到MimeMultipart MimeMultipart mp new MimeMultipart mp addBodyPart textPart mp addBodyPart imagePart mp setSubType related multipart related 设置正文 message setContent mp message saveChanges 发送邮件 MailUtil sendMail message message writeTo new FileOutputStream C Users flyne Desktop 2 eml 文本中内嵌图片和附件的邮件文本中内嵌图片和附件的邮件 最复杂 可参考核心 API 的图 public static void main String args throws Exception MimeMessage message MailUtil createMessage a mail contains text 设置正文 文本部分 MimeBodyPart textPart new MimeBodyPart textPart setContent 美女图片 text text html charset UTF 8 设置正文 图片部分 MimeBodyPart imagePart new MimeBodyPart imagePart setContentID mm DataHandler dh new DataHandler new FileDataSource src 0 jpg imagePart setDataHandler dh 设置正文 关联文本和图片 MimeMultipart mp new MimeMultipart mp addBodyPart textPart mp addBodyPart imagePart mp setSubType related 数据之间的关系 multipart related 设置正文 封装到BodyPart MimeBodyPart textImagePart new MimeBodyPart textImagePart setContent mp 设置正文 附件部分 MimeBodyPart attachmentPart new MimeBodyPart dh new DataHandler new FileDataSource src Account zip attachmentPart setDataHandler dh attachmentPart setFileName MimeUtility encodeText 账户表 zip 设 置附件名 设置正文 创建最终的邮件版本 MimeMultipart finalMp new MimeMultipart finalMp addBodyPart textImagePart finalMp addBodyPart attachmentPart finalMp setSubType mixed 设置正文 message setContent finalMp message saveChanges 发送邮件 MailUtil sendMail message message writeTo new FileOutputStream C Users flyne Desktop 3 eml 4 使用 使用 JNDI 管理管理 JavaMail 的的 session Session 对象包含同邮件服务器的网络连接信息 在创建 Message Transport 对象时均需要 可以在 JNDI 中配置同邮件服务器连接的 Session 关于 JNDI 的概念参考 数据库连接池 DataSource 一文 配置步骤如下 拷贝 mail

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论