CN110417645A - 一种基于redis改善邮件发送的方法 - Google Patents

一种基于redis改善邮件发送的方法 Download PDF

Info

Publication number
CN110417645A
CN110417645A CN201910706193.5A CN201910706193A CN110417645A CN 110417645 A CN110417645 A CN 110417645A CN 201910706193 A CN201910706193 A CN 201910706193A CN 110417645 A CN110417645 A CN 110417645A
Authority
CN
China
Prior art keywords
mail
redis
message
sent
sends
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201910706193.5A
Other languages
English (en)
Inventor
尚永强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Software Co Ltd
Original Assignee
Inspur Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur Software Co Ltd filed Critical Inspur Software Co Ltd
Priority to CN201910706193.5A priority Critical patent/CN110417645A/zh
Publication of CN110417645A publication Critical patent/CN110417645A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/42Mailbox-related aspects, e.g. synchronisation of mailboxes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/547Messaging middleware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明公开了一种基于redis改善邮件发送的方法,属于redis消息队列技术领域。本发明的基于redis改善邮件发送的方法包括以下方面:1)将邮件实时发送改为异步发送;2)控制邮件发送频率:通过定时任务实现定时发送邮件及多个邮箱轮训发送邮件;3)根据邮件类型选择性发送。该发明的基于redis改善邮件发送的方法能够大大节省业务逻辑执行时间,提高系统的并发能力,并能节省服务器资源,解决因邮件服务器的频率限制,导致邮箱不能发送的问题,具有很好的推广应用价值。

Description

一种基于redis改善邮件发送的方法
技术领域
本发明涉及redis消息队列技术领域,具体提供一种基于redis改善邮件发送的方法。
背景技术
电子邮件作为一种免费的交流沟通工具,已经广泛应用在日常交流和各类软件,如账号注册时用于发送验证码、账号异常登录提醒和程序运行时发生异常,需要邮件通知开发人员和运维人员,便于及时处理。根据电子邮件在软件中的用途不同,可以将邮件分为两类:一类是内容不同的邮件,如发送验证码、零售终端系统中的卷烟自动入库功能在入库过程中发生异常,为了通知项目及时处理问题,可能需要在很短的一段时间给全国上百个地市发送多封邮件,此类邮件要求每封必须发送到指定收件人;另一类是内容相同的邮件,发送这类邮件的目的是通知相关人及时发现问题,此种类型的邮件包括数据库连接异常、程序中出现bug产生的异常等,如果在高并发系统中出现这类异常,每次请求出现异常后都发送一封邮件的话,不管是邮件的发送数量还是发送频率都会对邮件系统造成很大压力,而且发送多封内容相同邮件的意义不大。
目前各大邮件运营商为避免产生垃圾邮件外发风险,对邮件的发送数量和发送频率做了限制。如单个IP只允许在每分钟、每小时、每日发送指定数量的邮件,并且对这段时间内的邮件发送频率设置了上限,超出这些限制短时间内该IP将暂停发送,超过每日的限制暂停当日发送。如果经常超出这些限制,将存在被封号的风险。如果使用自己搭建的邮件服务器,为避免对邮件系统造成压力,对一些相同的异常邮件保证短时间内成功发送一封即可。做云pos终端系统的时候,就出现过因为数据问题程序出现异常,同一个异常收到上千封邮件通知,导致Outlook打开卡死。目前对于应用服务器中的邮件发送存在以下问题:调用第三方邮件发送接口时,在网络差存在网络延迟的情况下,发送邮件会占用主要业务逻辑的大部分时间;大多数邮件运营商为避免产生垃圾邮件外发风险,提供的邮件服务对单个IP在每分钟、每小时、每日发送的邮件数量和发送频率做了限制,不能满足特殊情况下业务需要;高并发系统中因为数据问题或程序不健壮出现异常,短时间内可能会发送大量邮件,这些邮件没必要全部发送,通知到运维和开发人员即可。
发明内容
本发明的技术任务是针对上述存在的问题,提供一种能够大大节省业务逻辑执行时间,提高系统的并发能力,并能节省服务器资源,解决因邮件服务器的频率限制,导致邮箱不能发送的问题的基于redis改善邮件发送的方法。
为实现上述目的,本发明提供了如下技术方案:
一种基于redis改善邮件发送的方法,该方法包括以下方面:
1)将邮件实时发送改为异步发送;
2)控制邮件发送频率:通过定时任务实现定时发送邮件及多个邮箱轮训发送邮件;
3)根据邮件类型选择性发送。
作为优选,利用redis的高并发将邮件实时发送改为异步发送,redis将数据存储在内存中,redis邮件消息存储过程为,邮件发送接口接收到邮件消息若为相同内容的同类型邮件则根据业务生成邮件ID,否则生成随机邮件ID;生成邮件ID后判断redis中是否存在该邮件ID,若存在则结束,若不存在则与生成的随机邮件ID保存到redis,并将邮件ID保存到redis列表中。
应用软件中邮件作为通知用途时,大部分情况不需要实时发送。若在高并发系统中,调用的第三方邮件发送接口存在网络延迟较大的情况时,处理主业务逻辑的时间远小于发邮件的时间,严重影响了系统能够支撑的并发数。对于这个问题可以利用redis的高并发、速度快等特点,把邮件的实时发送改为异步发送。
redis由于把数据存储在内存中,不需要从磁盘读写,用它来实现的消息中间件,相比ActiveMQ、RocketMQ、RabbitMQ、Kafka具有高并发、速度快等特点。
为了程序中调用方便可以把邮件发送的逻辑封装成服务,供其它模块调用,下文中提到的接口不做特殊说明时,皆指服务。选用redis消息列表存储所有的消息ID,作为邮件消息索引,存储消息的时候从左侧进,获取消息的时候从右侧出,遵守先进先出原则,能够保证邮件发送的先后顺序。在消费redis中消息的时候,先判断消息列表中是否有未消费的邮件消息,若存在未消费的消息,从右侧取出一条消息调用运营商的邮件发送服务进行发送,若不存在未消费的消息,不做任何处理。
作为优选,所述通过定时任务实现定时发送邮件时根据邮件发送频率限制,设置定时发送任务的执行间隔。
作为优选,使用java定时调度机制定时消费redis中的消息,设置定时发送任务的执行间隔。
作为优选,所述通过定时任务实现定时发送邮件具体过程为:
a)判断邮件消息列表中是否存在消息,若存在执行b),否则执行g);
b)从邮件消息列表中取出消息ID,根据消息ID获取消息内容,并获取发件人;
c)判断发件人是否超出发送频率限制,若是执行g),否则执行d);
d)发送邮件;
e)判断邮件发送是否成功,若成功,根据消息ID删除redis中消息内容,并执行g),否则执行f);
f)判断邮件发送是否超出重试次数,若超出则将消息ID加入死信队列,并执行g),否则将消息ID重新放入redis消息列表中,并执行g);
g)结束。
作为优选,所述通过多个邮箱轮训发送邮件为,在每个邮箱发送完邮件后,把当前时间戳保存到redis中,发送邮件时获取时间戳最小的邮箱,并判断是否超出频率限制,若没超过频率限制,则该邮箱执行发送邮件。
作为优选,所述根据邮件类型选择性发送在邮件发送接口定义相同的邮件ID,往redis消息队列中发送消息时,判断邮件ID是否已经存在,若存在则不再保存。
作为优选,基于redis的字符串和列表两种数据类型实现消息队列。
与现有技术相比,本发明的基于redis改善邮件发送的方法具有以下突出的有益效果:
(一)所述基于redis改善邮件发送的方法将同步发送的邮件改为异步发送,使主要业务逻辑与邮件发送解耦,在调用第三方邮件发送接口网络延时较大的情况下,大大节省了业务逻辑执行时间,提高了系统的并发能力;
(二)针对不同类型的邮件做处理(如相同的异常邮件),减少不必要的邮件发送,不但节省服务器资源,还能避免因为相同邮件过多使收件人错过穿插在其中的重要邮件;
(三)通过消费端的定时任务执行间隔控制邮件的发送频率,解决了因为邮件服务器的频率限制,导致邮箱不能发送的问题,具有良好的推广应用价值。
附图说明
图1是本发明所述基于redis改善邮件发送的方法中邮件异步发送的流程图;
图2是本发明所述基于redis改善邮件发送的方法中通过定时任务实现定时发送邮件的流程图。
具体实施方式
下面将结合附图和实施例,对本发明的基于redis改善邮件发送的方法作进一步详细说明。
实施例
本发明的基于redis改善邮件发送的方法,包括以下方面:
1)将邮件实时发送改为异步发送。
如图1所示,利用redis的高并发将邮件实时发送改为异步发送,redis将数据存储在内存中,redis邮件消息存储过程为,邮件发送接口接收到邮件消息若为相同内容的同类型邮件则根据业务生成邮件ID,否则生成随机邮件ID;生成邮件ID后判断redis中是否存在该邮件ID,若存在则结束,若不存在则与生成的随机邮件ID保存到redis,并将邮件ID保存到redis列表中。
其中redis Key为邮件ID,对应的value为邮件内容。
应用软件中邮件作为通知用途时,大部分情况不需要实时发送。若在高并发系统中,调用的第三方邮件发送接口存在网络延迟较大的情况时,处理主业务逻辑的时间远小于发邮件的时间,严重影响了系统能够支撑的并发数。对于这个问题可以利用redis的高并发、速度快等特点,把邮件的实时发送改为异步发送。
redis由于把数据存储在内存中,不需要从磁盘读写,用它来实现的消息中间件,相比ActiveMQ、RocketMQ、RabbitMQ、Kafka具有高并发、速度快等特点。
为了程序中调用方便可以把邮件发送的逻辑封装成服务,供其它模块调用,下文中提到的接口不做特殊说明时,皆指服务。选用redis消息列表存储所有的消息ID,作为邮件消息索引,存储消息的时候从左侧进,获取消息的时候从右侧出,遵守先进先出原则,能够保证邮件发送的先后顺序。在消费redis中消息的时候,先判断消息列表中是否有未消费的邮件消息,若存在未消费的消息,从右侧取出一条消息调用运营商的邮件发送服务进行发送,若不存在未消费的消息,不做任何处理。
基于redis的字符串和列表两种数据类型实现消息队列。
2)控制邮件发送频率:通过定时任务实现定时发送邮件及多个邮箱轮训发送邮件。
通过定时任务实现定时发送邮件时根据邮件发送频率限制,设置定时发送任务的执行间隔。使用java定时调度机制定时消费redis中的消息,设置定时发送任务的执行间隔。如运营商允许1分钟发送10封邮件,则可以设置定时任务6s执行一次,每次发送一封邮件。
如图2所示,通过定时任务实现定时发送邮件具体过程为:
a)判断邮件消息列表中是否存在消息,若存在执行b),否则执行g);
b)从邮件消息列表中取出消息ID,根据消息ID获取消息内容,并获取发件人;
c)判断发件人是否超出发送频率限制,若是执行g),否则执行d);
d)发送邮件;
e)判断邮件发送是否成功,若成功,根据消息ID删除redis中消息内容,并执行g),否则执行f);
f)判断邮件发送是否超出重试次数,若超出则将消息ID加入死信队列,并执行g),否则将消息ID重新放入redis消息列表中,并执行g);
g)结束。
本发明中每封邮件有三次重试机会,发送失败次数没有超过3次的,重新存储到redis消息队列,等待下次发送,如果超过3次,则放弃发送。
通过多个邮箱轮训发送邮件为,在每个邮箱发送完邮件后,把当前时间戳保存到redis中,发送邮件时获取时间戳最小的邮箱,并判断是否超出频率限制,若没超过频率限制,则该邮箱执行发送邮件。
3)根据邮件类型选择性发送。
根据电子邮件在软件中的用途不同,将邮件分为两类:一类是内容不同的邮件,如发送验证码,此类邮件要求每封必须发送到指定收件人;另一类是内容相同的邮件,这类邮件的目的是通知相关人及时发现并处理问题,这种邮件类型包括数据问题或程序中bug产生的异常等,如果在高并发系统中出现这类异常,每次请求出现异常后都发送一封邮件的话,不管是邮件的发送数量还是发送频率都会对邮件系统造成很大压力,而且发送多封内容相同邮件的意义也不大。针对第二类邮件,因为内容相同,短时间内成功通知一次即可。既有效利用了系统资源,又达到了邮件通知的目的。
根据邮件类型选择性发送在邮件发送接口定义相同的邮件ID,往redis消息队列中发送消息时,判断邮件ID是否已经存在,若存在则不再保存。
以上所述的实施例,只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。

Claims (8)

1.一种基于redis改善邮件发送的方法,其特征在于:该方法包括以下方面:
1)将邮件实时发送改为异步发送;
2)控制邮件发送频率:通过定时任务实现定时发送邮件及多个邮箱轮训发送邮件;
3)根据邮件类型选择性发送。
2.根据权利要求1所述的基于redis改善邮件发送的方法,其特征在于:利用redis的高并发将邮件实时发送改为异步发送,redis将数据存储在内存中,redis邮件消息存储过程为,邮件发送接口接收到邮件消息若为相同内容的同类型邮件则根据业务生成邮件ID,否则生成随机邮件ID;生成邮件ID后判断redis中是否存在该邮件ID,若存在则结束,若不存在则与生成的随机邮件ID保存到redis,并将邮件ID保存到redis列表中。
3.根据权利要求2所述的基于redis改善邮件发送的方法,其特征在于:所述通过定时任务实现定时发送邮件时根据邮件发送频率限制,设置定时发送任务的执行间隔。
4.根据权利要求3所述的基于redis改善邮件发送的方法,其特征在于:使用java定时调度机制定时消费redis中的消息,设置定时发送任务的执行间隔。
5.根据权利要求4所述的基于redis改善邮件发送的方法,其特征在于:所述通过定时任务实现定时发送邮件具体过程为:
a)判断邮件消息列表中是否存在消息,若存在执行b),否则执行g);
b)从邮件消息列表中取出消息ID,根据消息ID获取消息内容,并获取发件人;
c)判断发件人是否超出发送频率限制,若是执行g),否则执行d);
d)发送邮件;
e)判断邮件发送是否成功,若成功,根据消息ID删除redis中消息内容,并执行g),否则执行f);
f)判断邮件发送是否超出重试次数,若超出则将消息ID加入死信队列,并执行g),否则将消息ID重新放入redis消息列表中,并执行g);
g)结束。
6.根据权利要求5所述的基于redis改善邮件发送的方法,其特征在于:所述通过多个邮箱轮训发送邮件为,在每个邮箱发送完邮件后,把当前时间戳保存到redis中,发送邮件时获取时间戳最小的邮箱,并判断是否超出频率限制,若没超过频率限制,则该邮箱执行发送邮件。
7.根据权利要求6所述的基于redis改善邮件发送的方法,其特征在于:所述根据邮件类型选择性发送在邮件发送接口定义相同的邮件ID,往redis消息队列中发送消息时,判断邮件ID是否已经存在,若存在则不再保存。
8.根据权利要求7所述的基于redis改善邮件发送的方法,其特征在于:基于redis的字符串和列表两种数据类型实现消息队列。
CN201910706193.5A 2019-08-01 2019-08-01 一种基于redis改善邮件发送的方法 Pending CN110417645A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910706193.5A CN110417645A (zh) 2019-08-01 2019-08-01 一种基于redis改善邮件发送的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910706193.5A CN110417645A (zh) 2019-08-01 2019-08-01 一种基于redis改善邮件发送的方法

Publications (1)

Publication Number Publication Date
CN110417645A true CN110417645A (zh) 2019-11-05

Family

ID=68365178

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910706193.5A Pending CN110417645A (zh) 2019-08-01 2019-08-01 一种基于redis改善邮件发送的方法

Country Status (1)

Country Link
CN (1) CN110417645A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111245707A (zh) * 2020-01-08 2020-06-05 北京小米移动软件有限公司 邮件传输方法、装置、电子设备及存储介质
CN114363284A (zh) * 2021-12-23 2022-04-15 深圳市六度人和科技有限公司 一种基于移动端的邮件批量发送方法、装置、存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101087273A (zh) * 2006-06-09 2007-12-12 富士通株式会社 显示邮件列表或列表并管理邮件的方法、设备及记录介质
CN101442498A (zh) * 2007-11-19 2009-05-27 上海新纳广告传媒有限公司 一种自动定时发送电子邮件的方法
CN104579922A (zh) * 2014-12-26 2015-04-29 乐视网信息技术(北京)股份有限公司 一种邮件发送方法及装置
CN107888484A (zh) * 2017-11-29 2018-04-06 北京明朝万达科技股份有限公司 一种邮件处理方法及系统
US10115060B2 (en) * 2013-03-15 2018-10-30 The Rocket Science Group Llc Methods and systems for predicting a proposed electronic message as spam based on a predicted hard bounce rate for a list of email addresses

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101087273A (zh) * 2006-06-09 2007-12-12 富士通株式会社 显示邮件列表或列表并管理邮件的方法、设备及记录介质
CN101442498A (zh) * 2007-11-19 2009-05-27 上海新纳广告传媒有限公司 一种自动定时发送电子邮件的方法
US10115060B2 (en) * 2013-03-15 2018-10-30 The Rocket Science Group Llc Methods and systems for predicting a proposed electronic message as spam based on a predicted hard bounce rate for a list of email addresses
CN104579922A (zh) * 2014-12-26 2015-04-29 乐视网信息技术(北京)股份有限公司 一种邮件发送方法及装置
CN107888484A (zh) * 2017-11-29 2018-04-06 北京明朝万达科技股份有限公司 一种邮件处理方法及系统

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111245707A (zh) * 2020-01-08 2020-06-05 北京小米移动软件有限公司 邮件传输方法、装置、电子设备及存储介质
CN114363284A (zh) * 2021-12-23 2022-04-15 深圳市六度人和科技有限公司 一种基于移动端的邮件批量发送方法、装置、存储介质
CN114363284B (zh) * 2021-12-23 2024-03-19 深圳市六度人和科技有限公司 一种基于移动端的邮件批量发送方法、装置、存储介质

Similar Documents

Publication Publication Date Title
US11509618B2 (en) Maintaining a message thread with opt-in permanence for entries
KR102355839B1 (ko) 엔트리들을 위한 옵트-인 영속성을 갖는 메시지 스레드를 유지하는 장치 및 방법
US10523612B2 (en) Message history display system and method
US8296376B2 (en) Utilizing E-mail response time statistics for more efficient and effective user communication
CN101785263B (zh) 用于电子邮件过滤的方法和设备
US9705831B2 (en) Apparatus and method for maintaining a message thread with opt-in permanence for entries
US8903925B2 (en) Scheduled messages in a scalable messaging system
CN103491170B (zh) 电子邮件到达消息提醒的方法及系统
CN110417645A (zh) 一种基于redis改善邮件发送的方法
CN108055197A (zh) 基于即时通讯的邮件分享方法、装置及系统
CN108631955A (zh) 一种确保消息发送可达的方法、系统和装置
CN101588290A (zh) 一种利用即时通信客户端提醒用户查阅电子邮件的方法
CN110417647B (zh) 邮件处理方法、装置、计算机设备和存储介质
CN104135429A (zh) 一种信息推送方法和装置
CN105245621B (zh) 基于mqtt的企业消息推送系统及消息推送方法
CN102291328A (zh) 支持多协议基于网页的第三方邮件账号收发方法及系统
CN105453659B (zh) 数据收发方法、调制解调器及终端设备
CN101137094A (zh) 电子邮件通知方法及其装置和系统
CN109981441A (zh) 一种基于图形编程的定时发送统计数据的方法及电子设备
US20060101126A1 (en) Classifying multiple attention levels for message recipients
CN103384219A (zh) 电子邮件发送方法及系统
Ji et al. Enterprise Electronic Message Control Center Based on MSMQ and XMPP
CN1300678C (zh) 通过智能网实现电子邮件到达通知的方法和系统
Ma APPLICATION OF ARTIFICIAL INTELLIGENCE IN COMPUTER NETWORK TECHNOLOGY UNDER THE BACKGROUND OF BIG DATA
CN117768434A (zh) 一种批量邮件投递方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20191105

RJ01 Rejection of invention patent application after publication