前言

传统的邮件是通过邮局投递,然后从一个邮局到另一个邮局,最终到达用户的邮箱。电子邮件的发送过程也是类似的,只不过是电子邮件是从用户电脑的邮件软件,发送到服务器上,可能要经过若干个邮件服务器的中转,最终到达对方邮件服务器上,接受方就可以用软件接受邮件:

             ┌─────────┐    ┌─────────┐    ┌─────────┐│░░░░░░░░░│    │░░░░░░░░░│    │░░░░░░░░░│
┌───────┐    ├─────────┤    ├─────────┤    ├─────────┤    ┌───────┐
│░░░░░░░│    │░░░░░░░░░│    │░░░░░░░░░│    │░░░░░░░░░│    │░░░░░░░│
├───────┤    ├─────────┤    ├─────────┤    ├─────────┤    ├───────┤
│       │───>│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文件传输相关推荐

  1. java p2p文件传输_P2P文件传输软件的设计与实现

    摘要:本系统是在深入了解P2P技术和JAVA实现平台的基础上,设计实现的基于JAVA的P2P文件传输软件,在局域网内实现点对点的文件传输功能.本系统的优点是在一个网络内每个Windows平台的客户机只 ...

  2. java rmi 文件传输_JAVA-RMI实现大文件传输

    在使用java-rmi的过程中,必然会遇到一个文件上传的问题,由于在rmi中无法传输文件流(比如rmi中的方法参数不能是FileInputStream之类的),那么我们只好选择一种折中的办法,就是先用 ...

  3. java编程文件传输_JAVA文件传输程序

    源代码已经上传了. 第3章      设计文档 3.1       任务概述 本项任务要开发一款P2P文件传输软件,该软件可以在局域网和互连上使用,具有文件传输,断点续传,多线程连接等功能. 3.1. ...

  4. Java pdf文件传输_java中pdf文件的管理(pdf文件转png文件,base64传输文件以及删除)...

    org.apache.pdfbox pdfbox 2.0.12 影像文件转为base64编码使用java自带的BASE64Encoder类 代码部分: 前端上传文件的保存: @RequestMappi ...

  5. java 局域网文件拷贝文件_局域网使用Java进行文件传输

    package com.herley; /** * * 客户端 */ import java.io.File; import java.io.FileInputStream; import java. ...

  6. android java服务器文件传输_java – 使用FTPS将文件从android传输到服务器

    您可以尝试以下代码,我希望它也适用于您的情况. 该代码使用Apache Commons vsf2通过安全ftp连接(SFTP)上传文件 try { String filepath = "&q ...

  7. java 打文件传输超时_java I/O 一次批量插入保存文件,导致超时问题?

    可以用ExecutorService 这个类,下面是一个用线程池时候下计算文件夹大小的例子,可以参考下 package cq.price; import java.io.File; import ja ...

  8. java p2p文件传输_基于java的p2p实现文件共享和传输

    展开全部 C++ Socket网络编程大全 1.简单服务器 //#include //#pragma comment(lib,"WS2_32.lib") WSADATA sServ ...

  9. java对于文件传输时---编码格式的一些设置方法

    - ----转 读文件: BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够 ...

最新文章

  1. Cisco 2950 忘记密码如何重设
  2. 内核代号101 — 动手写自己的内核
  3. 2225!全国电厂名单大全
  4. Verilog定义计算位宽的函数clogb2
  5. 血型算法php,血型排行榜!(真的很准)
  6. linux隐藏tomcat版本_Ubuntu 14.04隐藏Tomcat-7.0.52的版本号与操作系统类型
  7. 探索服务设计的深层定义
  8. 【直观理解】粒子滤波 原理及实现
  9. stm32基本入门(一)
  10. [20151014]关于result cache.txt
  11. linux文件传输阻塞了,Linux 中的read系统调用到底是阻塞还是非阻
  12. 数字电路基础知识——时序逻辑电路之存储器(SRAM、DRAM、ROM)
  13. PS一键飞溅碎片特效的插件
  14. 基于MATLAB的AM信号调制解调代码,代码)基于MATLAB的AM调制解调系统仿真报告
  15. 走进全球互联网中枢,顶级域名服务器的分布
  16. 【clickhouse踩坑记录】clusters表中分片副本的浅析
  17. 第十一届Java B组蓝桥杯真题
  18. html背景斜线,巧妙的实现 CSS 斜线(炫酷的小效果)
  19. FL Studio 20音乐制作教程
  20. 解决Google-Chrome浏览器无法打开Kubernetes-K8S-Dashboard页面

热门文章

  1. AI创业哪家强?6大选择给你方向!
  2. 美国证监会暂停香港设立的区块链公司的股票交易
  3. 李建忠设计模式——桥模式
  4. 战地五多计算机登录账户,玩战地5电脑配置要求
  5. linux下IIC驱动解释
  6. 3dmax入门 | 学3d建模必备软件技能基础教学
  7. 存在即合理-开发语言
  8. 分享151个ASP源码,总有一款适合您
  9. java spi 扩展_【扩展和解耦】JAVA原生SPI实现插件扩展
  10. php7.4配置文件,Centos8中php7.4安装,附配置文件及常用命令