Java发送邮件时,必须要的一个配置!

使用Java实现邮件发送功能,邮件发送API JavaMail JavaMail是一个用于发送和接收邮件的API。它提供了一个独立于平台的、基于Java的邮件解决方案。我们可以使用JavaMail发送电子邮件,包括文本邮件、HTML邮件以及带附件的邮件。 阅读详情

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

在线上遇到了一个发送邮件的问题,记录一下。

一、先说背景

某一天,小王跟我反馈:“麻烦检查一下线上邮件的发送情况,我这查出来发送失败啦”

我去DB查了一下近期的邮件发送情况,表示:“看着都挺正常的,线上没有异常的情况。可能邮件在redis里边堆积了,还没消费”

select * from email order by id desc limit 100

先来说一下我这边发邮件的大致实现方式:

640?wx_fmt=png
处理邮件消息的方式

这样做有什么好处?把Redis当做一个消息队列,把请求全部扔到Redis上,这能削峰。机器A/B/C的线程会在一定的间隔内向Redis拉取消息,然后调用邮件接口进行发送。

而我这边会在页面上提供一个功能给业务方查询各类消息是否发送成功,由于发送邮件是一个异步的操作,而前同事在编写的时候又追求实时性。

  • 目前的逻辑是:如果push到Redis是成功的,并且Redis里边没有堆积着消息(说明机器A/B/C能及时处理掉这封邮件),那就认为这封邮件发送成功。

PS:(如果系统不存在问题,其实这个实现也是OK的。因为邮件的发送量一般不会太大(Redis不会堆积消息),并且发送邮件的成功率也是挺高的。

回到问题上,由于有上面的一个背景,所以我就猜测:是不是小王在查结果时,这封邮件还堆积在Redis上,所以就直接返回失败了。果不其然,我去查了一下Redis,还有200封邮件没消息。

于是我就问小王:“你这发了多少封邮件啊?”小王表示:“20分钟500封,1qps都不到”。我想了一下:“那我们这有四台机器,按道理是不会堆积那么多的”。

于是跑去线上服务器看一下消费的日志,发现只有一台机器在消费Redis的数据。又去看了一下错误的日志是不是有大量的错误信息,但并没找到错误的日志…

于是去查了一下机器的监控信息,也没发现异样。那问题就来了:为啥就只有一台机器在消费Redis的消息呢?其他三台机器的日志和监控信息都没异常。

二、解决

从日志和机器的信息都判断不出有什么问题,这时我又想起在Java中的一个命令:jstack

jstack命令主要用来查看Java线程的调用堆栈的,可以用来分析线程问题(如死锁)。

jstack详细用法以及教程:

https://www.cnblogs.com/kongzhongqijing/articles/3630264.html

于是我就去执行了一下jstack命令,在信息中搜了一下"Email",真被我搜出来了:

640?wx_fmt=png
发邮件卡住了

那就好办了,只要搜一下:“Java 发送邮箱 线程 阻塞”此类的关键字,应该就有解决方案了。

640?wx_fmt=png
解决方案

最后,发现是因为在发送邮件的时候没有配置超时时间,导致某些线程在发送邮件的时候阻塞掉了(具体原因不明)

  • mail.smtp.connectiontimeout:连接时间限制,单位毫秒。是关于与邮件服务器建立连接的时间长短的。默认是无限制。

  • mail.smtp.timeout:邮件接收时间限制,单位毫秒。这个是有关邮件接收时间长短。默认是无限制。

  • mail.smtp.writetimeout:邮件发送时间限制,单位毫秒。有关发送邮件时内容上传的时间长短。默认同样是无限制。

公众号文章导航:公众号所有的文章导航

640?wx_fmt=jpeg

200多篇 原创 技术文章

海量视频资源

精美脑图

面试题

长按扫码可关注获取 

欢迎关注640?wx_fmt=png点个再看640?wx_fmt=png

javamail批量发送邮件 立即下载

相关推荐

【操作系统】实验楼操作系统实验三——系统调用

操作系统实验3——系统调用 环境配置 ​ 首先同样是配置环境 cd /home/shiyanlou/oslab tar -zxvf hit-oslab-linux-20110823.tar.gz -C /home/shiyanlou 实验步骤 添加函数声明 cd ~/oslab/linux-0.11/include/linux gedit sys.h //添加内容: extern int sys_whoami(); extern int sys_iam(); fn_ptr_sys_call_table

qq_46612803的博客 6357

java 延时发送邮件_基于SpringBoot实现定时发送邮件过程解析

前提:1.springboot项目2.引入maven 依赖org.springframework.bootspring-boot-starter-mail以下代码中涉及到的maven依赖有日志依赖,但是springboot都有集成,不用重新引入依赖application(程序入口)package com.springbootemaildemo;import org.springframework....

weixin_39974958的博客 578

二叉树的操作之统计二叉树中节点的个数

一,问题描述 给定一颗二叉树,已知其根结点。 ①计算二叉树所有结点的个数 ②计算二叉树中叶子结点的个数 ③计算二叉树中满节点(度为2)的个数   二,算法分析 找出各个问题的基准条件,然后采用递归的方式实现。 ①计算二叉树所有结点的个数 1)当树为空时,结点个数为0,否则为根节点个数 加上 根的左子树中节点个数 再加上 根的右子树中节点的个数 借助遍历二叉树的思路,每访问一个结...

weixin_34200628的博客 4568

Java实现定时发送邮件

特别说明:邮件所采用的均为QQ邮件。

weixin_52526235的博客 1716

Android Profiler 帧率优化实战与性能调优

本文详细介绍了使用Android Profiler进行帧率优化与性能调优的实战方法。通过分析主线程状态、FPS曲线和渲染阶段耗时,精准定位卡顿根源,并提供减少过度绘制、优化绘制命令及改善资源使用的具体策略。文章结合电商、游戏等真实案例,帮助开发者有效解决卡顿问题,提升应用流畅度。

palm99的专栏 536

SAP FICO 资产会计AA后台配置 (上)

输入折旧表“CZ11”如有外币计价的资产,则需指定外币计价的资产折旧范围,以及规则。因为在设置资产类型时,需指定一个对应的 资产编号范围、资产账户确定类型(便于分配自动会计科目)、屏幕格式规则(便于设置资产字段必填与否)。因为在设置资产类型时,需指定一个对应的 资产编号范围、资产账户确定类型(便于分配自动会计科目)、屏幕格式规则(便于设置资产字段必填与否)。新增资产类型:Z101 固定资产-房屋及建筑物新增资产类型:Z301 固定资产-房屋及建筑物。

ghgxm520的博客 1762

java 邮件 定时_java实现邮件定时发送

需求:系统定时发送E-mail到其客户,达到通知的效果。先将实例分享给大家,如果确实有一些帮助的话,请大家来点掌声!首先介绍java定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)如: 每隔一个小时执行任务 timer.schedule(TimerTask, 0, 60 ...

weixin_40002692的博客 663

ESP32系列之LVGL(四):输入设备(外部按键)对接

本文详细介绍了如何在ESP32上使用LVGL库对接外部按键作为输入设备,包括硬件连接、驱动层实现和LVGL输入设备移植。通过具体代码示例和实战案例,帮助开发者快速实现按键控制UI界面,解决常见问题如按键无反应和控件跳转不正常。

weixin_30907935的博客 242

java发送邮件时遇到的坑

之前用163邮箱发邮件时明明是成功的,但是使用中国移动自己的邮箱时,无论如何在linux服务器中都发送不成功,一开始报如下错误:javax.mail.MessagingException: Unknown SMTP host: mail.chinamobilesz.com at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTrans

程序员涂小哥的技术博客 1万+

华为OD机试真题 新系统 - WIFI设备网络规划 (Java/Py/C/C++/Js/Go)

本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2017

智能车图像处理0-图像处理整体框架思路

1.总体框架如上所示,具体代码请查看后续文章。2.因为参与竞赛时间是大二,所以在编程中有许多不规范的地方(如变量的命名),大家见谅。3.原创文章,请勿侵权=-=

taiyuezyh的博客 1万+

java发送邮件不设置内容_Java发送邮件时,必须要的一个配置!

前言只有光头才能变强。在线上遇到了一个发送邮件的问题,记录一下。一、先说背景某一天,小王跟我反馈:“麻烦检查一下线上邮件的发送情况,我这查出来发送失败啦”我去DB查了一下近期的邮件发送情况,表示:“看着都挺正常的,线上没有异常的情况。可能邮件在redis里边堆积了,还没消费”select*fromemailorderbyiddesclimit100先来说一下我这边发邮件的大致实现...

weixin_39863017的博客 139

用扩展点为 Fiori Elements 添加自定义动作:从原理到落地的完整实践

本文介绍了如何在基于OData V4的Fiori Elements应用中通过Extension Points添加自定义Action按钮。主要内容包括: 扩展点动作与标准注解动作的区别:扩展点用于非标准前端流程、组合操作等场景,需通过extensionAPI与框架交互。 扩展点动作的插入位置:可放置在List Report表格工具栏、Object Page页眉/页脚/Section工具栏等位置,并说明了相应的manifest.json配置节点。 配置模型与处理函数契约:详细说明了press、visible/e

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 250

JAVA实现邮件发送

一、邮件服务器与传输协议 要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。 SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。 SMTP协议:通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。 POP3协议:通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP

qq_34823218的博客 2万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

使用JAVA实现邮件发送功能

使用Java实现邮件发送(文本邮件,单个附件邮件,多个附件邮件)。

Sophia的博客 3万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

java发邮件_Java发送邮件时,必须要的一个配置

在线上遇到了一个发送邮件的问题,记录一下。一、先说背景某一天,小王跟我反馈:“麻烦检查一下线上邮件的发送情况,我这查出来发送失败啦”我去DB查了一下近期的邮件发送情况,表示:“看着都挺正常的,线上没有异常的情况。可能邮件在redis里边堆积了,还没消费”select * from email order by id desc limit 100先来说一下我这边发邮件的大致实现方式:处理邮件消息的方...

weixin_39725650的博客 628

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java发送邮件 SpringBoot

可以设置发送邮件debug模式这样在发送时可以在控制台中输出相关信息。

Bunny的博客 2384

Java实现邮件发送

一、邮件服务器与传输协议 要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。 SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。 1:SMTP协议 通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。 2:POP3协议 通常把处理用户pop3请求(邮件接收请求)的服务器

苍煜 4749

centos java发送邮件发不出去_Java发送邮件时,必须要的一个配置

在线上遇到了一个发送邮件的问题,记录一下。一、先说背景某一天,小王跟我反馈:“麻烦检查一下线上邮件的发送情况,我这查出来发送失败啦”我去DB查了一下近期的邮件发送情况,表示:“看着都挺正常的,线上没有异常的情况。可能邮件在redis里边堆积了,还没消费”select * from email order by id desc limit 100先来说一下我这边发邮件的大致实现方式:处理邮件消息的方...

weixin_35014204的博客 245

java技术——邮件的发送

在大多数的系统中都会有发送邮件的功能。所以整理了个发送邮件的工具类。以备查阅。 配置文件 mail.propertis Source code     mail.smtp.auth=true mail.smtp.starttls.enable=true mail.smtp.host=smtp.qq.com mail.smtp.p

247万+

Java发送邮件

helper.addAttachment(“文件.docx”,new File(“C:\Users\admin\Desktop\测试邮件附件信息.docx”));// 7. (文本+图片)设置 文本 和 图片 “节点”的关系(将 文本 和 图片 “节点”合成一个混合“节点”)// 10. 设置(文本+图片)和 附件(若有) 的关系(合成一个大的混合“节点” / Multipart )transport.connect(“smtp.qq.com”, “发件人邮箱”, “发件人的授权码”);

2401_89690381的博客 1217

Java邮件发送

Java邮件发送,下面的是简单的邮件发送代码,邮件服务器配置在mailServer.properties文件里面。通过简单的文本邮件发送方式发送邮件,暂未使用html格式的邮件发送方式。 javax.mail.jar下载地址:http://www.oracle.com/technetwork/java/javamail/index.html 注:常用发送邮件服务器名称及端口 163 sm

Hsing Hsu's Blog 4498

Java 发送163邮件

【背景】   SSH网上商城中使用的邮件发送是局域网内的,Java这么强大,干嘛要弄局域网的呢,要发就发真实的邮件。 【前提】   开启自己账号的163邮箱协议和授权码,授权码和登录邮箱账号的密码不是同一个,邮箱账号密码是登录邮箱的密码,授权码是第三方登录授权的密码,比如Foxmail或其它程序,像编写的Java程序也是第三方。 我这里已经开启了,但是我忘了,然后我是重置的,这个步骤很简单,就不...

努力给自己想要的 2454

java实现邮件发送

java实现邮件发送逻辑并不复杂(不包含附件),只是根据官方调用官方提供的sdk,首先需要引入maven依赖:javax.mail <dependency > <groupId >com.sun.mail</groupId > <artifactId >javax.mail</artifactId > &...

瑾年的博客 8429

SpringBoot扩展——发送邮件!

在日常工作和生活中经常会用到电子邮件。例如,当注册一个新账户时,系统会自动给注册邮箱发送一封激活邮件,通过邮件找回密码,自动批量发送活动信息等。邮箱的使用基本包括这几步:先打开浏览器并登录邮箱,然后创建邮件再发送邮件。在这个过程中有大量的重复性工作且不能批量发送邮件,说明手动的方式效率太低。本节就介绍如何通过代码完成发送邮件的功能。

IT_1024的博客 1442
上一篇: 带你了解什么是Push消息推送
下一篇: 最近学到的限流知识
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值