日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMQ延迟队列实现定时发邮件

發布時間:2024/1/1 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ延迟队列实现定时发邮件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

功能:前端設定時間,實現指定時間發送郵件。

技術:MQ異步延遲消息

代碼完成后優化:一切實現好你會發現數據會有一定問題,因為消息是排列消費的,后安排的消息永遠在之前消息消費后才會消費,所以你要保證時間最近的消息先去排隊。前端設計時間要有一定時間限制,及設定時間不能設定五分鐘內,后臺邏輯只需要定時任務五分鐘執行一次,查詢未來五分鐘需要執行的郵件任務,按照時間排序即可,將優先的任務消息,先排隊消費,這樣就能實現指定時間發送郵件。

整體思想:

延遲消息config封裝:(SendMailDelayConfig:包括

SEND_MAIL_DELAY_REPEAT_TRADE_QUEUE_NAME轉發監聽隊列,負責將擁堵在擁堵隊列中的消息轉發到業務處理消息監聽邏輯中 SEND_MAIL_DELAY_DEAD_LETTER_QUEUE_NAME消息擁堵隊列,時間結束前消息會擁堵在此,消息時間結束后會將消息轉發到業務邏輯處理隊列中 QUEUE_SEND_MAIL_DELAY業務處理隊列,及發郵件監聽消息,消息擁堵結束后會將消息發送到此處

),

延遲消息消息體封裝:(DLXMessage:數據傳遞)

延遲消息發送:(SendMailDelayService:將業務邏輯中設定時間等參數發送到擁堵隊列中SEND_MAIL_DELAY_DEAD_LETTER_QUEUE_NAME)

延遲消息轉發監聽:(SendMailDelayTradeReceiver:擁堵隊列時間結束后,會被該監聽器監聽,監聽隊列名稱SEND_MAIL_DELAY_REPEAT_TRADE_QUEUE_NAME,監聽后將消息中數據轉發到業務處理消息隊列中message.getQueueName(),通常情況下該隊列名稱是動態的,及我們在入口處傳遞的,并將此隊列名稱放到消息體中,該隊列名稱一般為消息業務處理邏輯的消息名稱:發郵件)

延遲消息業務處理監聽 :(QUEUE_SEND_MAIL_DELAY:監聽轉發監聽器推過來的消息,處理業務邏輯)

1.業務層代碼:生成將要發送的郵件在草稿箱,獲取定時時間等基礎參數

if(!StringUtils.isEmpty(mailDto.getDelayTime())){res = sendMailByMQService.sendDelayMailByMQ(mail.getId(),mailDto.getFollowId(),sdf.parse(mailDto.getDelayTime()));System.err.println("延遲:"+mail.getId());System.err.println("延遲:"+mailDto.getDelayTime());}else{res = sendMailByMQService.sendMailByMQ(mail.getId(),mailDto.getFollowId());System.err.println("不延遲:"+mailDto.getDelayTime());}

2.業務邏輯:封裝方法,像指定消息封裝設定時間

package com.shallnew.wmallgenie.rabbitmq.sender;import com.alibaba.fastjson.JSONObject; import com.shallnew.wmallgenie.dto.MailDto; import com.shallnew.wmallgenie.dto.R; import com.shallnew.wmallgenie.rabbitmq.config.SendMailByMQConfig; import com.shallnew.wmallgenie.rabbitmq.config.SendMailConfig; import com.shallnew.wmallgenie.rabbitmq.config.SendMailDelayConfig; import com.shallnew.wmallgenie.rabbitmq.message.DelayMessageStruct; import com.shallnew.wmallgenie.rabbitmq.message.MessageStruct; import com.shallnew.wmallgenie.utils.StringConvertUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import java.text.SimpleDateFormat; import java.util.Date;@Component @Slf4j public class SendMailByMQService {@Autowiredprivate AmqpTemplate rabbitTemplate;@Autowiredprivate SendMailDelayService sendMailDelayService;public R sendMailByMQ(Long id,String followId) {MessageStruct messageStruct = new MessageStruct();messageStruct.setId(id);messageStruct.setFollowId(followId);this.rabbitTemplate.convertAndSend(SendMailByMQConfig.SEND_MAILBYMQ_EXCHANGENAME, SendMailByMQConfig.SEND_MAILBYMQ_ROUTING_KEY, messageStruct);return R.ok();}public R sendDelayMailByMQ(Long id,String followId,Date delayTime) {DelayMessageStruct delayMessageStruct = new DelayMessageStruct();delayMessageStruct.setId(id);delayMessageStruct.setFollowId(followId);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");long time = delayTime.getTime()-new Date().getTime();delayMessageStruct.setDelayTime(time);String message = JSONObject.toJSONString(delayMessageStruct);sendMailDelayService.sendMessage(SendMailDelayConfig.SEND_MAIL_DELAY_EXCHANGE,SendMailDelayConfig.QUEUE_SEND_MAIL_DELAY, message, time);//this.rabbitTemplate.convertAndSend(SendMailByMQConfig.SEND_MAILBYMQ_EXCHANGENAME, SendMailByMQConfig.SEND_MAILBYMQ_ROUTING_KEY, delayMessageStruct);return R.ok();} }

3.MQ延遲消息異步發送

package com.shallnew.wmallgenie.rabbitmq.sender;import com.alibaba.fastjson.JSON; import com.shallnew.wmallgenie.rabbitmq.config.MailDelayConfig; import com.shallnew.wmallgenie.rabbitmq.config.SendMailDelayConfig; import com.shallnew.wmallgenie.rabbitmq.message.DLXMessage; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.AmqpException; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessagePostProcessor; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;@Component @Slf4j public class SendMailDelayService {@Autowiredprivate RabbitTemplate rabbitTemplate;/*** 延遲發送消息到隊列* @param queueName 隊列名稱* @param message 消息內容* @param times 延遲時間 單位毫秒*/public void sendMessage(String exchange,String queueName, String message, long times) {//消息發送到死信隊列上,當消息超時時,會發生到轉發隊列上,轉發隊列根據下面封裝的queueName,把消息轉發的指定隊列上//發送前,把消息進行封裝,轉發時應轉發到指定 queueName 隊列上DLXMessage dlxMessage = new DLXMessage(SendMailDelayConfig.SEND_MAIL_DELAY_EXCHANGE,queueName,message,times);MessagePostProcessor processor = new MessagePostProcessor(){@Overridepublic Message postProcessMessage(Message message) throws AmqpException {message.getMessageProperties().setExpiration(times + "");return message;}};rabbitTemplate.convertAndSend(exchange,SendMailDelayConfig.SEND_MAIL_DELAY_DEAD_LETTER_QUEUE_NAME, JSON.toJSONString(dlxMessage), processor);} }

消息體封裝類:

package com.shallnew.wmallgenie.rabbitmq.message;import java.io.Serializable;public class DLXMessage implements Serializable {private static final long serialVersionUID = 9956432152000L;private String exchange;private String queueName;private String content;private long times;public DLXMessage() {super();}public DLXMessage(String queueName, String content, long times) {super();this.queueName = queueName;this.content = content;this.times = times;}public DLXMessage(String exchange, String queueName, String content, long times) {super();this.exchange = exchange;this.queueName = queueName;this.content = content;this.times = times;}public static long getSerialVersionUID() {return serialVersionUID;}public String getExchange() {return exchange;}public void setExchange(String exchange) {this.exchange = exchange;}public String getQueueName() {return queueName;}public void setQueueName(String queueName) {this.queueName = queueName;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public long getTimes() {return times;}public void setTimes(long times) {this.times = times;} }

延遲消息config

package com.shallnew.wmallgenie.rabbitmq.config;import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.DirectExchange; import org.springframework.amqp.core.Queue; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;import java.util.HashMap; import java.util.Map;@Configuration public class SendMailDelayConfig {//exchange namepublic static final String SEND_MAIL_DELAY_EXCHANGE = "exchange.send.mail.delay";//DLX repeat QUEUE 死信接收轉發隊列,時間設置時用該隊列接收public static final String SEND_MAIL_DELAY_REPEAT_TRADE_QUEUE_NAME = "queue.send.mail.delay.repeat";//TTL QUEUE 死信擁堵隊列public static final String SEND_MAIL_DELAY_DEAD_LETTER_QUEUE_NAME = "queue.send.mail.delay.dead";//Hello :最終發消息/處理業務隊列public static final String QUEUE_SEND_MAIL_DELAY = "queue.send.mail.delay";//信道配置@Beanpublic DirectExchange sendMailDelayExchange() {return new DirectExchange(SEND_MAIL_DELAY_EXCHANGE, true, false);}/********************* 業務隊列定義與綁定 hello 測試 *****************/@Beanpublic Queue sendMailDelayQueue() {Queue queue = new Queue(QUEUE_SEND_MAIL_DELAY,true);return queue;}@Beanpublic Binding sendMailDelayBinding() {//隊列綁定到exchange上,再綁定好路由鍵return BindingBuilder.bind(sendMailDelayQueue()).to(sendMailDelayExchange()).with(QUEUE_SEND_MAIL_DELAY);}/********************* 業務隊列定義與綁定 hello 測試 *****************///下面是延遲隊列的配置//轉發隊列@Beanpublic Queue repeatTradeSendMailDelayQueue() {Queue queue = new Queue(SEND_MAIL_DELAY_REPEAT_TRADE_QUEUE_NAME,true,false,false);return queue;}//綁定轉發隊列@Beanpublic Binding repeatTradeSendMailDelayBinding() {return BindingBuilder.bind(repeatTradeSendMailDelayQueue()).to(sendMailDelayExchange()).with(SEND_MAIL_DELAY_REPEAT_TRADE_QUEUE_NAME);}//死信隊列 -- 消息在死信隊列上堆積,消息超時時,會把消息轉發到轉發隊列,轉發隊列根據消息內容再把轉發到指定的隊列上@Beanpublic Queue deadLetterSendMailDelayQueue() {Map<String, Object> arguments = new HashMap<>();arguments.put("x-dead-letter-exchange", SEND_MAIL_DELAY_EXCHANGE);arguments.put("x-dead-letter-routing-key", SEND_MAIL_DELAY_REPEAT_TRADE_QUEUE_NAME);//擁堵隊列Queue queue = new Queue(SEND_MAIL_DELAY_DEAD_LETTER_QUEUE_NAME,true,false,false,arguments);return queue;}//綁定死信隊列@Beanpublic Binding deadLetterSendMailDelayBinding() {return BindingBuilder.bind(deadLetterSendMailDelayQueue()).to(sendMailDelayExchange()).with(SEND_MAIL_DELAY_DEAD_LETTER_QUEUE_NAME);} }

延遲消息監聽:消息轉發(時間結束后轉發到業務處理類)

package com.shallnew.wmallgenie.rabbitmq.receiver;import com.alibaba.fastjson.JSON; import com.rabbitmq.client.Channel; import com.shallnew.wmallgenie.rabbitmq.config.MailDelayConfig; import com.shallnew.wmallgenie.rabbitmq.config.SendMailDelayConfig; import com.shallnew.wmallgenie.rabbitmq.message.DLXMessage; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.support.AmqpHeaders; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.handler.annotation.Headers; import org.springframework.stereotype.Component;import java.io.IOException; import java.util.Map;@Component @Slf4j public class SendMailDelayTradeReceiver {@Autowiredprivate RabbitTemplate rabbitTemplate;//監聽轉發隊列,有消息時,把消息轉發到目標隊列@RabbitListener(queues = SendMailDelayConfig.SEND_MAIL_DELAY_REPEAT_TRADE_QUEUE_NAME)public void sendMailDelayTradeMessage(String content, Channel channel, @Headers Map<String,Object> headers) {try {//此時,才把消息發送到指定隊列,而實現延遲功能DLXMessage message = JSON.parseObject(content, DLXMessage.class);System.err.println("將消息轉發給其他隊列"+message.getQueueName());rabbitTemplate.convertAndSend(SendMailDelayConfig.SEND_MAIL_DELAY_EXCHANGE,message.getQueueName(), message.getContent());System.err.println("轉發到:"+message.getQueueName());Long deliveryTay = (Long)headers.get(AmqpHeaders.DELIVERY_TAG);channel.basicAck(deliveryTay,false);} catch (IOException e) {e.printStackTrace();Long deliveryTay = (Long)headers.get(AmqpHeaders.DELIVERY_TAG);try {channel.basicAck(deliveryTay,false);} catch (IOException ex) {ex.printStackTrace();}}} }

延遲消息監聽,業務處理(發郵件)

package com.shallnew.wmallgenie.rabbitmq.receiver;import com.alibaba.fastjson.JSON; import com.rabbitmq.client.Channel; import com.shallnew.wmallgenie.config.MatuConfig; import com.shallnew.wmallgenie.contants.LocusEnum; import com.shallnew.wmallgenie.dao.CsMsgPushMapper; import com.shallnew.wmallgenie.dao.MailAccountMapper; import com.shallnew.wmallgenie.dao.MailContentMapper; import com.shallnew.wmallgenie.dao.MailFollowMapper; import com.shallnew.wmallgenie.entity.*; import com.shallnew.wmallgenie.rabbitmq.config.MailDelayConfig; import com.shallnew.wmallgenie.rabbitmq.config.SendMailDelayConfig; import com.shallnew.wmallgenie.rabbitmq.message.DelayMessageStruct; import com.shallnew.wmallgenie.rabbitmq.sender.AnnaylizeOssDirSpaceService; import com.shallnew.wmallgenie.rabbitmq.sender.ReceiverMailByOneAccountService; import com.shallnew.wmallgenie.service.*; import com.shallnew.wmallgenie.shiro.utils.DateUtils; import com.shallnew.wmallgenie.utils.DownLoadUrlUtils; import com.shallnew.wmallgenie.utils.RSAUtils; import com.shallnew.wmallgenie.utils.mail.MailMQUtils; import com.shallnew.wmallgenie.utils.mail.MailUtils; import com.shallnew.wmallgenie.utils.xss.UUIDUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.support.AmqpHeaders; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.Message; import org.springframework.messaging.handler.annotation.Headers; import org.springframework.stereotype.Component; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context;import javax.mail.internet.MimeMessage; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.*;@Component @Slf4j public class SendMailDelayReceiver {@Autowiredprivate RabbitTemplate rabbitTemplate;@Autowiredprivate MailContentMapper mailContentMapper;@Autowiredprivate MailAccountMapper accountMapper;@Autowiredprivate MailFollowMapper followMapper;@Autowiredprivate MailAttachmentService attachmentService;@Autowiredprivate TemplateEngine templateEngine;@Autowiredprivate CustomerService customerService;@Autowiredprivate MailAccountService accountService;@Autowiredprivate SupplierService supplierService;@Autowiredprivate CsGroupService groupService;@Autowiredprivate AnnaylizeOssDirSpaceService annaylizeOssDirSpaceService;@Autowiredprivate CustomLocusService customLocusService;@Autowiredprivate CustomCommunityService customCommunityService;@Autowiredprivate CsUserService csUserService;@Autowiredprivate ReceiverMailByOneAccountService receiverMailByOneAccountService;@Autowiredprivate CsMsgPushMapper msgPushMapper;@Autowiredprivate SupplierContactService supplierContactService;/*** 延遲消息*/@RabbitListener(queues = SendMailDelayConfig.QUEUE_SEND_MAIL_DELAY)public void delayMessage(Message msg, Channel channel, @Headers Map<String,Object> headers) {DelayMessageStruct delayMessageStruct = JSON.parseObject(msg.getPayload()+"", DelayMessageStruct.class);Long id = delayMessageStruct.getId();MailContent mailDto = mailContentMapper.selectByPrimaryKey(id);List<MailAttachment> attachmentList = attachmentService.queryByMail(id);List<Map> list = new ArrayList<>();for (MailAttachment mailAttachment:attachmentList) {Map map = new HashMap();map.put("fileName",mailAttachment.getFilename());map.put("url",mailAttachment.getAttachmentUrl());list.add(map);}MailAccountWithBLOBs accountEntity = accountMapper.queryMailPassword(mailDto.getFromAccount(),null,mailDto.getUserId());//查找發件人授權碼if(null == accountEntity){return ;}String pwd = accountEntity.getPassword();//發件人授權碼(未解密)String privateKey = accountEntity.getPrivateKey();//解密秘鑰String target = RSAUtils.decryptByPrivateKey(pwd, privateKey);String emailPassword = target;String emailSMTPHost = accountEntity.getServerAddrS();//發件服務器地址Short serverSSL = accountEntity.getServerSslS();//判斷是否需要SSL加密Short serverStartTLS = accountEntity.getServerStarttls();//獲取正文String content = DownLoadUrlUtils.downLoadMailContent(mailDto.getContentUrl());content = content.replaceAll("dt2b://","http://").replaceAll("dt2bs://","https://").replaceAll("@‘","");//發送郵件加像素String uuId = UUIDUtil.getUUID();String sendContent = content +"<img style=\"display:none;width:0px;height:0\" name=\"MAILPIXEL\" src=\""+ MatuConfig.pixelprefix+"?id="+uuId+"&time="+new Date().getTime()+"\">";long dateTime = new Date().getTime();sendContent = sendContent +"<span style=\"display:none;\" id=\"SEND_MATU"+dateTime+"SEND_MATU"+"\" ></span>";//用于imap收郵件標記解析//將所有地址圖片上傳到郵件//sendContent= sendContent+ StringConstant.SENDMAILJSBODY.replace("UUID",uuId);mailDto.setContent(sendContent);try {MimeMessage message = MailMQUtils.createMimeMessage(mailDto.getFromAccount(),mailDto.getFromMail(), mailDto.getToMail(), mailDto.getWcc(), mailDto.getBcc(), mailDto.getSubject(), mailDto.getContent(), emailPassword, emailSMTPHost, serverSSL, serverStartTLS, list);//查詢是否管理全部供應商List<Integer> groupIdList = new ArrayList<>();List<Integer> supplierTypeList = new ArrayList<>();List<CsGroup> groupList = groupService.queryByUserGroup(mailDto.getUserId());for(CsGroup csGroup:groupList) {groupIdList.add(csGroup.getId());if (csGroup.getGroupName().equalsIgnoreCase("管理員")) {supplierTypeList.add(1);break;}else if(csGroup.getSupplierType().equalsIgnoreCase("1")){supplierTypeList.add(Integer.valueOf(csGroup.getSupplierType()));break;}else{supplierTypeList.add(Integer.valueOf(csGroup.getSupplierType()));}}Map param = new HashMap<>();if(supplierTypeList.contains(0)){param.put("createUserId",mailDto.getUserId());}//1 查詢所有 2 自定義 3 普通供應商 4 物流供應商 5 個人 + 自定義 6 個人 + 普通供應商 7 個人 + 物流供應商//8 普通 + 物流 9 普通 + 自定義 10 物流 + 自定義 11 普通 + 個人 + 自定義 12 物流 + 個人 + 自定義if (supplierTypeList.contains(1)) { // 所有param.put("status",1);param.put("companyId", mailDto.getCompanyId());} else if (supplierTypeList.contains(3) && supplierTypeList.contains(4)) { // 普通 + 物流param.put("status",1);param.put("companyId", mailDto.getCompanyId());} else if (supplierTypeList.contains(3) && supplierTypeList.contains(2)) { // 普通 + 自定義param.put("status",9);param.put("companyId", mailDto.getCompanyId());param.put("groupId", groupIdList);} else if (supplierTypeList.contains(4) && supplierTypeList.contains(2)) { // 物流 + 自定義param.put("status",10);param.put("companyId", mailDto.getCompanyId());param.put("groupId", groupIdList);} else if(supplierTypeList.contains(0) && supplierTypeList.contains(2)) { // 個人 + 自定義param.put("status",5);param.put("createUserId",mailDto.getUserId());param.put("groupId",groupIdList);} else if(supplierTypeList.contains(0) && supplierTypeList.contains(3)) { // 個人 + 普通param.put("status",6);param.put("createUserId",mailDto.getUserId());param.put("groupId",groupIdList);} else if(supplierTypeList.contains(0) && supplierTypeList.contains(4)) { // 個人 + 物流param.put("status",7);param.put("createUserId",mailDto.getUserId());param.put("groupId",groupIdList);} else {if (supplierTypeList.contains(3)) {param.put("status",3);param.put("companyId", mailDto.getCompanyId());} else if (supplierTypeList.contains(4)) {param.put("status",4);param.put("companyId", mailDto.getCompanyId());} else if (supplierTypeList.contains(2)) {param.put("status",2);param.put("companyId", mailDto.getCompanyId());param.put("groupId", groupIdList);} else {param.put("status",0);param.put("companyId", mailDto.getCompanyId());param.put("createUserId", mailDto.getUserId());}}if(mailDto.getUserId() != null && mailDto.getUserId() != 0) {param.put("userId", mailDto.getUserId());}param.put("companyId",mailDto.getCompanyId());List<String> supplierMailsRes = supplierContactService.listByUserId(param);List<String> supplierMails = new ArrayList<>();for (String s1:supplierMailsRes) {if(!StringUtils.isEmpty(s1)){supplierMails.add(s1.toLowerCase());}}//判斷是否為imap收郵件是的發郵件不需要保存本地數據//收郵件方式if(accountEntity.getServerType() == 1) {//ImapmailDto.setContent(content);//發送保存String uuid = UUIDUtil.getUUID();Date now = new Date();List<String> toMailList = new ArrayList();List<String> tom = Arrays.asList(mailDto.getToMail().split(","));toMailList = new ArrayList(tom);List<String> wccMail = Arrays.asList(mailDto.getWcc().split(","));List<String> wccMailList = new ArrayList(wccMail);List<String> bccMail = Arrays.asList(mailDto.getBcc().split(","));List<String> bccMailList = new ArrayList(bccMail);List<String> finalToMailList = toMailList;wccMailList.forEach(s -> finalToMailList.add(s));bccMailList.forEach(s -> finalToMailList.add(s));//是否歸并標記boolean istogether = false;//內部聯系人List<String> userMails = accountService.queryByCompany(mailDto.getCompanyId());List<String> innerMails = new ArrayList<>();for (String s : userMails) {if (!StringUtils.isEmpty(s)) {innerMails.add(s.toLowerCase());}}//供應商//查詢角色//List<Integer> groupIdList = new ArrayList<>();List<CsGroup> group = groupService.queryByUserGroup(mailDto.getUserId());group.forEach(csGroup -> groupIdList.add(csGroup.getId()));List<String> supplierContactList = supplierService.queryShareSupplierMailAccountList(groupIdList);List<String> supplierContactMails = new ArrayList<>();for (String s : supplierContactList) {if (!StringUtils.isEmpty(s)) {supplierContactMails.add(s.toLowerCase());}}String hContent = "";//把郵件保存到數據庫MailContent mailEntity = new MailContent();Set<String> s = new HashSet();for (String toMail:finalToMailList) {s.add(toMail);}for (String toMail : s) {istogether = false;//默認不歸并if (StringUtils.isEmpty(toMail)) {continue;}String toAccount;Integer toStart = mailDto.getToMail().indexOf("<") + 1;//尋找開始下標Integer toEnd = mailDto.getToMail().indexOf(">");//尋找結束下標if (toStart != -1 && toEnd != -1) {toAccount = toMail.substring(toStart, toEnd);} else {toAccount = toMail;}List<Map<String, Object>> myshareList = customerService.queryMySharingCustomerByUserIdCompanyIdAndMail(toAccount, mailDto.getUserId(), mailDto.getCompanyId());//我的客戶//List<String> cusList = customerContactService.queryCustomerMailByUserIdAndMail(toAccount,mailDto.getUserId());if (myshareList.size() > 0 || innerMails.contains(toMail.toLowerCase()) || supplierContactMails.contains(toMail.toLowerCase()) || supplierMails.contains(toMail.toLowerCase())) {istogether = true;//表示需要歸并}mailEntity = new MailContent();mailEntity.setUserId(accountEntity.getUserId());mailDto.setUserId(accountEntity.getUserId());mailEntity.setFromMail(mailDto.getFromMail());mailEntity.setFromAccount(mailDto.getFromAccount());mailEntity.setBelongAccount(mailDto.getBelongAccount());//郵件歸屬記錄便于查詢mailEntity.setCompanyId(mailDto.getCompanyId());/*Integer toStart = mailDto.getToMail().indexOf("<") + 1;//尋找開始下標Integer toEnd = mailDto.getToMail().indexOf(">");//尋找結束下標String toAccount;*/if (toStart != -1 && toEnd != -1) {toAccount = toMail.substring(toStart, toEnd);} else {toAccount = toMail;}//郵件發送時標記標簽以及顏色mailEntity.setTagName(mailDto.getTagName());mailEntity.setTagColor(mailDto.getTagColor());mailEntity.setToAccount(toAccount);if (toMail != null && !toMail.equals("")) {mailEntity.setToMail(mailDto.getToMail());}mailEntity.setFlowCell((short) 0);mailEntity.setSubject(mailDto.getSubject());if (mailDto.getBcc() != null) {mailEntity.setBcc(mailDto.getBcc());}if (mailDto.getWcc() != null) {mailEntity.setWcc(mailDto.getWcc());}mailEntity.setIsSend((short) 1);mailEntity.setContent(null);String fileName = UUIDUtil.getUUID() + "-" + new Date().getTime() + ".txt";InputStream is = new ByteArrayInputStream(content.getBytes("UTF-8"));//InputStream is = bodyPart.getInputStream();//ByteArrayInputStream stream= new ByteArrayInputStream(str.getBytes());BufferedInputStream bis = new BufferedInputStream(is);//R path = OssUpload.upload(bis, company.getNameEn().replaceAll(" ","")+"/mail/" + fileName);//http://dt2b.oss-cn-hangzhou.aliyuncs.com/mailEntity.setContentUrl(mailDto.getContentUrl());String contentText = mailDto.getContent();String flowFlag = "";String mailFlag = "";String lastMailFlag = "";String gjmail = "";if (contentText.indexOf("class=\"MT_MID_") >= 0) {String[] contents = contentText.split("class=\"MT_MID_");String[] flags = contents[contents.length - 1].split("_");mailFlag = flags[0];flowFlag = flags[1];lastMailFlag = flags[2].trim();mailEntity.setMailFlag(mailFlag.trim());mailEntity.setMailLastflag(Long.valueOf(flags[2].trim()));String[] gjmailArra = flags[3].split("\"");//可能是下次跟進,也可能是下次跟進時間加郵箱gjmail = gjmailArra[0].trim();} else {}//TODO 郵件大小為-1,錯誤mailEntity.setMailSize("" + message.getSize());if (list != null && list.size() > 0) {mailEntity.setIsEnclose(1);} else {mailEntity.setIsEnclose(0);}mailEntity.setSendTime(now);mailEntity.setReceiveTime(now);if (null != mailDto.getWcc() && !mailDto.getWcc().isEmpty()) {mailEntity.setWcc(mailDto.getWcc());}if (null != mailDto.getBcc() && !mailDto.getBcc().isEmpty()) {mailEntity.setBcc(mailDto.getBcc());}mailEntity.setFlagRead((short) 1);mailEntity.setType((short) 1);mailEntity.setDeleteStatus(0);if (istogether) {mailEntity.setBoxId(-1L);} else {mailEntity.setBoxId(3L);//已發箱}String msgId = message.getMessageID();int startIndex = msgId.indexOf("<");int endIndex = msgId.indexOf(">");//mailEntity.setMsgId(msgId.substring(startIndex,endIndex));mailEntity.setMsgId(uuid);mailEntity.setSendStatus(1);//發送成功mailEntity.setSendmailFlag(""+dateTime);mailContentMapper.insertSelective(mailEntity);//發郵件加像素記錄//uuId像素標記保存//異步分析磁盤CustomLocus customLocus = new CustomLocus();customLocus.setCreateTime(new Date());customLocus.setSourceId(mailEntity.getId());customLocus.setUid(uuId);customLocus.setType(LocusEnum.MP.toString());customLocus.setIsRead(false);//設置未讀customLocusService.insertSelective(customLocus);//跟進時間到期提醒消息hContent = "<div><p><span>主題:</span><span>" + mailEntity.getSubject() + "</span></p><p><span>發件時間:</span><span>" + DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,mailEntity.getSendTime()) + "</span></p><p><span>收件人:</span><span>" + mailEntity.getToMail() +(mailEntity.getWcc()==null?"":(" "+mailEntity.getWcc()))+(mailEntity.getBcc()==null?"":(" "+mailEntity.getBcc()))+"</span></p></div>";//客戶交流社區里的正文//添加標簽if (delayMessageStruct.getFollowId() != null && !delayMessageStruct.getFollowId().equals("")) {SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");MailFollow follow = new MailFollow();follow.setMailId(mailEntity.getId());follow.setTagId(Long.parseLong(delayMessageStruct.getFollowId()));follow.setFollowTime(new Date());if (!StringUtils.isEmpty(mailDto.getNextFollowTime())) {follow.setNextFollowTime(dateformat.parse(mailDto.getNextFollowTime()));}if (!StringUtils.isEmpty(flowFlag)) {//將mailFlag相同的id跟蹤記錄刪除followMapper.deleteMailFollowMailFlagAndId(mailFlag, mailEntity.getId(), mailDto.getUserId());}followMapper.insertSelective(follow);}//保存附件if (list != null && list.size() > 0) {for (Map map : list) {MailAttachment attachment = new MailAttachment();attachment.setMailId(mailEntity.getId());attachment.setInline(false);attachment.setAttachmentUrl(map.get("url").toString());attachment.setFilename(map.get("fileName").toString());attachment.setFilesize(map.get("fileSize") == null ? "0" : map.get("fileSize").toString());attachment.setUserId(mailEntity.getUserId());attachment.setUploadTime(new Date());attachmentService.insertSelective(attachment);}}if(myshareList.size()>0){//存入客戶社區:客戶訪問CsUser csUser = csUserService.queryByuserid(mailDto.getUserId());CustomCommunity customCommunity = new CustomCommunity();customCommunity.setTittle("【" + csUser.getRealname() + "】于" +DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,mailEntity.getSendTime()) + "向" + mailEntity.getToAccount() + "發送郵件");//String htmlContent = "<div><p><span>主題:</span><span>" + mailEntity.getSubject() + "</span></p><p><span>發件人:</span><span>" + mailEntity.getFromAccount() + "</span></p><p><span>收件人:</span><span>" + mailEntity.getToAccount() + "</span></p></div>";//客戶交流社區里的正文String htmlContent = "主題:" + mailEntity.getSubject() + " 發件人:" + mailEntity.getFromAccount() + " 收件人:" + mailEntity.getToMail();//客戶交流社區里的正文if(!StringUtils.isEmpty(mailEntity.getWcc())){htmlContent = htmlContent+" 抄送:"+mailEntity.getWcc();}customCommunity.setContent(htmlContent);customCommunity.setSourceId(mailEntity.getId());customCommunity.setType(LocusEnum.MS.toString());customCommunity.setCreateTime(mailEntity.getSendTime());customCommunity.setUserId(mailEntity.getUserId());customCommunityService.insertSelective(customCommunity);}}if(mailDto.getNextFollowTime()!=null){CsMsgPush csMsgPush = new CsMsgPush();hContent = "主題:"+mailEntity.getSubject() +",發件時間:"+DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,mailEntity.getSendTime())+",收件人:"+mailEntity.getToMail();csMsgPush.setId(UUIDUtil.getUUID());csMsgPush.setMsgContent(hContent);csMsgPush.setMsgSendTime(DateUtils.parseDate(mailDto.getNextFollowTime()));csMsgPush.setMsgStatus((short)0);csMsgPush.setCreateTime(new Date());csMsgPush.setMsgType(4);//郵件csMsgPush.setUserId(mailEntity.getUserId());csMsgPush.setSourceId(""+mailEntity.getId());msgPushMapper.insertSelective(csMsgPush);}annaylizeOssDirSpaceService.annaylizeOssDirSpace("" + message.getSize(), mailDto.getCompanyId());mailContentMapper.deleteByPrimaryKey(id);//郵件發送后啟動收郵件receiverMailByOneAccountService.receiverMailByOneAccount(mailDto.getFromAccount(),mailDto.getCompanyId(),accountEntity.getUserId());}else {mailDto.setContent(content);//發送保存String uuid = UUIDUtil.getUUID();Date now = new Date();List<String> toMailList = new ArrayList();List<String> tom = Arrays.asList(mailDto.getToMail().split(","));toMailList = new ArrayList(tom);List<String> wccMail = Arrays.asList(mailDto.getWcc().split(","));List<String> wccMailList = new ArrayList(wccMail);List<String> bccMail = Arrays.asList(mailDto.getBcc().split(","));List<String> bccMailList = new ArrayList(bccMail);List<String> finalToMailList = toMailList;wccMailList.forEach(s -> finalToMailList.add(s));bccMailList.forEach(s -> finalToMailList.add(s));//是否歸并標記boolean istogether = false;//內部聯系人List<String> userMails = accountService.queryByCompany(mailDto.getCompanyId());List<String> innerMails = new ArrayList<>();for (String s : userMails) {if (!StringUtils.isEmpty(s)) {innerMails.add(s.toLowerCase());}}//供應商//查詢角色//List<Integer> groupIdList = new ArrayList<>();List<CsGroup> group = groupService.queryByUserGroup(mailDto.getUserId());group.forEach(csGroup -> groupIdList.add(csGroup.getId()));List<String> supplierContactList = supplierService.queryShareSupplierMailAccountList(groupIdList);List<String> supplierContactMails = new ArrayList<>();for (String s : supplierContactList) {if (!StringUtils.isEmpty(s)) {supplierContactMails.add(s.toLowerCase());}}String hContent = "";//把郵件保存到數據庫MailContent mailEntity = new MailContent();Set<String> s = new HashSet();for (String toMail:finalToMailList) {s.add(toMail);}for (String toMail : s) {istogether = false;//默認不歸并if (StringUtils.isEmpty(toMail)) {continue;}String toAccount;Integer toStart = mailDto.getToMail().indexOf("<") + 1;//尋找開始下標Integer toEnd = mailDto.getToMail().indexOf(">");//尋找結束下標if (toStart != -1 && toEnd != -1) {toAccount = toMail.substring(toStart, toEnd);} else {toAccount = toMail;}List<Map<String, Object>> myshareList = customerService.queryMySharingCustomerByUserIdCompanyIdAndMail(toAccount, mailDto.getUserId(), mailDto.getCompanyId());//我的客戶//List<String> cusList = customerContactService.queryCustomerMailByUserIdAndMail(toAccount,mailDto.getUserId());if (myshareList.size() > 0 || innerMails.contains(toMail.toLowerCase()) || supplierContactMails.contains(toMail.toLowerCase()) || supplierMails.contains(toMail.toLowerCase())) {istogether = true;//表示需要歸并}mailEntity = new MailContent();mailEntity.setUserId(accountEntity.getUserId());mailDto.setUserId(accountEntity.getUserId());mailEntity.setFromMail(mailDto.getFromMail());mailEntity.setFromAccount(mailDto.getFromAccount());mailEntity.setBelongAccount(mailDto.getBelongAccount());//郵件歸屬記錄便于查詢mailEntity.setCompanyId(mailDto.getCompanyId());/*Integer toStart = mailDto.getToMail().indexOf("<") + 1;//尋找開始下標Integer toEnd = mailDto.getToMail().indexOf(">");//尋找結束下標String toAccount;*/if (toStart != -1 && toEnd != -1) {toAccount = toMail.substring(toStart, toEnd);} else {toAccount = toMail;}//郵件發送時標記標簽以及顏色mailEntity.setTagName(mailDto.getTagName());mailEntity.setTagColor(mailDto.getTagColor());mailEntity.setToAccount(toAccount);if (toMail != null && !toMail.equals("")) {mailEntity.setToMail(mailDto.getToMail());}mailEntity.setFlowCell((short) 0);mailEntity.setSubject(mailDto.getSubject());if (mailDto.getBcc() != null) {mailEntity.setBcc(mailDto.getBcc());}if (mailDto.getWcc() != null) {mailEntity.setWcc(mailDto.getWcc());}mailEntity.setIsSend((short) 1);mailEntity.setContent(null);String fileName = UUIDUtil.getUUID() + "-" + new Date().getTime() + ".txt";InputStream is = new ByteArrayInputStream(content.getBytes("UTF-8"));//InputStream is = bodyPart.getInputStream();//ByteArrayInputStream stream= new ByteArrayInputStream(str.getBytes());BufferedInputStream bis = new BufferedInputStream(is);//R path = OssUpload.upload(bis, company.getNameEn().replaceAll(" ","")+"/mail/" + fileName);//http://dt2b.oss-cn-hangzhou.aliyuncs.com/mailEntity.setContentUrl(mailDto.getContentUrl());String contentText = mailDto.getContent();String flowFlag = "";String mailFlag = "";String lastMailFlag = "";String gjmail = "";if (contentText.indexOf("class=\"MT_MID_") >= 0) {String[] contents = contentText.split("class=\"MT_MID_");String[] flags = contents[contents.length - 1].split("_");mailFlag = flags[0];flowFlag = flags[1];lastMailFlag = flags[2].trim();mailEntity.setMailFlag(mailFlag.trim());mailEntity.setMailLastflag(Long.valueOf(flags[2].trim()));String[] gjmailArra = flags[3].split("\"");//可能是下次跟進,也可能是下次跟進時間加郵箱gjmail = gjmailArra[0].trim();} else {}//TODO 郵件大小為-1,錯誤mailEntity.setMailSize("" + message.getSize());if (list != null && list.size() > 0) {mailEntity.setIsEnclose(1);} else {mailEntity.setIsEnclose(0);}mailEntity.setSendTime(now);mailEntity.setReceiveTime(now);if (null != mailDto.getWcc() && !mailDto.getWcc().isEmpty()) {mailEntity.setWcc(mailDto.getWcc());}if (null != mailDto.getBcc() && !mailDto.getBcc().isEmpty()) {mailEntity.setBcc(mailDto.getBcc());}mailEntity.setFlagRead((short) 1);mailEntity.setType((short) 1);mailEntity.setDeleteStatus(0);if (istogether) {mailEntity.setBoxId(-1L);} else {mailEntity.setBoxId(3L);//已發箱}String msgId = message.getMessageID();int startIndex = msgId.indexOf("<");int endIndex = msgId.indexOf(">");//mailEntity.setMsgId(msgId.substring(startIndex,endIndex));mailEntity.setMsgId(uuid);mailEntity.setSendStatus(1);//發送成功mailContentMapper.insertSelective(mailEntity);//發郵件加像素記錄//uuId像素標記保存//異步分析磁盤CustomLocus customLocus = new CustomLocus();customLocus.setCreateTime(new Date());customLocus.setSourceId(mailEntity.getId());customLocus.setUid(uuId);customLocus.setType(LocusEnum.MP.toString());customLocus.setIsRead(false);//設置未讀customLocusService.insertSelective(customLocus);//跟進時間到期提醒消息hContent = "<div><p><span>主題:</span><span>" + mailEntity.getSubject() + "</span></p><p><span>發件時間:</span><span>" + DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,mailEntity.getSendTime()) + "</span></p><p><span>收件人:</span><span>" + mailEntity.getToMail() +(mailEntity.getWcc()==null?"":(" "+mailEntity.getWcc()))+(mailEntity.getBcc()==null?"":(" "+mailEntity.getBcc()))+"</span></p></div>";//客戶交流社區里的正文//添加標簽if (delayMessageStruct.getFollowId() != null && !delayMessageStruct.getFollowId().equals("")) {SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");MailFollow follow = new MailFollow();follow.setMailId(mailEntity.getId());follow.setTagId(Long.parseLong(delayMessageStruct.getFollowId()));follow.setFollowTime(new Date());if (!StringUtils.isEmpty(mailDto.getNextFollowTime())) {follow.setNextFollowTime(dateformat.parse(mailDto.getNextFollowTime()));}if (!StringUtils.isEmpty(flowFlag)) {//將mailFlag相同的id跟蹤記錄刪除followMapper.deleteMailFollowMailFlagAndId(mailFlag, mailEntity.getId(), mailDto.getUserId());}followMapper.insertSelective(follow);}//保存附件if (list != null && list.size() > 0) {for (Map map : list) {MailAttachment attachment = new MailAttachment();attachment.setMailId(mailEntity.getId());attachment.setInline(false);attachment.setAttachmentUrl(map.get("url").toString());attachment.setFilename(map.get("fileName").toString());attachment.setFilesize(map.get("fileSize") == null ? "0" : map.get("fileSize").toString());attachment.setUserId(mailEntity.getUserId());attachment.setUploadTime(new Date());attachmentService.insertSelective(attachment);}}if(myshareList.size()>0){//存入客戶社區:客戶訪問CsUser csUser = csUserService.queryByuserid(mailDto.getUserId());CustomCommunity customCommunity = new CustomCommunity();customCommunity.setTittle("【" + csUser.getRealname() + "】于" +DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,mailEntity.getSendTime()) + "向" + mailEntity.getToAccount() + "發送郵件");//String htmlContent = "<div><p><span>主題:</span><span>" + mailEntity.getSubject() + "</span></p><p><span>發件人:</span><span>" + mailEntity.getFromAccount() + "</span></p><p><span>收件人:</span><span>" + mailEntity.getToAccount() + "</span></p></div>";//客戶交流社區里的正文String htmlContent = "主題:" + mailEntity.getSubject() + " 發件人:" + mailEntity.getFromAccount() + " 收件人:" + mailEntity.getToMail();//客戶交流社區里的正文if(!StringUtils.isEmpty(mailEntity.getWcc())){htmlContent = htmlContent+" 抄送:"+mailEntity.getWcc();}customCommunity.setContent(htmlContent);customCommunity.setSourceId(mailEntity.getId());customCommunity.setType(LocusEnum.MS.toString());customCommunity.setCreateTime(mailEntity.getSendTime());customCommunity.setUserId(mailEntity.getUserId());customCommunityService.insertSelective(customCommunity);}}if(mailDto.getNextFollowTime()!=null){CsMsgPush csMsgPush = new CsMsgPush();hContent = "主題:"+mailEntity.getSubject() +",發件時間:"+DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS,mailEntity.getSendTime())+",收件人:"+mailEntity.getToMail();csMsgPush.setId(UUIDUtil.getUUID());csMsgPush.setMsgContent(hContent);csMsgPush.setMsgSendTime(DateUtils.parseDate(mailDto.getNextFollowTime()));csMsgPush.setMsgStatus((short)0);csMsgPush.setCreateTime(new Date());csMsgPush.setMsgType(4);//郵件csMsgPush.setUserId(mailEntity.getUserId());csMsgPush.setSourceId(""+mailEntity.getId());msgPushMapper.insertSelective(csMsgPush);}annaylizeOssDirSpaceService.annaylizeOssDirSpace("" + message.getSize(), mailDto.getCompanyId());mailContentMapper.deleteByPrimaryKey(id);Long deliveryTay = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);channel.basicAck(deliveryTay, false);}} catch (Exception e) {/* MailContent m = new MailContent();m.setId(id);m.setIsSyn((short)1);mailContentMapper.updateByPrimaryKey(m);*/sendTipMail(mailDto.getSubject(),mailDto.getFromMail(),new Date(),e.getMessage(),mailDto.getToMail());//發送失敗MailContent m = new MailContent();m.setId(id);m.setSendStatus(0);//發送失敗mailContentMapper.updateByPrimaryKeySelective(m);e.printStackTrace();Long deliveryTay = (Long)headers.get(AmqpHeaders.DELIVERY_TAG);try {channel.basicAck(deliveryTay,false);} catch (IOException ex) {ex.printStackTrace();}}}public void sendTipMail(String subject, String fromMail, Date date,String reson,String toMail) {//CsCompany company = companyMapper.selectByPrimaryKey(companyId);MailAccountWithBLOBs accountEntity = accountMapper.queryMailPassword(MatuConfig.servermail,null,null);//查找發件人授權碼if(accountEntity==null){return;}String pwd = accountEntity.getPassword();//發件人授權碼(未解密)String privateKey = accountEntity.getPrivateKey();//解密秘鑰String target = RSAUtils.decryptByPrivateKey(pwd, privateKey);String emailPassword = target;String emailSMTPHost = accountEntity.getServerAddrS();//發件服務器地址Short serverSSL = accountEntity.getServerSslS();//判斷是否需要SSL加密Short serverStartTLS = accountEntity.getServerStarttls();List<Map> list = new ArrayList();Context con = new Context(new Locale(""));con.setVariable("subject", subject);con.setVariable("date", date);con.setVariable("reson", reson);con.setVariable("toMail", toMail);String html = this.templateEngine.process("mail/hello", con);//創建并發送郵件try {MimeMessage message = MailUtils.createMimeMessage(MatuConfig.servermail,MatuConfig.servermail, fromMail, null, null, "系統發送郵件失敗通知!", html, emailPassword, emailSMTPHost, serverSSL, serverStartTLS, list);} catch (Exception e) {e.printStackTrace();}} }

總結

以上是生活随笔為你收集整理的RabbitMQ延迟队列实现定时发邮件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

97电影在线| 天天想夜夜操 | 国产久视频 | 欧美日本中文字幕 | 欧美日韩视频在线观看一区二区 | 亚洲色图27p| 色婷婷av国产精品 | 久久深夜福利免费观看 | 黄色小视频在线观看免费 | 精品一区二区三区四区在线 | 亚洲在线视频免费观看 | 99日韩精品 | 亚洲 在线| 日韩av电影一区 | 91欧美精品 | 亚洲一区二区观看 | 在线国产视频 | 亚洲毛片久久 | 中文字幕第一 | 亚洲欧美激情精品一区二区 | 国产又黄又爽又猛视频日本 | 日韩在线观看精品 | 亚洲黄色一级视频 | 国产精品乱码一区二区视频 | 天天操天天吃 | 国产成人精品一区二三区 | 伊人久久精品久久亚洲一区 | 精品一区二区三区四区在线 | 亚洲国产免费网站 | 8x成人在线 | 成年人黄色大全 | 久久综合九色综合欧美就去吻 | 久久久久久久久久久久av | 色夜影院 | 操老逼免费视频 | 友田真希x88av | 免费久久99精品国产婷婷六月 | 日韩av在线免费看 | 国产一区二区综合 | 国产精品你懂的在线观看 | 黄在线免费观看 | 天天鲁天天干天天射 | 国产精品一区二区三区电影 | 久久人人插 | 97视频在线看 | 国语麻豆 | 亚洲专区欧美专区 | 国产91勾搭技师精品 | 黄色网址国产 | 手机av在线免费观看 | 亚洲国产精品小视频 | 狠狠ri| 91精品日韩 | 99精品热视频只有精品10 | 欧美九九九 | 色综合天天干 | 日韩激情中文字幕 | 亚洲国产一区二区精品专区 | 96av在线| www.com久久 | 国产麻豆剧果冻传媒视频播放量 | 97精产国品一二三产区在线 | 久久精品资源 | 亚洲黄色一级视频 | 中文国产字幕 | 日韩欧美在线一区二区 | 国产欧美精品在线观看 | 亚洲视频免费在线看 | 免费av成人在线 | 欧美一级片免费播放 | 亚洲另类在线视频 | 久久久久在线视频 | 超碰在线观看av.com | 中文日韩在线视频 | 日本久久精 | 午夜久久视频 | 亚州精品天堂中文字幕 | 亚洲视频久久久久 | 天天拍夜夜拍 | 天天干夜夜爽 | 一区二区三区在线影院 | 五月婷视频 | 国产成人av片 | 久久国产网站 | 精品福利国产 | 色综合久久五月天 | 2023亚洲精品国偷拍自产在线 | 337p日本欧洲亚洲大胆裸体艺术 | 亚洲理论电影 | 中文一区在线观看 | 在线免费视频 你懂得 | 日韩一区二区在线免费观看 | 波多野结衣视频一区二区 | 久久高清视频免费 | 91久久国产露脸精品国产闺蜜 | 九九久久国产精品 | 日韩在线免费高清视频 | 日韩精品久久久久久久电影竹菊 | 欧美日韩精品免费观看视频 | 色天天综合网 | 亚洲免费公开视频 | 91九色国产视频 | adc在线观看 | 欧美性直播 | www.黄色片网站 | 激情综合网色播五月 | 中文字幕一区2区3区 | 一区在线播放 | 精品国产一区二区三区四区vr | 91久久精品一区二区二区 | 99久久精品国产一区二区成人 | 久久短视频 | 人人草人 | 国产无遮挡又黄又爽在线观看 | 久久国产精品99精国产 | 亚洲精品伦理在线 | 在线观看视频一区二区三区 | 精品国产伦一区二区三区观看方式 | 中文字幕在线观看视频网站 | 久热av在线 | 婷婷久久综合网 | 亚洲精品电影在线 | 久久久久久久久久久久久国产精品 | 天天射天天干天天 | 国产手机视频 | 天天干夜夜夜 | 国产在线久草 | 色婷婷综合视频在线观看 | 久久深夜 | 又爽又黄又刺激的视频 | 91欧美日韩国产 | 亚洲 精品在线视频 | 久久五月激情 | 在线观看av免费 | 久久久久久国产一区二区三区 | 日本久久久久久久久久久 | 日韩精品视频在线免费观看 | 久久国产精品影片 | 天天操天天弄 | 成人av免费在线 | 国产成人一区二区三区久久精品 | 国内成人精品2018免费看 | 欧美黑人性猛交 | av在线免费观看网站 | 久久不卡国产精品一区二区 | 亚洲日日夜夜 | 伊人久久精品久久亚洲一区 | 午夜久操 | 伊人黄色网 | 欧美一级片播放 | www.香蕉视频 | 人人爽人人爽人人爽 | 中文字幕传媒 | 1000部国产精品成人观看 | www激情com | 91福利影院在线观看 | 精品国产伦一区二区三区观看说明 | 伊人婷婷网 | 精品亚洲午夜久久久久91 | 高清av免费看 | 国产亚洲精品中文字幕 | 天堂在线一区二区 | 人人澡人摸人人添学生av | 欧美日韩激情视频8区 | 福利片视频区 | 日日麻批40分钟视频免费观看 | 天天干天天草 | 天天艹天天操 | 国产视频一区二区在线播放 | 国产成人av片 | 天天摸日日摸人人看 | 亚洲精区二区三区四区麻豆 | 中文字幕91 | 91免费高清视频 | www黄免费 | 中文字幕久久久精品 | 91最新在线视频 | 高清国产一区 | 亚洲一区精品二人人爽久久 | 国产精品va视频 | 精品久久久久久久久久久久久久久久久久 | 色综合天天狠天天透天天伊人 | 欧美三级免费 | 国产一区黄色 | 色丁香色婷婷 | 最近中文字幕久久 | 黄色一级大片在线免费看国产一 | 欧美精品一区二区蜜臀亚洲 | 婷婷在线精品视频 | 五月天中文字幕 | 精品视频中文字幕 | 国产成a人亚洲精v品在线观看 | 午夜影院在线观看18 | 国产精品99久久久久久小说 | 精品久久久久久亚洲综合网 | 免费热情视频 | 精品国产欧美一区二区三区不卡 | 国产精品久久久久久模特 | 欧美网址在线观看 | 天堂av官网 | 久久色视频| 日产乱码一二三区别在线 | 久久久久激情视频 | 国产精品igao视频网网址 | 国产黄色电影 | 久久免费试看 | 青青五月天| 日本中文不卡 | 激情av网| 日韩手机在线观看 | а天堂中文最新一区二区三区 | 在线观看免费av网 | 国产亚洲片 | 婷婷视频导航 | 久草视频国产 | 国产一区二区播放 | 六月丁香婷婷网 | 国产视频日本 | 欧美日韩中 | 在线你懂的视频 | 欧美激情操 | 国产精品18久久久久久首页狼 | 日日干天天 | 91麻豆国产福利在线观看 | 国产高清久久 | 91在线免费看片 | 色丁香久久 | 丰满少妇一级片 | 国产探花视频在线播放 | 日韩视频1区 | 成人国产网站 | 日日干视频 | 精品1区二区 | 91免费版在线 | www.com黄色 | 国内成人精品2018免费看 | 久久精品精品 | 国产第一页精品 | 少妇搡bbbb搡bbb搡忠贞 | jizz欧美性9 国产一区高清在线观看 | 天天干夜夜爱 | 在线观看一区 | 欧美a在线免费观看 | 亚洲精品在线资源 | 国产九九九九九 | 亚洲免费av在线播放 | 久久亚洲私人国产精品va | 99国产精品一区二区 | 一级片色播影院 | www.神马久久 | 天天干天天做 | 91亚洲精 | 波多野结衣日韩 | 97色婷婷人人爽人人 | 精品视频中文字幕 | 国产精品短视频 | 中文字幕一区二区三区四区视频 | 日韩中文久久 | 日韩在线影视 | 欧美成人影音 | 一级黄色片在线观看 | 99久热在线精品视频 | 成人aaa毛片 | 99精品国产一区二区三区不卡 | av在线超碰 | 中文字幕在线免费播放 | 在线а√天堂中文官网 | 久久久久久欧美二区电影网 | 国内揄拍国内精品 | 国产激情小视频在线观看 | 草久视频在线 | 91香蕉亚洲精品 | 久久国产精品色婷婷 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 亚洲欧美精品在线 | 精品久久久久久亚洲 | 成人免费视频网 | av资源在线观看 | 成人av动漫在线观看 | a级国产乱理伦片在线观看 亚洲3级 | 久久人人爽 | 日韩视频免费 | 精品国产一区二区三区日日嗨 | 日韩www在线| 亚州精品天堂中文字幕 | 久久久精品一区二区三区 | 国产一级不卡视频 | 在线视频第一页 | 91桃色免费视频 | 国产免费三级在线观看 | 黄色精品一区二区 | 五月婷婷激情六月 | 五月婷婷激情网 | 成人综合婷婷国产精品久久免费 | 亚洲精品乱码久久久久久蜜桃动漫 | 黄色成人毛片 | 国产精品私人影院 | www.久久精品视频 | 丁香导航 | 91视频高清免费 | 国产原创91 | 97精品在线视频 | 91九色精品女同系列 | sm免费xx网站 | 亚洲1区 在线 | 国产一二区视频 | 狠狠狠色丁香综合久久天下网 | 国产精品九九九九九 | 免费观看一级一片 | 免费黄a大片 | 香蕉在线视频播放网站 | 毛片网免费 | 婷婷视频在线 | 欧洲在线免费视频 | 亚洲综合狠狠干 | 99热播精品| 青春草视频在线播放 | 黄色99视频| 国产一区二区高清 | 午夜精品久久久 | 日韩高清国产精品 | 国产在线视频一区 | 国产精品一区久久久久 | www.伊人色.com | 欧洲亚洲精品 | 日本中文字幕在线观看 | 丁香电影小说免费视频观看 | 九色91在线| 最近中文字幕在线中文高清版 | 天天干天天操人体 | 91cn国产在线| av黄色一级片 | 91视频在线观看下载 | 久久久久久久99精品免费观看 | 天天操网站 | 激情婷婷六月 | 亚洲一区动漫 | 99精品在线免费观看 | 最新av网站在线观看 | 超碰97人人射妻 | 天天激情综合 | 在线观看岛国 | 国产精品福利无圣光在线一区 | 91豆麻精品91久久久久久 | 黄色三级视频片 | 国产不卡精品视频 | 久久免费视频这里只有精品 | 久99久中文字幕在线 | 亚洲精品国产自产拍在线观看 | 免费黄色av片 | 亚洲视频精选 | 色综合久久综合中文综合网 | 免费视频一区 | 香蕉影视 | www日韩精品 | 国产很黄很色的视频 | 日韩免费一二三区 | 日韩在线网 | 久久午夜电影院 | 色婷婷综合久久久久中文字幕1 | 国产精品s色 | 亚洲第一中文字幕 | 狠狠操狠狠干天天操 | 欧美99热| 午夜影视av| 婷婷六月天丁香 | 国产精品v欧美精品 | 婷婷射五月 | 亚洲人人精品 | 97视频亚洲 | 国内外成人在线视频 | 日韩免费电影在线观看 | www.97视频 | www.夜夜草| 国产日韩在线视频 | 操高跟美女| 91精品久久久久久综合乱菊 | 国产在线不卡精品 | 中文字幕最新精品 | 日本黄色免费播放 | 不卡的av电影 | 美女久久久久 | 成人免费影院 | www欧美色| 成全在线视频免费观看 | 国产第一页在线观看 | 日韩视频在线观看视频 | 国产精品久久久久久久久久久久午夜片 | 国产又粗又长又硬免费视频 | 五月天天色 | 丰满少妇在线观看网站 | 6080yy精品一区二区三区 | 免费观看黄色12片一级视频 | 粉嫩aⅴ一区二区三区 | 99久久激情| 亚洲精品在线看 | 中文字幕在线看片 | 青青河边草免费观看完整版高清 | 久久九九影视 | 久久五月情影视 | www.在线观看视频 | 手机成人免费视频 | 波多野结衣在线视频一区 | 国产精品女视频 | 激情久久影院 | 国产亚洲高清视频 | 激情伊人五月天久久综合 | 婷婷性综合 | 日本中文字幕免费观看 | 婷色在线 | 日韩视频在线观看视频 | 麻花豆传媒mv在线观看网站 | 992tv在线观看 | 日韩精品视频免费专区在线播放 | 91最新网址在线观看 | 精品一区二区在线看 | 国产在线欧美日韩 | 992tv在线 | 九七视频在线观看 | 国产精品涩涩屋www在线观看 | 久久精品视频免费 | 国产精品久久久久久久久软件 | 久久精品国产免费观看 | 日本不卡一区二区三区在线观看 | 日本最新高清不卡中文字幕 | 免费看毛片在线 | 亚洲欧美日韩一区二区三区在线观看 | 日韩色高清 | 青草视频免费观看 | 在线激情影院一区 | 成人av免费在线播放 | 午夜视频免费在线观看 | 午夜123 | 午夜在线日韩 | 国产自偷自拍 | 免费久久99精品国产婷婷六月 | 成人av在线网 | 成年性视频 | 久久精品国产精品 | 九热在线 | 丁香视频免费观看 | 欧美精彩视频在线观看 | 丁香六月av | 成人福利av | 黄色免费av | www.亚洲精品视频 | 日韩高清在线观看 | 久久精品人人做人人综合老师 | 成人久久毛片 | 91成人精品一区在线播放69 | a爱爱视频 | 欧美天天综合 | 美女av电影 | 亚洲女人天堂成人av在线 | 日韩综合在线观看 | 久久久久久高潮国产精品视 | 国产精品少妇 | 国产精品999久久久 久产久精国产品 | 99热播精品 | 亚洲欧美激情精品一区二区 | 麻花豆传媒一二三产区 | 国产精品久久嫩一区二区免费 | 天天干人人插 | 五月婷婷激情五月 | 日本最新一区二区三区 | 国产91精品看黄网站在线观看动漫 | 成人在线超碰 | 日韩精品视频免费 | 中文字幕av在线免费 | 欧美二区在线播放 | 国产日韩在线观看一区 | 国产亚洲一区 | 国产一区二区不卡视频 | av久久在线 | 婷婷福利影院 | 一区二区不卡在线观看 | 日韩小视频网站 | 视频在线精品 | 四虎成人精品永久免费av | 三级av免费看 | 九草视频在线观看 | 亚洲性视频| 超碰资源在线 | 亚洲成人av片 | 国产一级在线 | 日本黄色片一区二区 | 五月天.com| 黄色片视频在线观看 | 美女视频黄网站 | 手机看片中文字幕 | 99精品在这里 | 免费看高清毛片 | 少妇精品久久久一区二区免费 | 久久久蜜桃 | www久久久| 国产精品免费大片视频 | 91麻豆产精品久久久久久 | 色婷婷亚洲综合 | 日日夜夜天天综合 | 99久久精品午夜一区二区小说 | 亚洲三级影院 | 国产精品一区在线播放 | 二区三区毛片 | 蜜桃麻豆www久久囤产精品 | 久久精品中文视频 | 18岁免费看片 | 波多野结衣资源 | 91精品国自产在线观看欧美 | 欧美日韩在线免费观看视频 | 国产一卡二卡在线 | 亚洲国产网址 | 亚洲黄色小说网 | 天天插天天色 | 日韩理论视频 | 久久伊人精品一区二区三区 | 黄色91在线 | 免费久久99精品国产 | 国产免费av一区二区三区 | 在线国产激情视频 | 免费精品在线视频 | 久久精选视频 | 午夜婷婷网 | 日韩性久久 | 99在线视频精品 | 人人添人人澡 | 人人爽久久涩噜噜噜网站 | 国产在线视频一区二区三区 | 丁香网五月天 | 国产69精品久久久久9999apgf | 久久avav | 超碰官网 | 国产精品资源在线 | 日韩av免费观看网站 | 国产成人精品网站 | 99热国产在线观看 | 国产色视频网站2 | 99视频在线 | 国产精品精品视频 | 黄色小说在线观看视频 | 狠狠躁日日躁狂躁夜夜躁 | 国产美女视频免费观看的网站 | 亚州中文av | 亚洲精品国偷自产在线91正片 | 国产高清第一页 | 成人一级电影在线观看 | 国产精品美乳一区二区免费 | 麻豆精品传媒视频 | 国产福利91精品 | 色婷婷 亚洲 | 久草网站在线 | 日韩视频区| 久久久亚洲电影 | 国产欧美日韩视频 | 一区免费观看 | 久久综合在线 | 综合网伊人 | 国产精品久久久久久久久久尿 | 国产 色 | 中文字幕在线成人 | 中文字幕欲求不满 | 在线观看精品一区 | 亚洲精品欧美专区 | 91精品国产电影 | 婷婷在线免费观看 | 亚洲第一香蕉视频 | 日日弄天天弄美女bbbb | 久久好看 | 麻豆国产视频下载 | 日本视频久久久 | 西西4444www大胆无视频 | 久影院| 婷婷午夜激情 | 国产精品女同一区二区三区久久夜 | 亚洲激情在线 | 香蕉视频国产在线 | 人人添人人澡人人澡人人人爽 | 99久久精品久久亚洲精品 | 人人干狠狠干 | 亚洲永久国产精品 | 丁香视频免费观看 | 日本在线视频网址 | 97精品国产97久久久久久免费 | 亚洲一区二区高潮无套美女 | 99久久精品免费看国产四区 | 欧美日本国产在线观看 | 欧美日比视频 | 国内丰满少妇猛烈精品播放 | 久久免费a| 国产尤物一区二区三区 | 在线国产能看的 | 亚洲专区 国产精品 | www.天天成人国产电影 | 麻豆视传媒官网免费观看 | 国产精品青草综合久久久久99 | 人人射人人爱 | 成人在线视频论坛 | 91精品国产91 | 日韩在线观看网站 | zzijzzij亚洲日本少妇熟睡 | www.国产在线 | 久久综合在线 | 成人资源站 | 日韩av电影手机在线观看 | 开心婷婷色 | 一区二区三区不卡在线 | 国产 一区二区三区 在线 | 草久视频在线观看 | 最新久久免费视频 | 亚州精品在线视频 | 久久久伊人网 | 国产在线专区 | av日韩中文 | 亚洲精品视频第一页 | 久久区二区 | 69热国产视频 | 九色精品免费永久在线 | 在线观看av小说 | 九九交易行官网 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 91视频 - 114av | 精品理论片 | 91中文字幕在线播放 | 伊人狠狠色丁香婷婷综合 | www.大网伊人| 久插视频 | 欧美日韩一区二区在线观看 | 亚洲精品在线观看网站 | 精品一区二区三区四区在线 | 午夜国产在线观看 | 国产精品国产三级国产不产一地 | 国产午夜精品一区二区三区四区 | 亚洲在线免费视频 | 色婷婷88av视频一二三区 | 亚洲欧美成人综合 | 久久伊人操| 国产在线一区二区三区播放 | 国产日韩在线播放 | 国产精品日韩在线观看 | 亚洲精品久久久久中文字幕m男 | 成人午夜免费福利 | 亚洲精品国偷拍自产在线观看 | 日本久久免费视频 | 91少妇精拍在线播放 | 日韩视频一区二区三区 | 一区二区三区三区在线 | 69av久久| 欧美疯狂性受xxxxx另类 | 日韩视频免费播放 | 一区二区av | 在线成人中文字幕 | 天堂va在线高清一区 | 国产 日韩 欧美 中文 在线播放 | 国模一二三区 | 久久国产美女视频 | 日韩久久精品一区二区 | 久久这里 | av免费网站在线观看 | 一区二区三区国产欧美 | 久久久久一区二区三区 | 中文字幕国产在线 | 久草精品在线播放 | 91麻豆精品国产91久久久使用方法 | 91高清不卡 | 欧美成年性| 天天干,天天干 | 日韩免费观看一区二区 | 亚洲无在线 | 99精品黄色 | 香蕉在线影院 | 亚洲精品久久久久58 | 亚洲精品久久久久中文字幕二区 | 久久久久麻豆 | 青青草在久久免费久久免费 | 国产福利一区二区三区在线观看 | 亚洲男模gay裸体gay | 97精品国产97久久久久久久久久久久 | 免费十分钟 | 激情综合网天天干 | 国产女人18毛片水真多18精品 | 2023亚洲精品国偷拍自产在线 | 九九热精| 蜜桃av综合网 | 欧美成人手机版 | 在线a视频免费观看 | 精品国产伦一区二区三区 | 日韩精品综合在线 | 在线之家免费在线观看电影 | 免费观看黄色12片一级视频 | 深夜激情影院 | 久久久久www| 婷婷激情小说网 | 五月在线 | 日韩在线免费 | 五月婷婷丁香六月 | 精品久久精品久久 | 国产成人精品久 | 成人影视免费 | 国产aa精品 | 玖玖视频国产 | 天天摸天天舔 | 欧美在线视频一区二区 | 香蕉视频4aa | 亚洲欧美一区二区三区孕妇写真 | 99视频精品全部免费 在线 | 成人小视频在线免费观看 | 伊人网站 | 狠狠狠狠狠狠干 | 黄色成人av | 99视频精品免费视频 | 91精品久久久久久综合乱菊 | 欧美激情综合五月色丁香 | 91在线观看黄 | 中国一级片在线播放 | 亚洲涩涩涩 | 精品国模一区二区 | 日韩一级电影在线观看 | 四虎成人精品永久免费av九九 | 国产 视频 高清 免费 | 久久avav | 国产精品99精品 | 亚洲午夜久久久久久久久久久 | 97香蕉超级碰碰久久免费软件 | 日韩中文字幕免费 | 99热最新网址 | 成人在线超碰 | 六月激情婷婷 | 国产精品久久久久久久7电影 | 麻豆视频91 | 丁香婷婷色月天 | 黄色a在线观看 | 亚洲综合激情 | 麻豆系列在线观看 | 一二区精品| 日本性生活一级片 | 黄色亚洲在线 | 黄色成人在线网站 | 久久99国产综合精品 | 国际精品久久久久 | 国产中出在线观看 | 亚州精品在线视频 | 成年人在线| 人人澡人人草 | 成人av在线直播 | 91在线色 | 欧美中文字幕久久 | 亚洲成av片人久久久 | 亚洲国产三级 | 一区二区三区四区久久 | 六月婷色 | 欧美日韩伦理在线 | 欧美极度另类性三渗透 | 奇米网网址| 夜夜操狠狠操 | 日本黄色一级电影 | 99re8这里有精品热视频免费 | 中文字幕在线日 | 国产欧美精品一区二区三区四区 | 高清av免费看 | 极品国产91在线网站 | 九九九九九九精品 | 99国产精品久久久久老师 | 免费视频xnxx com | 四虎在线观看精品视频 | 涩涩网站在线观看 | 久草在线视频首页 | 成人性生交视频 | 成人av视屏 | 狠狠做深爱婷婷综合一区 | 综合激情网 | 亚洲欧美日韩在线看 | 国产一线二线三线在线观看 | 一本色道久久综合亚洲二区三区 | 国产亚洲在线 | 草莓视频在线观看免费观看 | av电影不卡在线 | 色婷婷一 | 精品久久国产一区 | 超碰人人国产 | 2022中文字幕在线观看 | 久久免费精品视频 | 狠狠操狠狠干天天操 | av在线一级| 亚洲狠狠丁香婷婷综合久久久 | 国产小视频在线免费观看视频 | 欧美日韩精品电影 | 婷婷色在线视频 | 九九在线国产视频 | 成人免费视频播放 | 亚洲成人av在线播放 | 欧美视频在线二区 | 深爱婷婷网| 久久99国产精品久久 | 国产成人三级在线播放 | 嫩草伊人久久精品少妇av | 亚洲精品资源在线观看 | 色狠狠干| 成人啪啪18免费游戏链接 | 日本午夜免费福利视频 | 国产中文字幕视频在线观看 | 99久久日韩精品视频免费在线观看 | 少妇按摩av| 婷婷色在线播放 | 亚洲专区免费观看 | 日韩视 | 麻豆一区在线观看 | www日韩欧美| 国产免费观看视频 | 激情综合网五月 | 天天操天天色天天射 | 波多野结衣亚洲一区二区 | 精品视频免费播放 | 玖玖爱在线观看 | 天天插天天爽 | 国产黄色免费观看 | 精品久久亚洲 | 欧美日韩综合在线 | 国产成人综合精品 | 日韩av黄| 91丨九色丨国产在线 | 久久婷亚洲五月一区天天躁 | 国产精品黄 | 国产精品一区二区三区99 | 日韩精品亚洲专区在线观看 | av黄色在线 | 久久久久久免费 | 日本久久综合视频 | 日韩av三区 | 中文字幕视频网站 | 免费看黄色小说的网站 | 日韩激情久久 | 色在线亚洲 | 亚洲欧洲av在线 | 麻豆国产电影 | 天天在线视频色 | 欧美天堂视频在线 | 国产精品午夜在线观看 | 国产在线精 | 免费日韩电影 | 成人在线播放免费观看 | 国产精品免费在线播放 | 天天色天天色天天色 | 久亚洲| 超碰在线91| 人人爱夜夜操 | 麻豆视频国产在线观看 | 丁香av| 国产美女视频 | 国产不卡片 | 国产又粗又猛又色又黄视频 | 人人爽人人舔 | 日韩精品不卡 | 在线看片一区 | 玖玖视频国产 | 日韩欧美观看 | 国产专区一 | 国产精品高清av | 午夜国产一区二区三区四区 | 97在线观看免费视频 | 久久精品8| 999热线在线观看 | 精品久久久久久久久中文字幕 | 亚洲国产成人精品久久 | 国产精品入口麻豆www | 国内精品久久久久影院男同志 | 毛片一级免费一级 | 日韩免费电影一区二区 | 麻花豆传媒一二三产区 | 韩国一区在线 | 日韩精品一区二 | 最新超碰在线 | 国产亚洲精品日韩在线tv黄 | 69亚洲乱 | 成人超碰在线 | 99综合久久| 久久综合色婷婷 | 欧美99精品 | 国产精品美女久久久久aⅴ 干干夜夜 | 97成人啪啪网 | 国产午夜精品视频 | 色婷婷综合视频在线观看 | 天天爽夜夜爽人人爽一区二区 | 黄色aaa级片| 一区二区成人国产精品 | 久久免费片 | 九九免费在线观看 | 免费观看性生活大片 | 激情影院在线 | 亚洲国产中文在线 | 91成人网在线| 97视频在线免费 | 91精品在线麻豆 | 四虎永久视频 | 女人18毛片a级毛片一区二区 | 一区二区三区精品在线 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 国产免费中文字幕 | 一区二区三区在线不卡 | 久久久网站 | 色香蕉视频 | 亚洲欧美视频网站 | 中文字幕乱码在线播放 | 精品国产乱码久久久久久浪潮 | 日韩一区二区三区免费视频 | av成人在线网站 | 欧美伊人网 | 日韩精品三区四区 | 成人香蕉视频 | 韩国av一区二区三区在线观看 | 在线a亚洲视频播放在线观看 | 欧美色婷婷| 国产亚洲观看 | 亚洲特级毛片 | 亚洲精品玖玖玖av在线看 | 99成人精品 | 国产精品99久久久久久久久久久久 | 国产精品久久久久久久免费 | 亚洲精品成人在线 | 99久久这里只有精品 | 久草视频在线资源 | 91成年人网站 | 国产高清视频免费最新在线 | 二区视频在线观看 | 国产精品九色 | 国产一线在线 | 天堂av观看 | 久草免费在线视频 | 韩日电影在线观看 | 午夜a区| 在线观看av国产 | 天天看天天干 | 米奇狠狠狠888 | 日本黄色免费电影网站 | 91精品爽啪蜜夜国产在线播放 | 99免费看片| 亚洲成年人在线播放 | 亚洲免费a | 超碰大片 | 亚洲精品国偷拍自产在线观看蜜桃 | 不卡电影一区二区三区 | 午夜性生活片 | 午夜在线免费观看 | 国产中文伊人 | 麻豆精品视频在线 | 国产精品女同一区二区三区久久夜 | 欧美ⅹxxxxxx | 人人模人人爽 | 日韩三级免费 | 91爱爱网址 | 久久er99热精品一区二区 | 一区二区国产精品 | 一级片色播影院 | 国产一二区视频 | 日韩视频免费在线观看 | 99麻豆久久久国产精品免费 | 精品国产伦一区二区三区观看方式 | 狠狠色婷婷丁香六月 | 久久艹影院 | 久久综合久久综合九色 | 欧美综合色 | 久久久久电影 | 久久久久日本精品一区二区三区 | 国产亚洲免费的视频看 | 黄色精品一区二区 | 久久久久久久亚洲精品 | 国产九色在线播放九色 | 国产精品一区二区三区在线 | 免费亚洲视频 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 亚洲精品乱码久久 | 91精品婷婷国产综合久久蝌蚪 | 黄色成人av | 噜噜色官网 | 国产精品视频在线观看 | 91大神dom调教在线观看 | 成人免费网站视频 | 国产一级视频免费看 | 亚洲午夜精品在线观看 | 国产黄色精品在线 | 免费观看黄 | 久久久精品视频网站 | 婷婷性综合| 国产亚洲精品久久久久久久久久 | 久久久久成人精品免费播放动漫 | 亚洲精品成人在线 | 在线成人看片 | 亚洲一级片在线看 | 日本丶国产丶欧美色综合 | 天天综合色天天综合 | 国产精品一区久久久久 | 2021国产在线视频 | 最近中文字幕高清字幕在线视频 | 国产精品一区二区免费视频 | 日韩在线网 | av综合av | 亚洲黄色av | 不卡的一区二区三区 | 久草网视频 | 精品免费久久久久久 |