Java Email文件传输
前言
传统的邮件是通过邮局投递,然后从一个邮局到另一个邮局,最终到达用户的邮箱。电子邮件的发送过程也是类似的,只不过是电子邮件是从用户电脑的邮件软件,发送到服务器上,可能要经过若干个邮件服务器的中转,最终到达对方邮件服务器上,接受方就可以用软件接受邮件:
┌─────────┐ ┌─────────┐ ┌─────────┐│░░░░░░░░░│ │░░░░░░░░░│ │░░░░░░░░░│
┌───────┐ ├─────────┤ ├─────────┤ ├─────────┤ ┌───────┐
│░░░░░░░│ │░░░░░░░░░│ │░░░░░░░░░│ │░░░░░░░░░│ │░░░░░░░│
├───────┤ ├─────────┤ ├─────────┤ ├─────────┤ ├───────┤
│ │───>│O ░░░░░░░│───>│O ░░░░░░░│───>│O ░░░░░░░│<───│ │
└───────┘ └─────────┘ └─────────┘ └─────────┘ └───────┘MUA MTA MTA MDA MUA
邮件协议
MTA和MDA这样的服务器软件通常是现成的,我们通常不会关心这些邮件服务器的内部 是如何运行的。更多的需求场景,是需要发送邮件。例如:促销商品邮件、验证码邮件、消息通知邮件等。常见的邮件协议有:POP3、SMTP、IMAP。
SMTP
SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP服务器就是遵循SMTP协议的发送邮件服务器。SMTP认证,简单地说就是要求必须在提供账号和密码之后才可以登录SMTP服务器,这就使得那些垃圾邮件的散播者无可乘之机。
IMAP
IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端 上的操作都会反馈到服务器上,如:删除 邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器东路邮箱或者客户端软件登录邮箱,看到的邮箱以及状态又是一致的。
准备SMTP登录信息
常见邮件的服务商的SMTP信息:
QQ邮箱:SMTP服务器是smtp.qq.com,端口是465/587
163邮箱:SMTP服务器是smtp.qq.com,端口是465/587
126邮箱:SMTP服务器是smtp.126.com,端口是25
Gmail邮箱:SMTP服务器是smtp.gmail.com,端口是465/587
准备好SMTP登录信息后,我们首先要把JavaMail相关的Jar包javax.mail-1.6.2.jar加入至当前项目。
然后,通过JavaMail API连接到SMTP服务器上:以25端口为例,连接SMTP服务器时,需要准备一个Properties对象,填入相关信息,最后获取Session实例时,如果服务器需要认证,还需要传入一个Authenticator对象,并返回指定的用户名和口令。当我们获取到Session实例后,打开调试模式可以看到SMTP通信的详细内容,便于调试。
String smtp = "smtp.126.com";//用户名和密码String userName = "hai2280525303@163.com";String password = "2280525303YWHywh";//SMTP服务器的连接信息Properties props = new Properties();props.put("mail.smtp.host", smtp);props.put("mail.smtp.port", "25");props.put("mail.smtp.auth", true);props.put("mail.smtp.starttls.enable", "true");Session session = Session.getInstance(props,new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(userName, password);}});session.setDebug(true);System.out.println(session);
发送邮件
发送邮件时,我们需要构造一个Message对象,然后调用Transport.send(Message)即可完成发送:绝大多数邮件服务器要求发送方地址和登录用户名必须一致,否则发送将失败。
try {//创建SessionSession session = JavaMailUtils.creatSession();//创建右键对象(Message抽象类的子类对象)MimeMessage msg = new MimeMessage(session);//设置发送方msg.setFrom(new InternetAddress("hai2280525303@163.com"));//设置接收方地址msg.setRecipient(RecipientType.TO, new InternetAddress("2280525303@qq.com"));//设置邮件主题 msg.setSubject("测试邮件","utf-8");Multipart multipart = new MimeMultipart();//正文BodyPart textPart = new MimeBodyPart();textPart.setText("他日若遂凌云志","utf-8");Transport.send(msg);} catch (MessagingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
发送HTML邮件
发送HTML邮件和文本邮件类似,只需要把:
message.setText(body, "UTF-8");
改为:
message.setText(body, "UTF-8", "html");
传入的body是类似<h1>Hello</h1><p>HI,xxx</p>这样的HTML字符串即可。
发送邮件
try {//创建SessionSession session = JavaMailUtils.creatSession();//创建右键对象(Message抽象类的子类对象)MimeMessage msg = new MimeMessage(session);msg.setFrom(new InternetAddress("hai2280525303@163.com"));msg.setRecipient(RecipientType.TO, new InternetAddress("2280525303@qq.com"));msg.setSubject("测试邮件","utf-8");//邮件正文中包含有html标签//msg.setText("天若有情天亦<b>老</b>!","utf-8","html");Multipart multipart = new MimeMultipart();//正文BodyPart textPart = new MimeBodyPart();textPart.setContent("他日若遂<b>凌云志</b>","text/html;charset = utf-8");//附件BodyPart imagePart = new MimeBodyPart();imagePart.setFileName("girl.jpg");imagePart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("C:\\Users\\admin\\Desktop\\aaa\\1657264617271.jpg")), "application/octet-stream")));//添加正文multipart.addBodyPart(textPart);//添加附件multipart.addBodyPart(imagePart);//设置文件内容msg.setContent(multipart);//发送Transport.send(msg);} catch (MessagingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}
Java Email文件传输相关推荐
- java p2p文件传输_P2P文件传输软件的设计与实现
摘要:本系统是在深入了解P2P技术和JAVA实现平台的基础上,设计实现的基于JAVA的P2P文件传输软件,在局域网内实现点对点的文件传输功能.本系统的优点是在一个网络内每个Windows平台的客户机只 ...
- java rmi 文件传输_JAVA-RMI实现大文件传输
在使用java-rmi的过程中,必然会遇到一个文件上传的问题,由于在rmi中无法传输文件流(比如rmi中的方法参数不能是FileInputStream之类的),那么我们只好选择一种折中的办法,就是先用 ...
- java编程文件传输_JAVA文件传输程序
源代码已经上传了. 第3章 设计文档 3.1 任务概述 本项任务要开发一款P2P文件传输软件,该软件可以在局域网和互连上使用,具有文件传输,断点续传,多线程连接等功能. 3.1. ...
- Java pdf文件传输_java中pdf文件的管理(pdf文件转png文件,base64传输文件以及删除)...
org.apache.pdfbox pdfbox 2.0.12 影像文件转为base64编码使用java自带的BASE64Encoder类 代码部分: 前端上传文件的保存: @RequestMappi ...
- java 局域网文件拷贝文件_局域网使用Java进行文件传输
package com.herley; /** * * 客户端 */ import java.io.File; import java.io.FileInputStream; import java. ...
- android java服务器文件传输_java – 使用FTPS将文件从android传输到服务器
您可以尝试以下代码,我希望它也适用于您的情况. 该代码使用Apache Commons vsf2通过安全ftp连接(SFTP)上传文件 try { String filepath = "&q ...
- java 打文件传输超时_java I/O 一次批量插入保存文件,导致超时问题?
可以用ExecutorService 这个类,下面是一个用线程池时候下计算文件夹大小的例子,可以参考下 package cq.price; import java.io.File; import ja ...
- java p2p文件传输_基于java的p2p实现文件共享和传输
展开全部 C++ Socket网络编程大全 1.简单服务器 //#include //#pragma comment(lib,"WS2_32.lib") WSADATA sServ ...
- java对于文件传输时---编码格式的一些设置方法
- ----转 读文件: BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够 ...
最新文章
- Cisco 2950 忘记密码如何重设
- 内核代号101 — 动手写自己的内核
- 2225!全国电厂名单大全
- Verilog定义计算位宽的函数clogb2
- 血型算法php,血型排行榜!(真的很准)
- linux隐藏tomcat版本_Ubuntu 14.04隐藏Tomcat-7.0.52的版本号与操作系统类型
- 探索服务设计的深层定义
- 【直观理解】粒子滤波 原理及实现
- stm32基本入门(一)
- [20151014]关于result cache.txt
- linux文件传输阻塞了,Linux 中的read系统调用到底是阻塞还是非阻
- 数字电路基础知识——时序逻辑电路之存储器(SRAM、DRAM、ROM)
- PS一键飞溅碎片特效的插件
- 基于MATLAB的AM信号调制解调代码,代码)基于MATLAB的AM调制解调系统仿真报告
- 走进全球互联网中枢,顶级域名服务器的分布
- 【clickhouse踩坑记录】clusters表中分片副本的浅析
- 第十一届Java B组蓝桥杯真题
- html背景斜线,巧妙的实现 CSS 斜线(炫酷的小效果)
- FL Studio 20音乐制作教程
- 解决Google-Chrome浏览器无法打开Kubernetes-K8S-Dashboard页面