• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            悲情土仔一生

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              14 隨筆 :: 0 文章 :: 74 評(píng)論 :: 0 Trackbacks

            利用Indy 10的IdSMTP控件制作可帶附件的郵件發(fā)送器

            作者:Tuuzed(土仔)   發(fā)表于:2008年7月29日
            版權(quán)聲明:可以任意轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處和作者信息及本聲明
            http://www.shnenglu.com/tuuzed/archive/2008/07/29/57477.html



            Indy10中的IdSMTP控件比BCB6中自帶的NMSMTP支持更多的SMTP命令(支持RFC 821,RFC 1869 ,RFC 2197 ,RFC 2554),像國內(nèi)的網(wǎng)易、TOM、21CN等的SMTP都需要EHLO命令先進(jìn)行認(rèn)證才可使用。但是,目前很多大型的郵件服務(wù)商出于預(yù)防垃圾郵件的考慮,已經(jīng)開始取消或限制SMTP發(fā)信了,改為提供WebMail服務(wù),因此可用的SMTP服務(wù)器是少之又少了。有人說現(xiàn)在做SMTP郵件發(fā)送器意義已經(jīng)不大,可我認(rèn)為,動(dòng)手去做這個(gè)SMTP發(fā)送器可以更好的了解一封電子郵件的結(jié)構(gòu)和它的產(chǎn)生過程,管他別人愛說啥!

            【郵件大致結(jié)構(gòu)】

            先用DreamMail發(fā)一封測(cè)試信:由TestID@163.com發(fā)信給TestID2@21cn.com,其中掛載附件1.txt。信件從21CN收回來之后是這樣子的:

             1//服務(wù)器自動(dòng)添加的東西
             2HMM_SOURCE_IP:10.27.2.7:55493.2027099718
             3HMM_ATTACHE_NUM:0001
             4HMM_SOURCE_TYPE:SMTP
             5Received: from aisp7-mta?dg (dgproxy7.inner-hermes.com [10.27.2.7])
             6    by 21cn.com (HERMES) with SMTP id 359B63813A
             7    for <TestID2@21cn.com>; Tue, 29 Jul 2008 22:20:12 +0800 (CST)
             8
             9Received: from m12-11.163.com([220.181.12.11])
            10    by aisp7-mta@dg(Knowledge-based Antispam Gateway 2.126n5(2008-07-01),59.36.102.56) with ESMTP id 
            11
            12mx23749.1217341212 for <TestID2@21cn.com>;
            13    Tue, 11 Jul 2008 22:20:13 +0000
            14
            15X-Original-MailFrom: TestID@163.com
            16Received: from ChinaPC (unknown [58.145.147.196])
            17    by smtp7 (Coremail) with SMTP id C8CowLCrpS8XJ49IDQBdEQ==.5964S2;
            18    Tue, 11 Jul 2008 22:20:07 +0800 (CST)

             1//大都是我們自己填寫的東西
             2//回復(fù)地址
             3Reply-To: TestID@163.com
             4
             5From: "TestID" <TestID@163.com>
             6To: "TestID2" <TestID2@21cn.com>
             7Subject: Test Attachment
             8Date: Tue, 29 Jul 2008 22:31:07 +0800
             9//Dreammail的識(shí)別ID
            10Message-Id: <DreamMail__223107_76081071266@smtp.163.com>
            11MIME-Version: 1.0
            12//內(nèi)容類型及內(nèi)容“指針I(yè)D”
            13Content-Type: multipart/mixed; 
            14    boundary="----=_NextPart_08072922310693970267282_000"
            15//郵件優(yōu)先級(jí)
            16X-Priority: 3
            17//客戶端名稱
            18X-Mailer: DreamMail 4.4.1.0
            19X-Coremail-Antispam: 1Uf129KBjDUn29KB7ZKAUJUUUUUYxn0WfASr-VFAUDa7-sFnT
            20    9fnUUIcSsGvfJTRUUUj_xYjsxI4VWUJwAYFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1I0E4x80
            21    FVCIwcAKzIAtM7C26IkvcIIF6IxKo4kEV4yl1IIY67AEw4v_Jr0_Jr4le4C267I2x7xF54
            22    xIwI1l52xGzVA2a4k0FcxF6cIjj282cryl52xGzVA2a4k0FcxF6xCjrcI26cIUMc02F40E
            23    57IF67AEF4xIwI1lYx0E2Ix0cI8IcVAFwI0_Jrv_JF1lYx0Ex4A2jsIE14v26r1j6r4UM4
            24    xvF2IEb7IF0Fy264kE64k0F24lFcxC0VAYjxAxZF0Ex2IqxwAC62BYpTIE1TZKA3svLVAK
            25    vSnIqfZI6r4lFVCF04k20xvEw2I207IF0wAKzVCY07xG64k0F24l7I0Y6sxI4wCY1Ik26c
            26    xK620vw7xCY7Wlc7Ca8VAvwVCjb41lc7Ca8VAvwVCFzxkY4VA2I41lc2xSY4AK67AK6ry5
            27    MxkI7II2jI8vz4v_Jr0_Jryl4x8a6c8ajcxJMI8E67AF67kF1VAFwI0_Jr0_JrylIxAIcV
            28    C0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr1lIxAIcVC2
            29    z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY1x0267AKxVWUJVW8JbIYCTnIWIevJa73Uj
            30    IFyTuYvjxUgg4SUUUUU
            31//ESet病毒防火墻添加
            32X-EsetId: 2080B02B6D6871693F86B07B643E31

             1//內(nèi)容開始了,對(duì)應(yīng)上面說的“指針I(yè)D”
             2------=_NextPart_08072922310693970267282_000
             3Content-Type: multipart/alternative;
             4    boundary="----=_NextPart_08072922310693970267282_002"
             5
             6//無控制符、無標(biāo)簽的文本內(nèi)容(BASE64編碼)
             7------=_NextPart_08072922310693970267282_002
             8Content-Type: text/plain; 
             9    charset="GB2312"
            10Content-Transfer-Encoding: base64
            11
            12SGVsbG8gV29ybGQhDQo=
            13
            14//有控制符、標(biāo)簽的HTML內(nèi)容(BASE64編碼)
            15------=_NextPart_08072922310693970267282_002
            16Content-Type: text/html; 
            17    charset="GB2312"
            18Content-Transfer-Encoding: base64
            19
            20PEhUTUw+PEhFQUQ+PFRJVExFPk1haWw8L1RJVExFPg0KPE1FVEEgY29udGVudD0iS3NESFRNTEVE
            21TGliLm9jeCwgRnJlZVdhcmUgSFRNTCBFZGl0b3IgMS4xNjQuMiwgP0t1cnQgU2VuZmVyIiANCm5h
            22bWU9R0VORVJBVE9SPg0KPE1FVEEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4
            23dC9odG1sOyBjaGFyc2V0PUdCMjMxMiI+PC9IRUFEPg0KPEJPRFkgc3R5bGU9IkZPTlQtU0laRTog
            24OXB0OyBGT05ULUZBTUlMWTogy87M5SIgbGVmdE1hcmdpbj01IHRvcE1hcmdpbj01ICNmZmZmZmY+
            25DQo8RElWPkhlbGxvIFdvcmxkITwhLS1BSURfU0VORFRPX0JFR0lOLS0+PC9ESVY+PCEtLURyZWFt
            26TWFpbF9BRF9CRUdJTi0tPjxESVY+PEZPTlQgZmFjZT0iQXJpYWwsc2Fucy1zZXJpZiIgc2l6ZT0y
            27Pl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
            28X19fX19fX19fX19fPEJSPjxFTT48U3Ryb25nPkRyZWFtTWFpbDwvU3Ryb25nPjwvRU0+Jm5ic3A7
            29PEZPTlQgZmFjZT0iQXJpYWwsc2Fucy1zZXJpZiIgc2l6ZT0yPi0gtdrSu7j21qez1tPKvP7AtNS0
            30uPrX2bXEtefX09PKvP6/zbuntssmbmJzcDs8L0ZPTlQ+PEZPTlQgZmFjZT0iQXJpYWwsc2Fucy1z
            31ZXJpZiIgY29sb3I9IzAwMDBmZiBzaXplPTI+PEEgaHJlZj0iaHR0cDovL3d3dy5kcmVhbW1haWwu
            32b3JnIj53d3cuZHJlYW1tYWlsLm9yZzwvQT48L0ZPTlQ+PC9GT05UPjwvRElWPjwhLS1EcmVhbU1h
            33aWxfQURfRU5ELS0+PC9CT0RZPjwvSFRNTD4NCg==
            34
            35------=_NextPart_08072922310693970267282_002--
            36//附件的內(nèi)容
            37------=_NextPart_08072922310693970267282_000
            38Content-Type: text/plain; 
            39    name="1.txt"
            40Content-Transfer-Encoding: base64
            41Content-Disposition: attachment;
            42    filename="1.txt"
            43
            44MTIz
            45
            46------=_NextPart_08072922310693970267282_000--


            看完之后應(yīng)該對(duì)郵件結(jié)構(gòu)有個(gè)大致的印象了,其實(shí)不難,牛人通常都是把各種值自己填充完,然后用winsocket發(fā)出去的。只是都喜歡偷懶,Indy已經(jīng)幫忙包裝好了,只管用就OK。

            【準(zhǔn)備工作】

            準(zhǔn)備啥呢?已經(jīng)安裝好最新版Indy10的BCB6、一個(gè)可以使用SMTP端口的郵件帳號(hào)和一條可以上網(wǎng)的線路。

            【了解所需的控件】

            TIdSMTP中的屬性名稱都很清楚(服務(wù)器地址、端口、認(rèn)證類型、登錄超時(shí)等),無需再多說。發(fā)信最關(guān)鍵是要用到控件的兩個(gè)方法:Connect和Send。Connect(AnsiString ServerAddress, AnsiString ServerPort)方法實(shí)現(xiàn)的是登錄SMTP服務(wù)器和用戶名認(rèn)證;Send(TIdMessage *AMsg)方法實(shí)現(xiàn)的是認(rèn)證后的發(fā)信過程,AMsg指的是信件的內(nèi)容,也就是與上面所看到類似的信件源碼,它是Indy10中的TIdMessage類指針。

            TIdMessage屬性大致歸兩類,一是郵件頭:就是寄信人、收信人、抄送、密送、主題、信件內(nèi)容編碼、附件編碼等;二是郵件內(nèi)容:包括無控制符無標(biāo)簽的純文本內(nèi)容(Plain)、帶控制符帶標(biāo)簽的網(wǎng)頁內(nèi)容(Html)、編碼后的附件(Attachment)。Indy10中,Plain和Html用TIdText類實(shí)現(xiàn),Attachment用TIdAttachmentFile實(shí)現(xiàn)。只要將兩個(gè)類實(shí)例化并掛載在TIdMessage下,就組成一個(gè)完整的郵件內(nèi)容了。

            【開始動(dòng)手】

            一個(gè)很簡陋的界面:



            堆上比較容易理解的代碼:

              1//main.cpp
              2//---------------------------------------------------------------------------
              3
              4#include <vcl.h>
              5#pragma hdrstop
              6
              7#include "Main.h"
              8//---------------------------------------------------------------------------
              9#pragma package(smart_init)
             10#pragma link "IdExplicitTLSClientServerBase"
             11#pragma link "IdSMTPBase"
             12#pragma resource "*.dfm"
             13TForm1 *Form1;
             14//---------------------------------------------------------------------------
             15__fastcall TForm1::TForm1(TComponent* Owner)
             16    : TForm(Owner)
             17{
             18}

             19//---------------------------------------------------------------------------
             20void __fastcall TForm1::btnSendClick(TObject *Sender)
             21{
             22    //Mail
             23    TIdText *idBody, *idHtml;
             24    TIdAttachmentFile *idAtta;
             25    try
             26    {
             27
             28        idMsg=new TIdMessage(Application);
             29        //Msg base header
             30        idMsg->From->Name=edtName->Text.Trim();
             31        idMsg->From->Address=edtMailaddr->Text.Trim();
             32        idMsg->ReplyTo->EMailAddresses="no_reply@163.com";
             33        idMsg->ContentType="multipart/alternative";
             34        idMsg->ContentTransferEncoding="base64";
             35        idMsg->AttachmentEncoding="MIME";
             36        idMsg->Encoding=meDefault;
             37        idMsg->CharSet="gb2312";
             38        idMsg->Subject=edtSubject->Text.Trim();
             39        idMsg->Recipients->EMailAddresses=edtTo->Text.Trim();
             40        idMsg->Priority=mpNormal;
             41
             42        //msg body plain
             43        idBody=new TIdText(idMsg->MessageParts, idMsg->Body);
             44        idBody->CharSet="utf-8";
             45        idBody->ContentType="text/plain";
             46        idBody->ContentTransfer="base64";
             47        idBody->Body->Add(mmoContent->Text);
             48
             49        //msg body html
             50        idHtml=new TIdText(idMsg->MessageParts, idMsg->Body);
             51        idHtml->CharSet="utf-8";
             52        idHtml->ContentType="text/html";
             53        idHtml->ContentTransfer="base64";
             54        idHtml->Body->Add("<HTML><HEAD><TITLE>Mail</TITLE></HEAD>");
             55        idHtml->Body->Add("<BODY>");
             56        idHtml->Body->Add(mmoContent->Text);
             57        idHtml->Body->Add("</BODY></HTML>");
             58
             59        //msg body attachment
             60        if (edtAttach->Text.Trim()!="")
             61        {
             62            if (FileExists(edtAttach->Text.Trim()))
             63            {
             64                idAtta=new TIdAttachmentFile(idMsg->MessageParts, edtAttach->Text.Trim());
             65
             66                idAtta->ContentType="application/octet-stream";
             67                idAtta->ContentDisposition="attachment";
             68                idAtta->ContentTransfer="base64";
             69                idAtta->FileName=ExtractFileName(edtAttach->Text.Trim());
             70            }

             71            else
             72            {
             73                edtAttach->Text="";
             74            }

             75        }

             76    }

             77    catch(Exception &exception)
             78    {
             79        //show Error!
             80        idMsg->Clear();
             81        delete idMsg;
             82        return;
             83    }

             84
             85    //SMTP Server
             86    try
             87    {
             88        idSmtp->Username=edtUsername->Text;
             89        idSmtp->Password=edtPasswd->Text;
             90        idSmtp->HeloName="SMTP";
             91        idSmtp->MailAgent="DreamMail";
             92        idSmtp->UseEhlo=true;
             93        idSmtp->ReadTimeout=5000;
             94        idSmtp->Connect(edtServer->Text, StrToInt(edtPort->Text));
             95        idSmtp->Send(idMsg);
             96    }

             97    catch()
             98    {
             99        //Show error!
            100        idSmtp->Disconnect();
            101        delete idMsg;
            102        return;
            103    }

            104    idSmtp->Disconnect();
            105    delete idMsg;
            106    ShowMessage("Mail Sent!");
            107}

            108//---------------------------------------------------------------------------
            109void __fastcall TForm1::idSmtpConnected(TObject *Sender)
            110{
            111    btnSend->Enabled=false;    
            112}

            113//---------------------------------------------------------------------------
            114void __fastcall TForm1::idSmtpDisconnected(TObject *Sender)
            115{
            116    btnSend->Enabled=true;
            117}

            118//---------------------------------------------------------------------------
            119void __fastcall TForm1::btnOpenfileClick(TObject *Sender)
            120{
            121    try
            122    {
            123        TOpenDialog *opdGetfile=new TOpenDialog(Application);
            124        opdGetfile->Options.Clear();
            125        opdGetfile->Title = "Select attachment";
            126        opdGetfile->Options << ofFileMustExist;
            127        opdGetfile->InitialDir=ExtractFilePath(Application->ExeName);
            128        opdGetfile->Filter = "All files (*.*)|*.*";
            129        opdGetfile->FilterIndex = 2;
            130        if(opdGetfile->Execute())
            131        {
            132            if (FileExists(opdGetfile->FileName))
            133                edtAttach->Text=opdGetfile->FileName;
            134
            135        }

            136    }

            137    catch()
            138    {
            139        return;
            140    }

            141
            142
            143}

            144//---------------------------------------------------------------------------
            145

             1//main.h
             2//---------------------------------------------------------------------------
             3
             4#ifndef MainH
             5#define MainH
             6//---------------------------------------------------------------------------
             7#include <Classes.hpp>
             8#include <Controls.hpp>
             9#include <StdCtrls.hpp>
            10#include <Forms.hpp>
            11#include "IdExplicitTLSClientServerBase.hpp"
            12#include "IdSMTPBase.hpp"
            13#include <IdBaseComponent.hpp>
            14#include <IdComponent.hpp>
            15#include <IdMessageClient.hpp>
            16#include <IdSMTP.hpp>
            17#include <IdTCPClient.hpp>
            18#include <IdTCPConnection.hpp>
            19#include <IdText.hpp> //TIdText needed
            20#include <IdAttachmentFile.hpp> //TIdAttachment needed
            21//#include <IdMessageCoderMIME.hpp>
            22#include <IdCoderHeader.hpp>
            23
            24//---------------------------------------------------------------------------
            25class TForm1 : public TForm
            26{
            27__published:    // IDE-managed Components
            28    TGroupBox *grpServer;
            29    TEdit *edtServer;
            30    TEdit *edtPort;
            31    TEdit *edtUsername;
            32    TEdit *edtPasswd;
            33    TIdSMTP *idSmtp;
            34    TGroupBox *grpMail;
            35    TEdit *edtName;
            36    TEdit *edtMailaddr;
            37    TEdit *edtTo;
            38    TEdit *edtSubject;
            39    TMemo *mmoContent;
            40    TButton *btnSend;
            41    TEdit *edtAttach;
            42    TButton *btnOpenfile;
            43    TLabel *lbl1;
            44    TLabel *lbl2;
            45    TLabel *lbl3;
            46    TLabel *lbl4;
            47    TLabel *lbl5;
            48    TLabel *lbl6;
            49    TLabel *lbl7;
            50    TLabel *lbl8;
            51    TLabel *lbl9;
            52    void __fastcall btnSendClick(TObject *Sender);
            53    void __fastcall idSmtpConnected(TObject *Sender);
            54    void __fastcall idSmtpDisconnected(TObject *Sender);
            55    void __fastcall btnOpenfileClick(TObject *Sender);
            56private:    // User declarations
            57    TIdMessage *idMsg;
            58    //TIdMessageEncoderMIME *idMsg;
            59public:        // User declarations
            60    __fastcall TForm1(TComponent* Owner);
            61}
            ;
            62//---------------------------------------------------------------------------
            63extern PACKAGE TForm1 *Form1;
            64//---------------------------------------------------------------------------
            65#endif
            66


            完成后編譯試試!

            posted on 2008-07-29 23:48 土仔 閱讀(8955) 評(píng)論(10)  編輯 收藏 引用 所屬分類: 土仔編程

            評(píng)論

            # re: 利用Indy 10的IdSMTP控件制作可帶附件的郵件發(fā)送器 2008-07-30 09:52 信任
            先支持一下哦  回復(fù)  更多評(píng)論
              

            # re: 利用Indy 10的IdSMTP控件制作可帶附件的郵件發(fā)送器 2008-07-31 17:11 wangwei.njcn@gmail.com
            問一下,你這樣的代碼發(fā)送的郵件,使用outlook接受時(shí),是否有亂碼的問題;  回復(fù)  更多評(píng)論
              

            # re: 利用Indy 10的IdSMTP控件制作可帶附件的郵件發(fā)送器 2008-07-31 21:28 土仔
            @wangwei.njcn@gmail.com
            這只是一個(gè)小程序。Outlook沒有實(shí)驗(yàn)國,我用DreamMail中文沒有問題。只要你填寫對(duì)CharSet屬性就好了。還有,這程序還沒有考慮標(biāo)題編碼問題,標(biāo)題編碼后應(yīng)該類似=B?GB2312 =?=這樣的格式的,你可以看看中文標(biāo)題信件的源代碼。  回復(fù)  更多評(píng)論
              

            # re: 利用Indy 10的IdSMTP控件制作可帶附件的郵件發(fā)送器 2008-08-01 11:24 wangwei.njcn@gmail.com
            是這樣的,CharSet屬性,body的內(nèi)容就沒有問題了,但subject卻是亂碼;但如果我手工對(duì)subject進(jìn)行base64的編碼,并加上=B?GB2312 =?=的格式,發(fā)給foxmail就正常了,但發(fā)給outlook還是有問題。  回復(fù)  更多評(píng)論
              

            # re: 利用Indy 10的IdSMTP控件制作可帶附件的郵件發(fā)送器 2008-08-01 12:06 土仔
            @wangwei.njcn@gmail.com
            應(yīng)該我代碼的疏忽,你看看CharSet都全改了嗎?一個(gè)是idMsg->CharSet,idBody->CharSet,idHtml->CharSet,我代碼里面,第一個(gè)是GB2312,第二個(gè)是UTF-8,可能是這里的問題吧。你試試都改成GB2312看看。對(duì)了OUTLOOK里面也有編碼設(shè)置的,當(dāng)你收臺(tái)灣或香港地區(qū)的時(shí)候,你要手動(dòng)改為BIG5。  回復(fù)  更多評(píng)論
              

            # re: 利用Indy 10的IdSMTP控件制作可帶附件的郵件發(fā)送器[未登錄] 2008-08-27 14:16 燕子
            樓主有QQ嗎?我用了你的方法郵件發(fā)送是成功了,但怎么就收不到發(fā)出的郵件呢?試了好多個(gè)郵箱了.我的QQ:243106206  回復(fù)  更多評(píng)論
              

            # re: 利用Indy 10的IdSMTP控件制作可帶附件的郵件發(fā)送器 2008-08-27 23:41 土仔
            @燕子
            應(yīng)該不會(huì)出現(xiàn)這樣的問題的。或許你再等等,有時(shí)有延時(shí)。但我一般都能成功啊。
              回復(fù)  更多評(píng)論
              

            # re: 利用Indy 10的IdSMTP控件制作可帶附件的郵件發(fā)送器 2009-04-23 17:04 魯魯
            不知道樓主會(huì)不會(huì)再出indy10 + chat server/client的制作教學(xué)
            好期特呀!  回復(fù)  更多評(píng)論
              

            # re: 利用Indy 10的IdSMTP控件制作可帶附件的郵件發(fā)送器 2009-09-09 09:51 kevinlhit
            請(qǐng)問一下有什辬法可以不用附檔方式
            像outlook一樣直接匯入圖檔或html檔?
            我看裡面的也是base64,但就不知道
            怎麼做,感謝  回復(fù)  更多評(píng)論
              

            # re: 利用Indy 10的IdSMTP控件制作可帶附件的郵件發(fā)送器 2010-10-14 16:45 linkyang

            謝謝,我的亂碼終于解決掉了!  回復(fù)  更多評(píng)論
              

            久久99国产精品久久99小说| 久久国产精品无码一区二区三区| 狼狼综合久久久久综合网| 精品久久久久久亚洲| 狠狠色丁香久久婷婷综合_中 | 国产精自产拍久久久久久蜜| 综合人妻久久一区二区精品| 少妇久久久久久被弄到高潮| 国内精品久久久久伊人av | 久久国产高清一区二区三区| 久久久国产乱子伦精品作者| 一级做a爰片久久毛片免费陪 | 久久久久亚洲精品天堂| 亚洲欧洲久久av| 99久久综合国产精品二区| 久久av无码专区亚洲av桃花岛| 亚洲人成无码www久久久| 91秦先生久久久久久久| 久久水蜜桃亚洲av无码精品麻豆| 久久夜色精品国产噜噜亚洲a| 国产精品内射久久久久欢欢| 韩国三级大全久久网站| 久久超乳爆乳中文字幕| 亚洲精品午夜国产VA久久成人| 亚洲人AV永久一区二区三区久久| 久久久久人妻一区精品| 国产精品成人精品久久久| 狠狠色婷婷综合天天久久丁香| 久久精品天天中文字幕人妻| 狠狠色婷婷久久综合频道日韩| 伊人久久大香线蕉无码麻豆 | 亚洲午夜久久久久久噜噜噜| 久久人妻少妇嫩草AV蜜桃| 亚洲精品国产第一综合99久久| 欧美日韩精品久久久久| 亚洲一区精品伊人久久伊人| 2021国产精品久久精品| 久久精品国产99久久久古代| 亚洲精品国产字幕久久不卡| 成人综合伊人五月婷久久| 国产精品久久久久aaaa|