Java Email 实现邮件发送

这篇具有很好参考价值的文章主要介绍了Java Email 实现邮件发送。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Email:电子邮件。

在当今社会有着重要的应用,传统的邮件是通过邮局投递,然后从一个邮局到另一个邮局,最终到达用户的邮箱。

在电子邮件中也有着相似的发送过程:电子邮件是从用户电脑的邮件软件发送到邮件服务器上,经过若干个邮件服务器的中转,最终到达对方邮件服务器上,收件方就可以用软件接收邮件。

这样的邮件软件称为MUA: Mail user Agent。即给用户服务的邮件代理;
邮件服务器则称为MTA : Mail Transfer Agent。即邮件中转的代理;
最终到达的邮件服务器称为MDA: Mail Delivery Agent。

发送方的邮件进入MDA就被存放在MDA服务器的硬盘中,等待收信方使用邮件软件查看。

准备SMTP登录信息

1.SMTP

        SMTP的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的准备规范,通过它来控制邮件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的发送地。SMTP 服务器就是遵循SMTP协议的发送邮件服务器。SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录SMTP服务器,这就使得那些垃圾邮件的散播者无可乘之机。可增加SMTP认证的目的是为了使用户避免受到垃圾邮件的侵扰。

2.POP3

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

3.IMAP

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

以网易163邮箱为例,在设置中开启服务"POP3/SMTP/IMAP"二者任选其一;

java 发送邮件,java,开发语言

因为要使用Java发送Email,则要选择给予授权密码,当你不再使用时,可以点击删除按钮,之后此密码将会失效,不能再进行登录

java 发送邮件,java,开发语言

做好准备后,将JavaMail相关的依赖Jar包加入至项目

javax.mail-1.6.2.jar

 实现发送邮件

public class Demo01 {
 public static void main(String[] args) throws MessagingException {
	String userName="177*******@163.com";//登录名
	String password="Y*******FHNYQOVX";//登陆密码
	
	//smtp服务器
	Properties pros=new Properties();
	pros.put("mail.smtp.host", "smtp.163.com");//主机名
	pros.put("mail.smtp.port", "25");//主机端口号
	pros.put("mail.smtp.auth", "true");//是否需要用户认证
	pros.put("mail.smtp.starttls.enable", "true");//启用TLS加密
	//创建会话
	Session session=Session.getInstance(pros,new Authenticator(){
		@Override
		protected javax.mail.PasswordAuthentication getPasswordAuthentication(){
			return new javax.mail.PasswordAuthentication(userName, password);
		}
	});
	System.out.println(session);
	//设置debug模式便于调试
    session.setDebug(true);

	MimeMessage message=new MimeMessage(session);
    //邮件标题
	message.setSubject("HELLO!");
    //邮件内容(文本)
	message.setText("你好","utf-8");
    //设置发送方地址
	message.setFrom(new InternetAddress("177********@163.com"));
    //设置收件方地址
	message.setRecipient(RecipientType.TO,new InternetAddress("11111111@qq.com"));
	//发送
	Transport.send(message);
}
}

​

运行代码,发送邮件成功后,可以看出SMTP协议是一个请求-响应协议,客户端总是发送命令,然后等待服务器响应。服务器响应总是以数字开头,后面的信息才是用于调试的文本。这些响应码已经被定义在SMTP协议中了,查看具体的响应码就可以知道出错原因。

发送带有附件的邮件

想发送带有附件的邮件,我们还要创建邮件内容"复合"对象,Multipart类的MimeMultipart实现类,然后再创建BodyPart类的MimeBodyPart实现类,textPart用于存储正文内容,调用setContent()方法,参数1为正文内容,参数2为内容类型;字符编码集。

Multipart multipart = new MimeMultipart();

// 添加text:
BodyPart textpart = new MimeBodyPart();
textpart.setContent(body,"text/html;charset=utf-8");
multipart.addBodyPart(textpart);

//添加image:
BodyPart Filepart = new MimeBodyPart();
Filepart.setFileName("xxx.jpg");
Filepart.setDataHandler(new DataHandler(new ByteArrayDataSource(文件输入流,"application/octet-stream")));
multipart.addBodyPart(imagepart);

//设置邮件内容为multipart:
message.setContent(multipart);

FilePart用于存储附件,先调用setFileName()方法设置附件文件的显示名称(显示名称可以与图片原名不一致),再调用setDataHandler(),其中添加一个DataHandler()方法,使用Files工具类的readAllBytes()方法,可以把文件读取成字节数据,二进制文件可以用application/octet-stream,Word文档则是application/msword。 最后,通过setContent()把Multipart添加到Message中,即可发送邮件。

如果我们需要抄送多个人一起发送时,可以选择通过创建一个InternetAddress[]数组把多个抄送人存入。

message.setRecipients(RecipientType.CC, new InternetAddress[] {
					new InternetAddress("*********"),
					new InternetAddress("*********"),
					new InternetAddress("*********"),
			});

发送内嵌图片的HTML邮件 

邮件中加入<img src="xxxxx.jpg">,这样的外部图片链接通常会被邮件客户端过滤,并提示用户显示图片并不安全。只有内嵌的图片才能正常在邮件中显示。

Multipart multipart = new MimeMultipart();
					
// 添加text:
BodyPart textpart = new MimeBodyPart();
textpart.setContent("<h1>Hello</h1><p><img src=\"cid:img01\"></p>", "text/html;charset=utf-8");
multipart.addBodyPart(textpart);

// 添加image:
BodyPart imagepart = new MimeBodyPart();
imagepart.setFileName("xxx.jpg");
imagepart.setDataHandler(new DataHandler(new ByteArrayDataSource(new FileInputStream("c:\\test\\xxx.jpg"), "application/octet-stream")));
multipart.addBodyPart(imagepart);

//设置当前image为内嵌图片
//这个ID和HTML中引用的ID对应起来,邮件客户端就可以正常显示内嵌图片
imagepart.setHeader("Content-ID","<img01>");

小结 

JavaMail API发送邮件本质上是一个MUA软件通过SMTP协议发送邮件至MTA服务器是一种依赖特定协议的服务模式。

MTA和MDA这样的服务器软件通常是现成的。MUA到MTA发送邮件的协议就是SMTP协议。使用Java程序发送邮件时,只需要使用JavaMail这个标准API就可以直接发送邮件。文章来源地址https://www.toymoban.com/news/detail-771201.html

到了这里,关于Java Email 实现邮件发送的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java实现发送邮件

    本文介绍下java实现邮件的发送,意在网站用户评论时能够及时通知站长和用户评论被回复后能够及时通知用户。 下文介绍下具体实现。 java实现 首先引入springboot的邮箱依赖 配置邮箱参数,这里以 qq邮箱 作为示例 此时就差不多了,接下来实现邮箱工具类 此时调用 MailUtil 里

    2024年02月16日
    浏览(47)
  • 网工应用层:电子邮件Email、SMTP协议与使用Telnet发送电子邮件

    参考资料: https://www.bilibili.com/video/BV1c4411d7jb?p=72vd_source=e66dd25b0246f28e772d75f11c80f03c 湖科大的高军老师做的计算机网络课,去年选修的计网全靠高老师,生动,举例丰富,配套实验课,无废话纯干货,单推一波! 电子邮件(E-mail)是一种用电子手段提供信息交换的通信方式,是

    2024年02月14日
    浏览(93)
  • springboot(java)使用javamail实现邮件的接收、转发、发送、清除

    最近在弄邮件相关的功能,被搞的头大,很多找的方法根本不知道该怎么往下走,就目前为止, 经过各种的碰壁和失败,就整理出来如何使用javamail实现邮件的接收、转发、发送、清除 不单单是分享,也为我后续查找更方便做一个记录 在正式发送邮件之前,我们应该对邮件

    2024年02月04日
    浏览(43)
  • ews java + Oauth2实现office 365发送邮件

    引入maven包: com.microsoft.ews-java-api ews-java-api 2.0 使用office 365邮箱服务收发邮件有两种校验方式,一种是老的basic authentication, 这种方式目前已不建议使用,如下使用的是userName, password进行验证的方式。 public static boolean sendExchange(MailConfig mailInfo) { // The Exchange Server Version. 最新推

    2024年02月09日
    浏览(48)
  • 100天精通Python丨办公效率篇 —— 11、Python自动化操作 Email(发送邮件、收邮件、邮箱客户端)

    大家好,我是你们的好朋友西红柿!今天咱们聊一聊关于Python怎么操作邮件的问题。这可是十分有用的技能啊,偏偏很多小伙伴们并不知道,还得费尽周折地查找资料呢。幸好我这个聪明伶俐的小家伙会给你们支招,让你们又快又好地掌握这门技能! 首先,你要掌握以SMTP协

    2023年04月17日
    浏览(45)
  • 【论坛java项目】第二章 Spring Boot实践,开发社区登录模块:发送邮件、开发注册功能、会话管理、生成验证码、开发登录、退出功能、

    😀如果对你有帮助的话😊 🌺为博主点个赞吧 👍 👍点赞是对博主最大的鼓励😋 💓爱心发射~💓 bofryuzursekbiab——密码 访问邮箱域名 邮箱端口 账号 密码 协议 详细配置 JavaMailSender 是 Spring Email 的核心组件,负责发送邮件 MimeMessage 用于封装邮件的相关信息 MimeMessageHelper 用

    2024年02月06日
    浏览(57)
  • JAVA之发送邮件

    一、导入依赖 二、发送普通文本 三、发送附件 一、导入依赖 二、发送普通文本 三、发送附件 方法一:通过POI读取数据库的数据,并生成excel,但不保存在本地文件,通过流的方式,作为附件并发送邮件 主要的代码如下: 全部代码如下: 方法二:将导出的数据生成文件,

    2024年02月13日
    浏览(41)
  • Java发送邮件一行代码解决

    今天博主带来一期超详细的邮件发送实操内容,希望能get到您的点赞!话不多说,直接进入正题。 在实践开始前,这里需要提到 Hutool ,Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率的工具类。 那么现在正式进入实战!首先创

    2024年02月02日
    浏览(54)
  • java ssl加密发送邮件

    通过25端口发送邮件不安全,改为ssl加密方式发送邮件,比较常见的2中实现类发送邮件如下所示。 使用该实现类发送邮件,ssl加密使用端口号为465,借助Properties类设置ssl的各种配置。 网上资料较少,自己记录一下。 修改application.yml文件配置 至于能否都采用第二种方式来实

    2024年02月12日
    浏览(54)
  • Java发送邮件 启用SSL

    使用的maven依赖: 配置文件 mail.properties 如下: 在Foxmail的配置如下: 代码如下:

    2024年04月26日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包