前言

电子邮件(electronic mail,简称E-mail,标志:@)又称电子信箱、电子邮政,它是—种用电子手段提供信息交换的通信方式。电子邮件指用电子手段传送信件、单据、资料等信息的通信方法。电子邮件综合了电话通信和邮政信件的特点,它传送信息的速度和电话一样快,又能象信件一样使收信者在接收端收到文字记录。电子邮件系统又称基于计算机的邮件报文系统。

我们熟悉的邮件软件比如Outlook、网易闪电邮、Foxmail都是用来收发邮件的。当然,使用Java程序也可以收发电子邮件。

邮件发送

传统的邮件的发送过程:

传统的邮件是通过邮局投递,然后从一个邮局到另一个邮局,最终到达用户的邮箱;

电子邮件的发送过程:

电子邮件是从用户电脑的邮件软件,发送到邮件服务器上,可能经过若干个邮件服务器的中转,最终到达对方邮件服务器上,收件方就可以用软件接收邮件;

邮件协议

常见的邮件协议有:POP3、SMTP、IMAP。

POP3:

POP3(Post Office Protocol 3),邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。

POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件;

SMTP:

SMTP(Simple Mail Transfer Protocol),简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。

SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。 增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。

IMAP:

IMAP(Internet Mail Access Protocol)交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端 软件登录邮箱,看到的邮件以及状态都是一致的。

利用SMIP协议发送邮件

常用邮件服务商的SMTP信息:

QQ邮箱:SMTP服务器是smtp.qq.com,端口是465/587
                163邮箱:SMTP服务器是smtp.163.com,端口是465
                126邮箱:SMTP服务器是smtp.126.com,端口是25
                Gmail邮箱:SMTP服务器是smtp.gmail.com,端口是465/587

相关jar包:

然后,我们通过JavaMail API连接到SMTP服务器上:以25端口为例,连接SMTP服务器时,需要准备一个Properties对象,填入相关信息。最后获取Session实例时,如果服务器需要认证,还需要传入一个Authenticator对象,并返回指定的用户名和口令。当我们获取到Session实例后,打开调试模式可以看到SMTP通信的详细内容,便于调试。

首先创建会话类:

import java.util.Properties;import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;public class Javacreatsession {public static Session creatSession() {//SMTP服务器地址String smtp="smtp.126.com";//邮箱账号和密码(授权密码)String userName="hpc7799@126.com";String passWord="EQRZOMDDRBXK****";//SMTP服务器的连接信息Properties props=new Properties();props.put("mail.smtp.host", smtp);   //SMTP主机名props.put("mail.smtp.port", "25");    //主机端口号props.put("mail.smtp.auth", "true");   //是否需要用户认证props.put("mail.smtp.starttls.enable", "true");    //启用TLS加密//创建Session//参数1:SMTP服务器的连接信息//参数2:用户认证对象(Authenticator接口的匿名实现类)Session session=Session.getInstance(props, new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(userName,passWord);}});//开启调试模式session.setDebug(true);return session;}}

发送邮件:

发送邮件时,我们需要构造一个Message对象,然后调用Transport.send(Message)即可完成发送:绝大多数邮件服务器要求发送方地址和登录用户名必须一致,否则发送将失败。

import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.Message.RecipientType;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;public class Demo03 {public static void main(String[] args) {try {//1.创建Session会话Session session=Javacreatsession.creatSession();//2.创建邮件对象(Message抽象类的子类对象)MimeMessage msg=new MimeMessage(session);msg.setFrom(new InternetAddress("hpc7799@126.com"));msg.setRecipient(RecipientType.TO, new InternetAddress("464822504@qq.com"));msg.setSubject("邮件标题","utf-8");//msg.setText("邮件<b>正文</b>","utf-8","html");//3.邮件内容“复合”对象Multipart multipart=new MimeMultipart();//正文//参数1:正文内容//参数2:内容类型;字符编码集BodyPart textpart=new MimeBodyPart();textpart.setContent("爱你孤身走<b>暗巷</b>","text/html;charset=utf-8");//附件BodyPart imagepart=new MimeBodyPart();imagepart.setFileName("sb.jpg");    //设置附件文件的显示名称//数据处理对象(读取附件文件从本地磁盘进行读取)imagepart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("c:\\hpc\\QQ图片20220220101644.jpg")), "application/octet-stream")));//添加至邮件内容multipart.addBodyPart(textpart);   //添加正文 multipart.addBodyPart(imagepart);   //添加附件//设置邮件内容msg.setContent(multipart);//发送邮件Transport.send(msg);} catch (AddressException e) {e.printStackTrace();} catch (MessagingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

填入真实的地址,运行上述代码,我们可以在控制台看到Java Mail打印的调试信息,从调试信息可以看出,SMTP协议是一个请求-响应协议,客户端总是发送命令,然后等待服务器响应。服务器响应总是以数字开头,后面的信息才是用于调试的文本。这些响应码已经被定义在SMTP协议中了,查看具体的响应码就可以知道出错原因。

网络编程----基于Java Email的电子邮件发送相关推荐

  1. 基于java Email的电子邮件发送

    Email 电子邮件,用java实现email的发送,首先我们需要了解一下email发送的大概过程.简单来说,发送email,需要从用户的电脑邮件软件(MUA),发送到邮件服务器(MTA)上,在通过若 ...

  2. java gui论文_毕业设计论文-基于JAVA GUI的电子邮件客户端软件的设计与实现.doc

    毕业设计论文-基于JAVA GUI的电子邮件客户端软件的设计与实现.doc 还剩 41页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧, ...

  3. 网络编程——基于TCP协议的通讯录【课程设计】

    网络编程--基于TCP协议的通讯录[课程设计] 本文目录 网络编程--基于TCP协议的通讯录[课程设计] 一.设计题目和要求 设计目标: 课程设计系统组成及模块功能: 二.设计内容 服务端 客户端 S ...

  4. step5 . day2 网络编程 基于TPC协议的网络编程流程及API

    基于TCP协议的网络编程流程 服务器端: 1) socket(),创建套接字文件,用于连接 2) bind(), 绑定,把socket()函数返回的文件描述符和IP.端口号进行绑定; 3) liste ...

  5. 网络编程+go+java,Go语言中的TCP/IP网络编程

    Go语言TCP/IP网络编程 乍一看,通过TCP/IP层连接两个进程会感觉可怕, 但是在Go语言中可能比你想象的要简单的多. TCP/IP层发送数据的应用场景 当然很多情况下,不是大多数情况下,使用更 ...

  6. 网络编程-基于MFC的仿QQ聊天室-2020

    基于MFC的仿QQ聊天室(2020) 有幸学习过网络编程的一些知识,出于对编程的热爱,把曾经的一次简单实践编程作业进行了自定义的完成. 编程所需: 编程工具为VS 2010,需要掌握MFC的基本操作以 ...

  7. java网络编程是java开发吗,22年最新

    凭借编程大牛最新版Java核心开发手册,掌握了能进阿里.面对市场需求缩水的时期,老关的朋友是如何拿到阿里offer的呢?别着急!今天就来分享一下我朋友的蜜拓蜜武器:阿里大牛整理的Java核心开发手 J ...

  8. Linux网络编程 - 基于UDP的服务器端/客户端

    一 理解UDP 1.0 UDP协议简介 UDP(User Datagram Protocol,用户数据报协议) [RFC 768] UDP协议的数据传输单元叫 UDP用户数据报,而TCP协议的数据传输 ...

  9. Java Email(实现邮件发送)

    Email就是电子邮件,在Java中如何实现邮件的发送: 电子邮件从用户电脑的邮件软件,例如Outlook,发送到邮件服务器上,可能经过若干个邮件服务器的中转,最终到达对方邮件服务器上,收件方就可以用 ...

最新文章

  1. 老码农绝密:使用 TS(TypeScript) 的 10 大理由
  2. 在阿里做科研是一种什么感受?
  3. #180111mysql启动错误
  4. 十二、深入Java的循环语句
  5. 分布式和微服务区别_深度解析spring cloud分布式微服务的实现
  6. linux shell文件锁,shell脚本实现文件锁功能
  7. 做前端性能优化,还不知道什么是Preload、Prefetch、Preconnect、Prerendering,你就out了?
  8. 雷霆战机源代码c语言,C++实现雷霆战机可视化小游戏
  9. oracle字体加粗函数_Oracle日期操作函数
  10. Adobe Edge Animate 1.0-软件内部教程
  11. tolua错误大全-Chinar出品-几乎可为新手解决所有报错情景
  12. Docker学习:容器之间单/双向通信 |--link /自定义网络实现互认容器别名 (理论篇)
  13. G 蛋白偶联受体与小分子化合物的相互作用
  14. 实现挂视频的三种方法
  15. PotPlayer播放器及安装说明
  16. 微信小程序点赞+取消点赞多项点击
  17. IE6,IE7中 按钮的宽度随着内容的增多而增长
  18. 微信个人号多开云客服系统定制通信标准协议
  19. 微信小程序-实现删除指定列表项
  20. 工具条(Ext.Toolbar)

热门文章

  1. linux netstat 进程号,netstat 查看 服务进程号
  2. 发票系统怎么加其他现代服务器,开票系统里怎么填加开票人
  3. c#OleDbConnection 类和DbConnection
  4. linux系统print命令,linux常用命令 print格式输出
  5. 税务计算机 试题分析,税务师考试题型及计算器使用规定
  6. linux grep截取字符数,Linux grep命令用法详解
  7. linux下 udf提权_udf提权
  8. event.button
  9. 南昌本地瑜伽馆的实地调查报告
  10. 波尔远程控制软件与网络人远程控制软件大比拼