首先我们需要了解几个概念

邮件协议
常见的邮件协议有:POP3、SMTP、IMAP。
POP3
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。(与IMAP有什么不同?)
SMTP

SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。
增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
IMAP
IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留 在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端 软件登录邮箱,看到的邮件以及状态都是一致的。
IMAP和POP3的区别
POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

用java实现邮件的发送具体操作如下:

、首先需要创建一个JavaMailUtils类,其中包含返回值是session的createSession()的方法,
目的是方便之后创建session对象

方法主要包含SMTP服务器的连接信息:
SMTP服务器地址、SMTP服务器的连接信息、主机端口号等

和用户认证对象(Authenticator接口的匿名实现类)
其中包含邮箱地址和密码(授权密码)

代码如下:

package com.gjh.demo;import java.util.Properties;import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;public class JavaMailUtils {public static Session createSession() {//SMTP服务器地址String smtp= "smtp.126.com";//邮箱地址和密码(授权密码)String userName="blabalaguo@126.com";String password="CFBZUPMOEAAAAAAA";//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;}
}

————————————————————————————————————

、创建session对象后,进行具体代码的编写,在发送的邮件内容只有文字时,仅需要将session传入创建MimeMessage对象(例如名为msg)方法的参数中,并且msg需要调用四个方法,分别是

msg.setFrom()  传入发件人邮箱
msg.setRecipient(RecipientType.TO, new InternetAddress("1722076119@qq.com"))   传入收件人邮箱
RecipientType.TO表示第二个参数是收件人邮箱
 RecipientType.CC表示第二个参数是抄送人邮箱

msg.setSubject()   传入要发送的邮件的标题
msg.setText()    传入要发送的邮件的标题

具体实现代码如下:

package com.gjh.demo;import com.gjh.demo.JavaMailUtils;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;public class Text02 {public static void main(String[] args) {try {//创建Session回话Session session=JavaMailUtils.createSession();MimeMessage msg=new MimeMessage(session);msg.setFrom(new InternetAddress("blabalaguo@126.com"));msg.setRecipient(RecipientType.TO, new InternetAddress("1722076119@qq.com"));msg.setSubject("这是标题","utf-8");msg.setText("这是内容","utf-8");//发送Transport.send(msg);} catch (MessagingException e) {e.printStackTrace();}}
}

——————————————————————————————————————-

:当我们需要将邮件内容的某些字加粗时,要在需要加粗的文本两边加入标签分别是<b>  和</b>,同时需要加入第三个参数:html,这样才能识别出表示加粗的标签

msg.setText("这是<b>内容</b>","utf-8","html");  //正文

——————————————————————————————————-

、当我们写的邮件内容不仅包括文本,还包括带有图片的附件

我们就不能用msg.setText()了,这时我们用的是msg.setContent()方法,在这个方法中要传入的参数是Multipart的对象(例如名为multipart)
并且需要创建两个BodyPart对象(例如名为textPart和imagePart),
顾名思义,textPart调用setContent()方法来添加邮件的文本内容部分,
imagePart调用setFileName()方法来添加附件的名字,调用setDataHandler()方法来添加作为附件的图片

其中MimeMessage、Multipart、BodyPart的关系:msg>multipart>bodyPart
BodyPart的对象在添加内容后被传入multipart的addBodyPart()方法的参数中
接着multipart传入msg的setContent()方法的参数中

在包括附件的情况下,try-catch块需要捕获IOException,否则获得图片的方法调用会报错

代码如下:

package com.gjh.demo;import com.gjh.demo.JavaMailUtils;
import com.sun.xml.internal.ws.util.ByteArrayDataSource;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Enumeration;import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.Header;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;public class Text04 {public static void main(String[] args)  {try {//1.创建Session会话Session session=JavaMailUtils.createSession();//2.创建邮件对象(Message抽象类的子类对象)MimeMessage msg=new MimeMessage(session); //传入sessionmsg.setFrom(new InternetAddress("blabalaguo@126.com"));  //发件人msg.setRecipient(RecipientType.TO, new InternetAddress("1722076119@qq.com")); //收件人  msg.setSubject("这是标题","utf-8");   //标题//3.邮件内容“复合”对象Multipart multipart=new MimeMultipart();//正文BodyPart textPart=new MimeBodyPart();textPart.setContent("嘿嘿", "text/html;charset=utf-8");//附件BodyPart imagePart=new MimeBodyPart();imagePart.setFileName("shou.jpg");imagePart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("C:\\Users\\86178\\Pictures\\Camera Roll\\151-1G204103113.jpg")), "applicationg/octet-stream")));//添加至邮件内容multipart.addBodyPart(textPart);multipart.addBodyPart(imagePart);//设置邮件内容msg.setContent(multipart);//发送Transport.send(msg);} catch (MessagingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}
}

——————————————————————————————————————-

、当需要把图片放入邮件的内容,而不是附件的时候

用StringBuilder创建str数组来放置textBody中的文本内容

StringBuilder str=new StringBuilder();   
    str.append("<h1>嘿嘿</h1>");
    str.append("<img src=\"cid:xiao\"/>");
    textBodyPart.setContent(str.toString(), "text/html;charset=utf-8");

imagBodyPart调用setHeader()的方法时,第一个参数是指定的

具体代码如下:

package com.gjh.demo;import java.io.IOException;
import java.net.InetAddress;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;import javax.activation.DataHandler;
import javax.mail.BodyPart;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;import com.sun.xml.internal.ws.util.ByteArrayDataSource;public class Text05 {public static void main(String[] args)  {try {Session session=JavaMailUtils.createSession();MimeMessage msg=new MimeMessage(session);msg.setFrom(new InternetAddress("blabalaguo@126.com"));msg.setRecipient(RecipientType.TO, new InternetAddress("1722076119@qq.com"));msg.setSubject("这是标题", "utf-8");BodyPart textBodyPart=new MimeBodyPart();StringBuilder str=new StringBuilder();str.append("<h1>嘿嘿</h1>");str.append("<img src=\"cid:xiaoguoguo\"/>");textBodyPart.setContent(str.toString(), "text/html;charset=utf-8");//邮件附件部分BodyPart imagBodyPart=new MimeBodyPart();imagBodyPart.setFileName("biu.jpg");imagBodyPart.setDataHandler(new DataHandler(new ByteArrayDataSource(Files.readAllBytes(Paths.get("C:\\Users\\86178\\Pictures\\Camera Roll\\151-1G204103113.jpg")),"application/octet-stream")));imagBodyPart.setHeader("Content-ID", "xiaoguoguo");Multipart multipart=new MimeMultipart();multipart.addBodyPart(textBodyPart);multipart.addBodyPart(imagBodyPart);msg.setContent(multipart);Transport.send(msg);} catch (MessagingException | IOException e) {e.printStackTrace();}}}

Java Email-用Java实现发送电子邮件相关推荐

  1. Java 使用JavaMail通过Gmail发送电子邮件

    JavaMail提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API可以方便地执行一些常用的邮件传输.可以基于JavaMail开发出类似于Microsoft Outloo ...

  2. java使用javax.mail包发送电子邮件:设置账号、密码、主题、文本、附件

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) java ...

  3. Java中使用SMTP协议发送电子邮件

    Java中使用SMTP协议发送电子邮件的具体的步骤: 1.首先需要获取发送邮件的Session对象 Session session = Session.getDefaultInstance(prope ...

  4. SpringBoot整合:Druid、MyBatis、MyBatis-Plus、多数据源、knife4j、日志、Redis,Redis的Java操作工具类、封装发送电子邮件等等

    SpringBoot笔记 一.SpringBoot 介绍 1.1.SpringBoot简介 SpringBoot 是一个快速开发的框架, 封装了Maven常用依赖.能够快速的整合第三方框架:简化XML ...

  5. JAVA Email——利用java完成发送电子邮件(包括附件)

    考虑这个问题之前我们先来看一下传统的邮件是如何发送的.传统的邮件是通过邮局投递,然后从一个邮局到另一个邮局,最终到达用户的邮箱.电子邮件的发送过程也是类似 的,只不过是电子邮件是从用户电脑的邮件软件, ...

  6. java email qq邮箱 与 阿里企业邮箱/个人邮箱

    贴一个例子仅供参考  QQ邮箱 import org.apache.commons.mail.DefaultAuthenticator; import org.apache.commons.mail. ...

  7. nodemailer使用_如何使用Nodemailer使用HTML作为内容发送电子邮件 Node.js

    nodemailer使用 Prerequisite: 先决条件: How to send emails using Nodemailer | Node.js 如何使用Nodemailer发送电子邮件. ...

  8. spring smtp_使用Spring使用Java发送电子邮件– GMail SMTP服务器示例

    spring smtp 对于使用Java发送电子邮件, JavaMail API是标准解决方案. 如官方网页所述," JavaMail API提供了独立于平台和协议的框架来构建邮件和消息传递 ...

  9. 使用Spring使用Java发送电子邮件– GMail SMTP服务器示例

    对于使用Java发送电子邮件, JavaMail API是标准解决方案. 如官方网页所述," JavaMail API提供了独立于平台和协议的框架来构建邮件和消息传递应用程序". ...

  10. java 使用 Amazon SES 发送电子邮件

    java 使用 Amazon SES发送电子邮件,有三种方式,具体哪三种请移步这里. 这里只介绍一种:利用Amazon SES 的 SMTP 服务,javax.mail发送邮件.此方法也可以直接用于1 ...

最新文章

  1. C#使用 SharpSSH
  2. SAP MM MB5L事务代码'仅总计'选项初探
  3. C++ 继承和派生 及 学生管理范例
  4. ZooKeeper布式集群安装及使用
  5. 【转载】SAP参数文件简介
  6. JavaScript学习(十)
  7. golang处理kill命令总结
  8. Spring+jpaNo transactional EntityManager available
  9. mysql mongodb插件_FLinkX的Mongodb插件优化(三)
  10. linux 驱动读写文件,Linux下读写寄存器
  11. linux中删除mysql用户_linux系统下mysql添加用户、删除用户、授权、修改密码等sql命令使用...
  12. 《恋上数据结构第1季》红黑树(未完)
  13. Linq之动态条件(1)
  14. 项目组织结构以及模块规划
  15. 小型bbs论坛系统开发1 需求分析
  16. web前端网页界面/css 仿微软官网界面
  17. 多层次细节(Level of detail)
  18. HUAWEI 机试题:工厂流水线调度
  19. 勾股定理用计算机怎用,勾股定理公式计算器
  20. 41份艾媒舆情-舆情相关行业报告

热门文章

  1. eclipse误点 project facets导致项目结构发生变化,并且报错,如果恢复project facets
  2. ip段/数字,如192.168.0.1/24是什么意思?
  3. 高数:常用等价无穷小
  4. 记DMA冲突引发的血案
  5. 胃不好,胃酸多,吃什么养胃?
  6. win10 edge无法连接到代理服务器
  7. 域名与商标有什么关系
  8. 直播延时卡顿问题如何解决?《超低延时直播白皮书》重磅上线!
  9. 人才需求迫切 倒逼人工智能一级学科设置提速
  10. 构建外卖系统小程序,订单管理功能实现步骤详解