欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

基于Qt的跨平臺SMTP郵件發(fā)送工具封裝實戰(zhàn)

基于Qt的跨平臺SMTP郵件發(fā)送工具封裝實戰(zhàn) 簡介基于Qt與C開發(fā)的郵件發(fā)送工具面向需要跨平臺實現(xiàn)SMTP郵件收發(fā)功能的開發(fā)者尤其適合在Windows與Linux環(huán)境下構(gòu)建帶附件的郵件客戶端。資源包共59個文件包含25個cpp源文件、15個頭文件以及dll動態(tài)庫、UI設計文件、工程配置與資源圖片等完整覆蓋從界面構(gòu)建到SMTP通信的各個環(huán)節(jié)整體約16.32MB。代碼通過socket編程與郵件服務器交互利用QMimeData及MIME標準處理附件封裝實現(xiàn)身份驗證、主題設置、正文發(fā)送等功能工程包含Qt Creator項目文件、ui界面及qrc資源可直接編譯運行便于二次開發(fā)。目前已有312人學習下載適合具備C基礎、希望掌握Qt網(wǎng)絡編程與郵件協(xié)議細節(jié)的開發(fā)者參考。1. 為什么我要自己用 Qt 封裝一個跨平臺的郵件發(fā)送工具做桌面客戶端的人遲早會撞上一個需求把設備狀態(tài)、統(tǒng)計報表或錯誤日志自動發(fā)到指定郵箱。我在一個跨平臺數(shù)據(jù)采集項目里就被安排了這個活目標平臺既有 Linux 工控機又有 Windows 上位機。當時第一反應是找現(xiàn)成庫試了一圈發(fā)現(xiàn)要么只支持單平臺要么對 SMTP 的 TLS 處理得像黑匣子出了問題根本沒法查。最后決定基于 Qt 的 QAbstractSocket 和 QSslSocket 自己實現(xiàn)一個輕量 SMTP 客戶端代碼量不大但把協(xié)議狀態(tài)機、認證流程、MIME 編碼這些細節(jié)吃透了。這篇筆記就把這個工具的實現(xiàn)思路、關(guān)鍵代碼和我在 Linux/Windows 雙平臺踩過的坑完整拆出來適合需要在 Qt 項目里快速集成郵件通知功能的開發(fā)者參考。2. SMTP 協(xié)議邊界Qt 里 TCP、SSL 與認證方式這么選2.1 SMTP 是個純文本協(xié)議先搞懂命令-應答模型SMTP 和 HTTP 一樣是請求-響應模型但它的文本協(xié)議特性更純粹客戶端發(fā)一條命令服務器回一個三數(shù)字狀態(tài)碼加一段說明文本。發(fā)郵件整個過程就是一組命令的有序序列從 EHLO 開始經(jīng)過 MAIL FROM、RCPT TO、DATA最后以 QUIT 結(jié)束。這個有序性決定了 Qt 側(cè)必須有一個狀態(tài)機來驅(qū)動不能像普通 socket 編程那樣收到什么就處理什么。我第一版實現(xiàn)就是沒有狀態(tài)機收到服務器響應后直接調(diào)用下一步發(fā)送函數(shù)結(jié)果在慢網(wǎng)絡下偶發(fā)錯亂——服務器回 250 還在路上客戶端就把下一步命令丟出去了。后來改成顯式的狀態(tài)枚舉每次應答回來先校驗狀態(tài)碼與當前狀態(tài)的匹配關(guān)系再推進到下一個狀態(tài)問題才徹底消失。狀態(tài)碼分幾類2xx 表示成功、3xx 表示需要更多輸入、4xx 是臨時錯誤、5xx 是永久錯誤。郵件發(fā)送里最常見的幾個220 是服務器就緒250 是命令執(zhí)行成功334 是服務器要求提供認證數(shù)據(jù)354 是告訴客戶端 DATA 階段開始、可以輸入郵件內(nèi)容了。Qt 側(cè)處理的關(guān)鍵是不要把狀態(tài)碼當普通數(shù)字解析要做成枚舉和識別函數(shù)代碼維護性會好很多。2.2 端口與加密選型25、465、587 區(qū)別在哪里端口選型直接決定底層 socket 類的選擇。25 端口是傳統(tǒng) SMTP明文傳輸公網(wǎng)環(huán)境基本被運營商封鎖只適合內(nèi)網(wǎng)自己搭的郵件中繼。465 端口是 SMTPSsocket 建立后立即進入 SSL/TLS 加密對應 Qt 的 QSslSocket。587 端口是 submission先建立明文會話再通過 STARTTLS 命令升級為加密通道對應先 QAbstractSocket 后切換 QSslSocket 的模式。我在這個工具里對三種端口都做了支持因為不同郵件服務商偏好不一樣。實現(xiàn)上的差異集中在連接階段465 直接用 QSslSocket 連接connectToHostEncrypted 一發(fā)就完事587 需要先普通連接EHLO 之后發(fā) STARTTLS成功后再重新 EHLO 并走認證流程。這里有個常見翻車點587 端口升級加密后服務器要求重新發(fā)送 EHLO很多人在 TLS 握手后直接發(fā) AUTH 命令服務器會回 503 錯誤這是免費教學資源里反復出現(xiàn)的經(jīng)典坑。2.3 認證機制LOGIN 和 PLAIN 是最通用的組合SMTP 認證常見的有 PLAIN、LOGIN、CRAM-MD5 三種。PLAIN 是把用戶名密碼用客戶端和服務器的共同憑據(jù)一次性發(fā)給服務器LOGIN 是分成兩步服務器先問用戶名再問密碼。CRAM-MD5 是挑戰(zhàn)-響應機制服務器先發(fā)一個隨機挑戰(zhàn)字符串客戶端用密碼和挑戰(zhàn)做 MD5 摘要后返回密碼不直接暴露在網(wǎng)絡上。從 Qt 實現(xiàn)角度LOGIN 和 PLAIN 處理起來最直接。LOGIN 的交互邏輯比較自然客戶端發(fā) AUTH LOGIN服務器回 334 加提示字符串客戶端把用戶名做 Base64 編碼發(fā)過去服務器再回 334客戶端再發(fā)密碼的 Base64最后收到 235 表示認證成功。PLAIN 就一條命令AUTH PLAIN 后面直接跟一個 Base64 編碼的字符串這個字符串的格式是 \0username\0password即空字符包夾用戶名和密碼。考慮到兼容性我默認先發(fā) EHLO 看服務器通告的 AUTH 能力列表優(yōu)先嘗試 CRAM-MD5如果服務器沒通告就退到 LOGIN。實際測試中發(fā)現(xiàn)部分內(nèi)網(wǎng)郵件服務器只實現(xiàn)了 LOGIN所以我在工具里把 LOGIN 作為默認、PLAIN 作為備選遇到服務器通告里兩種都不支持時才報錯。// 根據(jù) EHLO 響應解析服務器支持的認證方式 QStringList AuthMechs; foreach (const QString line, ehloReply) { if (line.startsWith(AUTH)) { AuthMechs line.mid(5).split( , Qt::SkipEmptyParts); break; } } // 常見輸出示例: AUTH LOGIN PLAIN CRAM-MD5這段邏輯值得注意的細節(jié)是服務器返回多行擴展狀態(tài)碼時AUTH 能力的行可能不是第一行。SMTP 的 EHLO 響應是多行的每行前面有狀態(tài)碼只有最后一行帶空格前綴表示續(xù)行。Qt 里如果一次性 readAll 讀取要把響應按行拆分后逐行檢查而不是直接 startsWith(AUTH)否則遇到前面有多行狀態(tài)碼時會漏掉。2.4 QSslSocket 的同步與異步邊界要拎清Qt 的 QSslSocket 是異步接口connectToHostEncrypted 觸發(fā)連接后程序不會阻塞等待結(jié)果而是通過信號通知調(diào)用方。在郵件發(fā)送這種邏輯里同步改異步是天然的——發(fā)郵件本身就應該放到后臺線程不阻塞主界面。但要注意 QSslSocket 的信號連接時機我在第一版里犯過錯誤在 connectToHostEncrypted 之后才連接 encrypted 信號結(jié)果握手極快的情況下信號丟失程序卡死在等待狀態(tài)。正確做法是先連接所有需要的信號再觸發(fā)連接動作。sslErrors 信號尤其重要默認情況下 QSslSocket 遇到自簽名證書或證書過期會直接中止連接必須手動調(diào)用 ignoreSslErrors 或彈出確認對話框。在工具內(nèi)部我實現(xiàn)了一個策略配置接口讓調(diào)用方?jīng)Q定是忽略還是中止默認對自簽名證書直接給出告警日志后忽略因為內(nèi)網(wǎng)郵件服務器用自簽證書太常見了。3. 核心實現(xiàn)SMTP 客戶端類的四個模塊與關(guān)鍵代碼3.1 類設計與接口定義讓調(diào)用方只看一個 send 函數(shù)整個工具對外只暴露一個簡潔的接口調(diào)用方不需要關(guān)心 SMTP 細節(jié)。設計上分為四層Socket 封裝層、命令層、認證層、MIME 構(gòu)造層。Socket 封裝層負責 TCP/SSL 連接生命周期管理命令層實現(xiàn) SMTP 狀態(tài)機和命令發(fā)送認證層處理 LOGIN/PLAIN/CRAM-MD5 交互MIME 構(gòu)造層生成符合 RFC 5322 的郵件數(shù)據(jù)。類的核心接口設計如下class SmtpClient : public QObject { Q_OBJECT public: enum AuthMethod { AuthNone, AuthLogin, AuthPlain, AuthCramMd5 }; SmtpClient(const QString host, quint16 port, QObject *parent nullptr); void setAuth(const QString username, const QString password, AuthMethod method AuthLogin); void setSslMode(SslMode mode); // SslMode::Tls / SslMode::StartTls / SslMode::None public slots: void sendMail(const MailMessage msg); signals: void mailSent(); void mailFailed(const QString errorMessage); void statusChanged(const QString status); private: QAbstractSocket *m_socket; // ... };這個接口設計的核心思路是同步語義封進異步信號調(diào)用方調(diào)用 sendMail 后通過 mailSent 和 mailFailed 拿到結(jié)果statusChanged 實時回傳當前階段方便界面顯示發(fā)送進度。端口和加密模式在構(gòu)造時確定認證方式通過 setAuth 配置。關(guān)于參數(shù)SslMode 枚舉是很多實現(xiàn)里容易混淆的地方Tls 對應 465 端口直連加密StartTls 對應 587 端口先明文后升級。3.2 連接與狀態(tài)機基于 QStateMachine 不如手寫枚舉網(wǎng)上很多 Qt 郵件示例用 QStateMachine 框架來實現(xiàn)連接狀態(tài)轉(zhuǎn)換但我在實際項目里發(fā)現(xiàn)這個框架用在 SMTP 這種有極少狀態(tài)、嚴格線性的流程上顯得笨重——狀態(tài)轉(zhuǎn)換的觸發(fā)條件本來就是一個 socket 信號的 lambda直接手寫枚舉加 switch 反而更清晰可控。enum SmtpState { StateIdle, StateConnecting, StateEhlo, StateStartTls, StateEhloAfterTls, StateAuth, StateAuthUsername, StateAuthPassword, StateMailFrom, StateRcptTo, StateData, StateDataContent, StateQuit };每個狀態(tài)對應一個待發(fā)送的命令收到服務器響應后根據(jù)當前狀態(tài)決定推進方向。比如收到 220 就緒響應后如果配置了 StartTls 就發(fā) STARTTLS否則直接發(fā) EHLO。收到 250 響應后如果處于 StateEhlo 且還沒認證就發(fā)起 AUTH順序不能亂。我選了手寫枚舉的核心原因是這套流程邏輯雖然線性但有分支端口類型影響連接方式、認證方式影響交互步驟、發(fā)送內(nèi)容決定是否有 DATA 過程。手寫狀態(tài)機可以清晰表達這些分支條件后續(xù)調(diào)試時把當前狀態(tài)直接輸出到日志看狀態(tài)序列就能定位問題比 QStateMachine 調(diào)試起來直觀得多。void SmtpClient::handleReply(const QString reply) { int code reply.left(3).toInt(); switch (m_state) { case StateEhlo: if (code 250) { m_state StateAuth; sendAuth(); } else { emit mailFailed(QStringLiteral(EHLO failed: %1).arg(reply)); } break; case StateAuth: if (code 334) { m_state StateAuthUsername; sendBase64(m_username); } else { emit mailFailed(QStringLiteral(AUTH failed: %1).arg(reply)); } break; // ... } }邏輯說明handleReply 是 socket 的 readyRead 信號觸發(fā)后對緩沖數(shù)據(jù)的統(tǒng)一解析入口。每次解析出完整響應行才交付給狀態(tài)機然后是逐個狀態(tài)的分支處理。參數(shù)說明code 只取前三位數(shù)字response 的剩余部分僅在日志中使用不做流程控制依據(jù)。3.3 base64 認證細節(jié)Qt 的 Base64 編碼默認不帶換行SASL 認證里用戶名密碼都要做 Base64。這里有個 Qt 特有的坑QByteArray::toBase64() 默認每 76 個字符插入一個換行符這符合 MIME 的規(guī)范但 SMTP AUTH 里不允許出現(xiàn)換行服務器解析會出錯。解決方案是用 QByteArray::fromBase64 的反向函數(shù)編碼時指定 Base64Encoding | Base64UrlEncoding 標志組合起來可以關(guān)閉換行插入。實際測試中大部分 Linux 郵件服務器對換行寬容但 Windows 自帶的 SMTP 服務對格式要求嚴格一個 \r\n 混進 Base64 就整個包解析失敗。QByteArray SmtpClient::encodeAuth(const QString text) const { QByteArray raw text.toUtf8(); return raw.toBase64(QByteArray::Base64Encoding | QByteArray::OmitTrailingEquals); }OmitTrailingEquals 會去掉 Base64 末尾的 填充字符部分服務器對缺失 也能接受但為了兼容性我保留了 只用 Base64Encoding 純編碼去掉默認換行就夠。參數(shù)說明這里有個細節(jié)如果調(diào)用方傳給 setAuth 的用戶名密碼含非 ASCII 字符必須轉(zhuǎn) UTF-8 再做 Base64用 QString::toLatin1 會導致中文郵箱用戶名全部亂碼。3.4 超時與重傳QTimer 單次觸發(fā)做看門狗網(wǎng)絡環(huán)境不穩(wěn)定時SMTP 會話可能卡在某個中間態(tài)服務器連上了但遲遲不回 250認證發(fā)出去沒有響應DATA 階段服務器也斷了連接。如果沒有超時機制線程會一直掛著內(nèi)存和連接資源越積越多。我實現(xiàn)了一個統(tǒng)一的超時看門狗每次發(fā)送命令前啟動一個 QTimer::singleShot超時時間按階段區(qū)分——連接階段 30 秒認證階段 10 秒DATA 階段 60 秒。超時后強制斷開 socket 并發(fā)出 mailFailed 信號。void SmtpClient::startWatchdog(int timeoutMs) { if (m_watchdogId ! -1) killTimer(m_watchdogId); m_watchdogId startTimer(timeoutMs); } void SmtpClient::timerEvent(QTimerEvent *event) { if (event-timerId() m_watchdogId) { killTimer(m_watchdogId); m_watchdogId -1; abort(); emit mailFailed(QStringLiteral(SMTP timeout)); } }這段代碼的邏輯是每次發(fā)出命令的時候重設看門狗任何一次服務器響應到達都先 killTimer 再 startTimer相當于重新計時。參數(shù)設置上我推薦連接階段寬松、命令階段緊湊的方式原因是通過 EHLO 響應可以確認服務器活著后續(xù)每步響應都應該很快如果超過 10 秒基本是網(wǎng)絡問題或服務器死鎖再等也沒意義。4. MIME 構(gòu)造文本、HTML、內(nèi)嵌圖片與多附件的編碼細節(jié)4.1 普通文本郵件也要設置字符集和編碼很多人以為發(fā)純文本郵件只要拼好字符串 socket 寫出去就行實際上郵件傳輸是 7-bit 干凈的通道非 ASCII 字符必須編碼。最簡單的策略是 UTF-8 加 Base64 編碼整個郵件體作為一個 Base64 塊嵌進 Content-Transfer-Encoding 頭里。QByteArray MailMessage::buildTextBody(const QString text) { QByteArray out; out Content-Type: text/plain; charsetutf-8\r\n; out Content-Transfer-Encoding: base64\r\n; out \r\n; out text.toUtf8().toBase64(QByteArray::Base64Encoding); return out; }邏輯說明QByteArray::Base64Encoding 這個標志位會自動處理 76 字符換行這對 MIME 的 Base64 段是符合規(guī)范的——解碼端會忽略換行符。但這里有個細節(jié)Base64 編碼后的數(shù)據(jù)行與行之間以 \r\n 分隔而不是 \n網(wǎng)絡傳輸協(xié)議里標準明確要求用 CRLF。參數(shù)說明如果調(diào)用方傳入的 text 本身包含 \r\n編碼后的 Base64 塊里這些換行已經(jīng)被編碼成數(shù)據(jù)不會干擾郵件結(jié)構(gòu)可以放心。4.2 Quoted-Printable 與 Base64 的應用場景邊界Base64 適合編碼整體就是二進制或大量非 ASCII 字符的內(nèi)容Quoted-Printable 適合以 ASCII 為主體、偶爾有少量非 ASCII 字符的內(nèi)容。Q-P 編碼把非 ASCII 字節(jié)寫成 XX 形式可讀性好體積膨脹小。在郵件場景里 Base64 用于附件和純文本郵件體QP 用于 HTML 郵件體中穿插少量中文標題或關(guān)鍵詞的場景。兩者可以混合出現(xiàn)在同一個 MIME 多部分消息的不同部分里互不沖突。QByteArray MailMessage::encodeQuotedPrintable(const QString text) { QByteArray utf8 text.toUtf8(); QByteArray out; for (char c : utf8) { unsigned char uc static_castunsigned char(c); if (uc \n) { out \r\n; } else if (uc || uc 127 || uc 32 || uc ?) { out ; out QByteArray::number(uc, 16).rightJustified(2, 0).toUpper(); } else { out c; } } return out; }邏輯說明手動實現(xiàn) Q-P 編碼比用庫函數(shù)更可控因為需要精確處理軟換行和硬換行邏輯。注意代碼里的細節(jié)等號、非 ASCII 字符、控制字符都要轉(zhuǎn)義而空格在 Q-P 編碼里可以保持原樣但在行尾必須編碼成 20否則解碼端會吃掉它。4.3 multipart/mixed 與 multipart/related 的嵌套結(jié)構(gòu)一封帶附件的郵件頂層必須是 multipart/mixed里面第一個子部分是郵件正文后面是附件。如果正文里要嵌圖片正文本身要轉(zhuǎn)成 multipart/related內(nèi)嵌圖片用 CID 引用。QByteArray MailMessage::buildMultipart(const QByteArray body, const QListAttachment attachments) { QByteArray boundary ----_Part_ QByteArray::number(QRandomGenerator::global()-generate()); QByteArray out; out Content-Type: multipart/mixed; boundary\ boundary \\r\n; out \r\n; out -- boundary \r\n; out body; for (const Attachment att : attachments) { out \r\n-- boundary \r\n; out att.buildPart(); } out \r\n-- boundary --\r\n; return out; }邊界字符串用隨機數(shù)生成避免出現(xiàn)在郵件內(nèi)容里造成解析歧義。隨機數(shù)的來源我選 QRandomGenerator::global()它線程安全跨平臺表現(xiàn)一致。邊界字符串的格式要求是開頭不能是空格或換行長度不超過 70 字符這里隨機數(shù)生成的長格式完全符合規(guī)范。4.4 附件的 Content-Disposition 與文件名編碼附件的文件名如果是中文必須做 RFC 2231 編碼也就是 filename*UTF-8%E4%B8%AD%E6%96%87.txt 這種格式。不加這個頭的話多數(shù)客戶端顯示附件名為亂碼或直接丟失擴展名。QByteArray Attachment::buildPart() const { QByteArray out; QString encodedName QUrl::toPercentEncoding(m_fileName); out Content-Type: application/octet-stream; name*UTF-8 encodedName.toUtf8() \r\n; out Content-Transfer-Encoding: base64\r\n; out Content-Disposition: attachment; filename*UTF-8 encodedName.toUtf8() \r\n; out \r\n; out m_data.toBase64(QByteArray::Base64Encoding); return out; }邏輯說明RFC 2231 的格式是對文件名做 percent-encoding 后追加到 filename* 字段注意不要用 QUrl::toPercentEncoding 的默認參數(shù)它會編碼空格和標點需要確認不把斜杠也編碼掉。參數(shù)說明里有個細節(jié)m_data 是從文件讀取的原始字節(jié)不要在讀取時做任何轉(zhuǎn)換直接 Base64否則大文件會有雙重轉(zhuǎn)換的性能開銷和內(nèi)存膨脹。4.5 CRLF 與點填充DATA 階段的兩個硬性規(guī)范DATA 階段是 SMTP 協(xié)議里唯一的多行數(shù)據(jù)階段客戶端發(fā) DATA 命令收到 354 響應后逐行發(fā)送郵件內(nèi)容以單獨一行英文句點 . 結(jié)束。這個過程中有兩個規(guī)范必須遵守所有行必須以 CRLF 結(jié)尾內(nèi)容中凡是以 . 開頭的行都必須額外在行首增加一個點即發(fā)送 .. 服務器端會還原為單點。如果不在客戶端處理孤立行點郵件正文里某個以 . 開頭的段落會導致服務器提前結(jié)束 DATA 階段后續(xù)內(nèi)容全部丟失。我專門實現(xiàn)了一個 dotUnstuffing 函數(shù)在發(fā)送前對郵件體按行處理QByteArray MailMessage::dotUnstuff(const QByteArray content) const { QByteArray out; QListQByteArray lines content.split(\n); for (int i 0; i lines.size(); i) { QByteArray line lines.at(i); if (line.endsWith(\r)) line.chop(1); if (line.startsWith(.)) out .; out line; if (i lines.size() - 1) out \r\n; } return out; }邏輯說明這里手動處理行尾是因為不同系統(tǒng)上傳入的文本可能混有 \n、\r\n 或 \r統(tǒng)一在函數(shù)入口轉(zhuǎn)成規(guī)范格式再處理。注意這個函數(shù)只處理行首點轉(zhuǎn)義不負責把 \n 替換成 \r\n——這個邏輯應該在構(gòu)建消息體時已經(jīng)完成在 dotUnstuff 中重復處理反而會破壞已編碼的 Base64 塊。5. 六個避坑狀態(tài)機、Base64 換行與 Windows 證書鏈5.1 現(xiàn)象465 端口連接后立即收到 220但 AUTH 后一無所獲這是我在某公司內(nèi)網(wǎng)郵件服務器上遇到的第一個玄學問題。連接正常EHLO 正常AUTH LOGIN 發(fā)出后服務器不回任何響應直到超時。原因排查后發(fā)現(xiàn)服務器的 SMTP 服務的 TLS 層握手使用了 465 端口特有的立即加密模式而 QSslSocket 連接時默認的 sslMode 配置成了 SslMode::None導致明文 AUTH 被服務器丟棄或視為協(xié)議錯誤。解決方案是為每種端口指定獨立的默認 SslMode端口 465 默認 Tls端口 587 默認 StartTls端口 25 默認 None。同時保留 setSslMode 接口供調(diào)用方覆蓋。從那以后凡是端口和加密模式不一致的報錯我第一件事先查配置組合。5.2 現(xiàn)象驗證碼郵件發(fā)送成功后收件人看不到正文開發(fā)階段自己測試一切正常但收件人收到的郵件正文是空的只有附件。這是典型的 Windows 換行符混入導致的解析歧義。Windows 上 QFile 讀取文本或 QString 拼接時默認保留 \r\n而 Linux 下默認只有 \n。郵件體里部分行以 \n 結(jié)尾、部分行以 \r\n 結(jié)尾部分客戶端解析 MIME 邊界時按 \r\n 逐行找 boundary 字符串遇到裸 \n 就誤判后續(xù)結(jié)構(gòu)全亂。解決方案是在構(gòu)建郵件體的入口強制做換行規(guī)范化MIME 頭、正文、附件部分的每一行都以 \r\n 結(jié)尾不做例外處理。這個函數(shù)我放在 MailMessage 構(gòu)造函數(shù)里在 fill 階段統(tǒng)一處理。5.3 現(xiàn)象附件大小超過 10MB 后發(fā)送失敗日志顯示 socket 寫入明顯變慢偶爾還報 connection reset by peer。原因有兩個一是我用 QByteArray 一次性持有整個 Base64 編碼后的內(nèi)容大文件時內(nèi)存翻倍二是 socket 寫入緩沖區(qū)滿后Qt 的 write 函數(shù)返回 -1或只寫入部分字節(jié)我沒有處理partial write 情況。解決方案附件讀取改用分塊讀取Base64 編碼按 3KB 原始數(shù)據(jù)一塊編碼后立即寫入 socket寫入邏輯改為檢查 write 返回值如果只寫入部分則緩存剩余數(shù)據(jù)等 bytesWritten 信號繼續(xù)寫。這個改動后內(nèi)存占用降低發(fā)送穩(wěn)定性明顯提升。5.4 現(xiàn)象Windows 上發(fā)給某大型郵箱服務商的郵件被判定為垃圾郵件Linux 上發(fā)送同樣的郵件沒問題Windows 上卻進了垃圾箱。深入排查后發(fā)現(xiàn)是 Windows 的 QSslSocket 默認不帶系統(tǒng)的 CA 證書鏈路徑導致 TLS 握手的證書鏈驗證結(jié)果與 Linux 不同。某些郵件服務商看到 TLS 握手異常會提高垃圾郵件評分。解決方案是在 Windows 上顯式加載系統(tǒng)證書QSslConfiguration::setCaCertificates 從系統(tǒng)證書存儲讀取或者調(diào)用 setDefaultConfiguration 把 Windows 根證書庫的證書 load 進 QSslSocket。注意這個操作要在連接之前完成不是 connectToHostEncrypted 之后。5.5 現(xiàn)象定時發(fā)送任務在 Linux 服務器后臺運行時偶發(fā)段錯誤用 QTimer 定時觸發(fā) sendMail運行幾天后出現(xiàn) crash。排查發(fā)現(xiàn)是對象生命周期問題sendMail 是異步的SMTP 狀態(tài)機跨多個網(wǎng)絡交互如果調(diào)用方在定時觸發(fā)后立刻銷毀了 SmtpClient 對象socket 信號觸發(fā)時訪問已釋放的內(nèi)存。解決方案是引入 QSharedPointer 或 QPointer 管理客戶端對象生命周期在 mailSent/mailFailed 信號發(fā)出前不釋放?;蛘咴?SmtpClient 內(nèi)部增加一個 m_isDeleting 標志告訴調(diào)用方當前不能銷毀。一般我推薦前者用 shared 指針包裹客戶端放在調(diào)用方的容器里發(fā)送完成信號后再 reset。5.6 現(xiàn)象服務器返回 550 5.7.1 authentication required連接、認證都顯示成功但發(fā)送時被拒日志里出現(xiàn) 550 錯誤。這個坑的根因很隱蔽EHLO 響應里 AUTH 能力列表只有 PLAIN服務器要求必須用 PLAIN 認證但客戶端配置了 LOGIN認證時服務器認為沒有完成有效認證發(fā)送階段才暴露。解決方案是把認證方式選擇做成自動協(xié)商解析服務器通告的 auth list按 CRAM-MD5 LOGIN PLAIN 優(yōu)先級選擇而不是固定調(diào)用方指定。事后我在配置接口里保留了 overrideAuthMethod 方法但默認自動協(xié)商保證內(nèi)網(wǎng)環(huán)境零配置可用。6. 從可用到可靠命令追蹤、自測與超時重傳的三個習慣項目做到能發(fā)郵件只是第一步真正考驗人的是讓這套東西在各種異常環(huán)境下不崩、不丟、不發(fā)重復郵件。所以我在工具正式集成進業(yè)務系統(tǒng)之前養(yǎng)成了三個習慣。第一個習慣是給每次會話做一個命令追蹤文件。SMTP 會話的每一條發(fā)出命令和接收到的響應都帶時間戳追加到日志緩沖區(qū)并提供 dumpSessionLog 方法供外部調(diào)用。排查問題時直接看這個文件就能定位到對話的哪一步出錯——是 TLS 握手沒完成還是認證交互卡在某個 334 響應一目了然。第二個習慣是用 openssl 命令手工模擬一次 SMTP 會話作為對照。通過 openssl s_client -connect host:port -starttls smtp 進入交互模式手工輸 EHLO、AUTH、MAIL、RCPT、DATA能確認服務器行為正常排除工具本身的問題。這個習慣幫我排查過一個非常隱蔽的坑某內(nèi)網(wǎng)服務器要求 HELO 而不是 EHLO只有手工模擬時才會注意到這個細節(jié)代碼里直接跑了六輪 EHLO 全部失敗。第三個習慣是給超時重傳加冪等控制。簡單場景下網(wǎng)絡超時后直接重發(fā)整封郵件可能造成收件人收到兩封相同的信。我在 MailMessage 結(jié)構(gòu)里加了一個 messageId 字段每次重傳使用相同的 Message-ID 頭并對同一邏輯郵件的重傳次數(shù)做上限控制默認最多 3 次間隔 30 秒退避。以重傳擴展為例for (int attempt 1; attempt maxRetries; attempt) { connect(m_job, SmtpJob::mailSent, this, [this]() { notifySuccess(); }); connect(m_job, SmtpJob::mailFailed, this, [this, attempt]() { if (attempt maxRetries) { QTimer::singleShot(30000 * attempt, this, [this]() { sendMail(m_msg); }); } else { notifyFailure(); } }); }邏輯說明重傳間隔按嘗試次數(shù)線性退避30 秒、60 秒、90 秒給服務器恢復留時間而不是無腦重試。參數(shù)說明maxRetries 和 baseInterval 通過構(gòu)造函數(shù)注入方便宿主環(huán)境按業(yè)務場景調(diào)整——實時告警可以縮短間隔日終報表可以放大到 5 分鐘。從那以后我每次接入新郵件服務都要強制走一遍手工 SMTP 會話、日志回放、重傳冪等這三項檢查確實省下不少半夜被叫起來解決問題的麻煩希望幫到你。本文還有配套的精品資源點擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
99在线精品免费视频| 草五月| 99视频久久| 六月丁香啪啪啪| 亚洲精品五十一区| 97碰在线免费观看| 黄色热99| 亚洲天堂制| 六月色丁香中文字幕| 六月色丁香婷婷| 国产在线另类五月婷婷| 亚洲综合另类| 丁香五月天社区| 色播五月丁香| 天天插天天玩天天干| 婷婷五月精品中文| 9九九久久精品无码专区| 玖玖午夜视频| 久久免费操| 婷婷五月天com| 久久狼人天堂| 婷婷五月天激情电影| 日比网免费国产| 色情丁香五月婷婷精品| 另类激情五月在线视频欧美| 99re6久热只有精品6在线直播| 亚洲成色综合网站免费观看| 色色综合网站| 国产99热| 婷婷 久综合| 五月婷婷久久大香蕉| 快色t v在线入口| 久热精品视频在线观| 97婷婷丁香| 色婷婷第四色| 99re热在线视频| 五月丁香五月综合欧美| 五月天婷婷视频| 非洲一级AV| 丁香五月电影| 开心五月激情婷婷| 永久无码色| 成人超碰网| 天天摸天天做天天爱天天爽| 久久五月丁香伊人青草| 色一情一乱一乱一区9| 五月丁香婷婷六月| 五月天色丁香| 激情网婷婷五月天| 玖玖资源站蜜臀| 婷婷六月天| 色婷婷香蕉| 九九99偷拍视频| 丁香六月婷婷| 人人色人人弄人人操| 激情五月天色播| 久久婷婷色| 丁香婷婷激情五月天无毒不卡蜜桃| 五月天社区狠狠| 婷婷五月综合在线视频| 天天干天天色天天干| 天天在线久久综合 | 91婷婷丁香五月天免费视频网站| 丁香婷婷六月婷婷六月婷婷六月婷婷| 五月综合婷婷开心网| 99在线观看视频免费| 狠狠色综合网| 天天插天天日天天爽| 色婷婷最爱五月| 日本熟女三区| 79色色色色| 九一牛视频探花| 69超碰在线| aV直接看| 日本99色| 久久这里面只有精品视频| 亚洲精品五十一区| 99无吗| 色色婷婷五月| 成人电影AV在线观看| 欧洲综合色| 九九色中文| 国产色香蕉精品五夜婷| 9色资源在线| 一本色道久久综合狠狠躁小说| 五月天亚洲综合网| 六月丁香VA| 色综合播放| 97日在线视频| 99爱爱网| 精品网站:999WWW| 99热这里只有精品1025| 超碰91在线| 97碰成超视频免费视频| 大香蕉 婷婷| 日韩另类| 亚洲激情五月婷婷日日| 色婷婷五月综合| 婷婷五月天AV在线| 黄色激情网站在线观看| 色婷婷五月天激情| 思思热视频在线| 久久9精品| 色婷婷啪啪啪啪啪啪| 国产又色又爽又黄又免费| 熟女激情网| 九九99在线免费在线观看视频| 婷婷激情综合色五月久久图片| 亚洲传媒在线观看| 久久六月综合| 9久久久| 婷香狠狠爱五月| 97一区二区| A片试看120分钟做受视频红杏| 五月丁香| 丁香激情网| 人人操AV| 风流少妇A片一区二区蜜桃| 五月天婷婷视频| 91狼友视频网页更新| 天天操天天插天天射| 夜夜操狠狠操| 国产无套精品一区二区| 墨西哥毛片内射精| 丁香婷婷免费| 99热精品在线观看| 爆乳熟女一区二区三区爆乳| 婷婷五月天亚洲综合网| 天天插天天干| 婷婷伊人| 91性高潮久久久久久久久| 天天摸,天天爽| 超碰91av| 日韩 中文 欧美| 丁香五月婷婷基地| 深夜男女福利刺激影院一区| 久久婷五月综合| 97操碰98| 婷婷激情五月天视频在线| 激情小说婷婷| 99国产小视频2013| 99综合视频| 久久码久久无清| 六月丁香婷婷开心综合基地| 熟女人妻一区二区三区免费看| 综合久久高清| 丁香五月婷婷偷拍| 色久一| 欧美日韩成人h| 亚洲五月丁| 婷婷色偷拍| 亚洲综合网激情小说| 免费啪啪亚州视频| 强伦轩人妻一区二区电影| 五月丁香中文字幕| 丁香六月青青草| 五月天狠狠干| 五月婷婷丁香综合,亚洲天堂| 婷婷五月天com| 久草婷婷| 亚洲性图一区二区| av一区二区电影免费在线观看| 另类图片激情五月天| www色五月| 91人人网| 天天日,天天干,天天操| 99这里是99在线视频| 六月婷婷啪啪| 日本色婷婷| 91热在线| 成人精品一区二区三区四区五区| 黑人糟蹋人妻HD中文字幕| 亚洲激情亚洲激情 | 色色亚洲99com| 午夜电影网VA内射| 性爱五月婷| 99热这里只有精品最新| 婷婷丁香五月天大香蕉| 婷婷色五月开心五月| 91色在线| 丁香五月天视频| 第四色色六月色综合| 综合激情视频| 天天草天天日| 日本黄色在线观看| 99热精品中文字幕| 丁香花五月天| 青青草Avb在线| 国内外色色色色色成人视频| 九热视频| 香蕉网婷婷| 天天干天天叉| 玖玖在线| 伊人综合网站| 99九九视频| 97丁香五月| 五月丁香婷婷在线| 伊人六月丁香婷婷| 99色在线免费观看视频| AV电影在线播放| 9色在线| 五月天开心网| 婷婷五月天黄色小说| 天天艹| 97色天堂| 五月丁香啪啪激情| 亚洲AV无码一区二| 婷婷爱五月| 激情5月天天天| 无语停婷丁香网| 婷婷五月激情丁香| 色婷婷婷av| 亚洲乱码日产精品BD| 激情综合色| 91干网| 五月丁香婷婷色色| 日本va欧美va欧美| 五月丁香亚洲校园欧美| 精品人妻在线免费观看| 性生活视频98791| 天天色情站| 超碰在线50| 天天天天操| 99热综合| 超碰在线观看成人视| 色六月婷婷| 色五月丁香一区在线| 蜜乳AV成人| 国产成人综合在线| 这里只有精品69| 9精品视频在线观看| 99热9| 婷婷五月天狠狠搞干| 一本久道综合99| 久久人妻视频| 婷婷五月天久久| 青青草日本亚洲| 激情综合在线观看| 天啪天啪天啪天啪| 202丰满熟女妇大| 26uuu精品一区二区| 亚洲第一色色色色| 五月丁香六月色婷| 日韩久热| 亚洲AV无码一区二| 丁香九月色| 97色碰| 五月婷婷激情久久| 天天操夜夜肏| 三区激情四射av| 六月婷婷久久| 天色综合网| 欧美 日韩 人妻 高清 中文| 久热婷婷| 欧美色色色色色色色| 夜夜做夜夜愛| 婷婷丁香激情| 伊人六月丁香婷婷| 久久国产性爱A V| 99九九在线精品热动漫| 天色综合网| 久久99热网| 色婷婷亚洲精品天天综| 999激情视频| 999影院成人在线影院| 久久杏爱视频| 五月婷婷与六月丁香图片激情| 激情性爱五月| 久青操| 久久婷婷色综合老司机| www.久操| 天天网曰日曰夜夜综合永久免费| 亚洲成人日韩无码精品| 蒲京久久无码视频| 热99玖玖99玖玖99九九| 5月丁香综合图区| 精品人妻伦九区久久AAA片| www,久久久| 久草狼人| www.zbzhongsen.com| 亚州操操| 91日本在线| 欧美日韩成人在线网站| 丁香五月手机在线| 五月停停色色丁香| www.久久爱| 五月天婷婷綜合院| 精品久久99码| 五月婷婷激情综合| 大战熟女丰满人妻AV| 91操人视频| 激情深爱五月天| 91久久久久久久| 99热主页日本| 五月丁香婷婷综合| 日本三级大片| 成人AV片播放| 久久9RE热视频精品98| 色综合久网| 久久日曰| 97操视频| 琪琪理论片| 视频免费精品免费精品免费精品免费精品免费精品免费精品免费99 | 亚洲成人AV电影在线| 伊人无码高清| 9999热在线| 丁香五月97视频| 一区二区乱视频码| 婷婷99视频精品| 色九网| 久久五月丁香| 可以直接看的av网站| A A色色| 激情九九这里只有精品| 第五色婷婷| 婷婷五月综合社区| 五月天综合网| 狠狠狠狠青草| 丁香婷婷五月综合色情| 99热在线这里只有精品| 99视频久久| 精品99在线| 久久九九国产精品怡红院| 国产日韩欧美| Caoub青青超碰 | 色综合久久天天综合网| 亚洲第一综合| 在线看av| 丁香六月天AV| 五月丁香另类图片| 久久99热这里只频精品6学生| 国产99久久久国产精品免费看| 国产在线网址1| 久久免费丁香| 狠狠va| 九九成年视频| 国产伦理精品高清在线观看网站一区二区| 丁香激情六月天婷婷| 深爱五月网| 99色色| 色情综合网| 久久电影五月天丁香电影| 大香蕉久久婷婷| 黄色aaaaa| 狠狠久综合| 欧美大道不卡| 久777| 91视频一起草| 日韩操| 色色色五月婷婷| 九九成人电影婷婷| 久久er视频6| 婷婷丁香五月综合激情小说| 婷婷亚洲综合| 婷婷丁香五月天影院 | 亚洲天堂AAA| 婷香五月激情视频| 草了bav视频在线观看| 日韩av网站在线观看| 日韩 欧美 国产 一区 二区| 五月丁香六月情| 色噜噜狠狠色综合日日| 在线不卡中文字幕| 狠色狠色综合久久| 久久久婷婷婷| 日韩性视频| 99热这里只有精品最新网址| 深爱五月婷婷| 久久久久久久久久8888| 久久久精品人妻| 亚洲成av人影院| 欧美色久| nvrentiantang av| 激情AV网| 天天爱天天日| 久综合色| 色导航色婷婷五月天在线观看| 综合激情视频| 成人丁香色| 99色看| 99自拍视频在线| 大香蕉手机视频| 一区二区三区XXXXXX| anquye伊人| 182TV大香蕉| 国产肥白大熟妇BBBB视频| 99黄色在线视频精品熟女| av免费人人| 欧美激情综合色综合啪啪五月| 91oumei| www.思思99热| 五月综合视频| 久久久久这里都是精品| 大香蕉网站,大香蕉综合| 超碰一区二区| 天天综合图片| 天天插天天射| 欧美大奶熟女噜噜噜噜| 99热在线观看免费精品| 九色婷婷| 99热主页日本| 日韩精品超碰在线观看| 五月天天综合| 99热99久久| 五月婷色激情五月| 色色亚洲视频| 精品国产va久久久久| 4438激情网| 久热爱大香蕉在线蜜臀悦色 | 九九色色| 六月婷婷色综合| 99爱视频免费| 婷婷久久影院| 色5月婷婷| 成人αV视频免费观看| 午夜色色色极品视频| 久久网日本| 五月婷婷|欧美| www.俺去也com| 丁香五月影视| 色.五月综合网| 亚洲人妻AV| 成人av免费观看| 超碰99在线| 国产精品人成A片一区二区| 国产AV一区二区三区日韩| 久久五月婷婷综合网| 91中文狠狠综合| 亚洲99热| 五月婷婷七月丁香| 99久久久久| 精品视频这里只有精品| 婷婷色播综合五月| 五月丁花六月丁香综合| 五月丁香人妻| 色呦精品| 97在线/日本| 五月天伊人综合| 亚洲高清在线| 欧美性爱特黄一级aaaassss| 综合激情站| 日韩久久视频| 日本欧美成人片AAAA| 一本到不卡高清DVD| 青青草五月天| 99热免费网站| 99久久九九| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 色婷婷影视| 日本熟妇乱妇熟色A片蜜桃| 伊人丁香五月天丁香在线婷| 日韩黄色电影| 婷婷丁香六月| 日韩小视频在线99| 色婷婷综合影院| 五月天激情小说| 新激情五月天| 91狠狠综合网| 深爱五月天婷综合| 激情五月婷婷| 中文字幕簧片| 色爽九九| 96丁香婷婷九月蜜桃综合久久| 久久五月情| 久久丁香五月天| 婷婷成人五月天一区| 这里只有精品视频免费在线观看| 丁香五月天激情综合| 99在线视频观看| 色色五月天丁香婷婷| 五月天激情网址| 五月婷视频在线| 超碰在线看| 桃色五月婷婷| 日韩综合网络男女香蕉a片| 开心婷婷五月花| 久久婷婷五月| 国产美女无遮挡裸体毛片A片| 久久精品噜噜噜成人A∨色欲| 99视频内射三四| 欧美成人精品一区二区| 色色亚洲| 色播播婷婷| 99热99精品在线观看| 亚洲av成人在线| 色婷婷激情Av久久久| WWW99热| 激情网婷婷婷| 国产成人一区二区三区在线观看| 六月婷久久| 六月婷婷国产| 性做爰1一7伦| 久久人人看| 五月婷婷六月综合| 亚洲爆乳无码精品AAA片蜜桃| 天堂久久性| 涩涩网五月天| 4399成人黄A片| 性爱五月丁香| 五月丁香淫淫婷婷婷| www.婷婷六月天| 超碰高清在线| 激情小说婷婷五月| 日韩在线看AV| 久草热久草在线视频| 五月天丁香婷婷社区| 丁香桃色综合网| av在线资源| 91色欲综合| 婷婷六月久久| 爱射综合| 五月丁香六月在线欧美| 五夜婷婷| 色私五月婷婷| 饮料下药迷倒漂亮女同事强干| 熟妇内谢69XXXXXA片| 久久久久9999| 综合久久综合| av在线中文| 五月天婷婷基地| 国产乱轮一区二区三区| 99热99免费| 欧美韩国日本| eeuus五月婷| 99久久99久久综合| 色色五月丁香婷婷| 开心五月综合激情网| 9热在线视频| 国精产品久久| 色婷婷AV在线观看| 天天搞天天色综合| 操逼视频网址| 天天日,天天干,天天操| 操碰99在线视频观看| 玖玖资源天天无码| 日韩AV在线免费| 97韩国久久电影院| 先锋影音男人的天堂AV| 亚洲成人va| 嫩草哈哈操| 《》【无码】想被搞到爽AV应募而来的超M素人 西纯子 10musume-011723-01 | 五月丁色AV| 丁香五月在线| 久久综合丁香五月| 色婷婷成人做爰A片免费看网站| 做爱夜夜干天天操| 99成人| 婷婷激情鹿城五月天| 中文幕无线码中文字蜜桃| 就99这里只有精品| 亚洲无AV在线中文字幕 | 99a级片| 97操在线资源| 日本天堂免费99| 97超级操操| 亚洲人人操| 婷婷激情视频| 国产激情综合五月久久| 99热乎| AA片在线观看视频在线播放| 全国最新疫情| 亚洲无码猫咪| 荷兰av一级| 色啪综合| 99精品视频在线观看| 五月永久激情| 日韩成人电影av| 久色大| 亚洲天堂爱爱| 天天色粽合合合合合合合| 色播五月丁香婷婷| 亚洲精品第一国产综合亚AV | 狠狠人人| 亚洲成人在线观看网址| 国产亚洲精品久久一区二区三区| 丁香色六月婷婷| 久久久18| 亚洲综合干| 丁香五月色激情| 日本色综合| 五月婷丁香| 少妇熟女视频一区二区三区| 丁香五月乱中文字幕| 婷婷五月天久久综合88| 五月天播播| 婷婷六月插屄激情| 4399在线观看免费毛片| 色播播五月天| 色女伊人| 欧美又粗又大一区二区在线观看| 丁香六月婷婷基地| 激情综合在线观看| 久久婷婷五月激情网站| 色婷婷色综合激情91| 成人看片网站| 五月天综合激情网| 99热网站| 欧美日韩成人h| 狠狠99| 久久久久久久久久久久久久人妻视频 | 婷婷五月伦理| 99啪啪| 97啪在线观看视频| 超碰人人超碰| 久热只有这里精品| 婷婷五月天色色| AV成人在线网站| 日韩九区| 天天爽夜夜爽天天爽夜夜爽| 成人视屏在线观看| 二区成人视频| 色九九综合| 99九九精品| 激情丁香久久| 国产免费一区二区三州老师F1F1……| 九月丁香| 激情丁香六月| 99热国产在线| 蜜臀丁香黄色婷婷五月天| 九色视频入口91| 色五月天电影| 婷婷五月天美女21p| 激情伊人六| 色噜噜五月天| 日本色啪| 色色99| 色婷久九| 婷婷色5月激情网| 久久一热免费视频| 久久综合影院| 果冻传媒A片一二三区| 五月激情小说网| 五月天伊人网| 丁香六月激情蜜桃| 99热在这里只有免费精品| 六月婷婷七月丁香| 婷婷五月综合中文字幕| 无码AV免费精品一区二区三区| 欧美日韩成人一区二区| 综合一本道| 久久婷婷色丁香| 色色色欧美| 久久久久久久五月| 九月丁香婷婷网| 午夜大香蕉| AV在线免费播放| 玖玖热视频| 精品久久久久久久久久久久人妻| 九九激情网| 91日本在线观看| 久久久A级视频| se色婷婷视频| αv中文字幕在线观| 色色色成人网| 99热在线精品播放| 欧美视频五区| 天天综合精品| 亚洲激情五月丁香久久久久| 五月丁香六月婷婷亚洲激情综合| 开心五月婷婷五月| 91狠狠色丁香婷婷综合久久精品| AV成人在线播放| 日本情色一区二区| 99ri国产精品| 艹色18p| 久久99人人| 天天揷综合网| 少妇人妻丰满做爰XXX| 五月天久久婷婷| 五月开心激情| 开心深爱激情网| 99ri在线视频| 亚洲综合五月天婷婷| 激情婷婷色色| 五月天天综合| 五月婷激情影院| 色色国产| 成人五月天丁香| 婷婷97碰碰| 激情AV在线| 激情综合在线观看| 夜夜资源站| 色综合九九色综合88| 99热这里都是精品| 99热欧美| 丁香六月激情综合| 午夜成人片400| 无码少妇高潮喷水A片免费| 欧类av怡春院| 91色性感五月婷婷丁香| 久久久久久久久18久久| 婷婷中文综合网| 欧美精品在线观看| 91女人18毛片水多国产| 亚洲视频1区| 99久热精品在线| 九九精品热播| 九月婷婷久久久| 丁香五月天信号| 天天在线久久综合| 99极品视频| 婷婷五月丁香伊人网| 五月婷婷激情综合拍| 这里只有精品视频99| 操骚货在线| 国产精品色婷婷99久久精品| 五月婷av| 亚洲字幕AV一区二区三区四区| 1024操逼| 1区2区视频| 成人在线网| 色噜噜,噜噜色| 欧美97p| 九九视频这里只有精品| 五月停亭六月,六月停亭的英语| 人人摸人人摸| 成人亚洲精品久久久久| 99啪在线视频| 九九热中文| 丁香五月欧美成人| 色婷婷五月天激情综合| 99热.com| 中文AV网站| 久久97久久99久久综合欧美| 日本三级片片| 天天五月丁香五月| 婷婷激情啪啪| 超碰超碰在线| 国外亚洲成AV人片在线观看| 丁香色五月AV在线| 思思视频久久| 婷婷激情五月天在线| 91婷色| 能看的av| 久艹伊| 成人五月天在线观看| 天天天天天天天操| 丁香六月激情| 久久色大香蕉| 五月婷婷久久大香蕉| 六月婷婷狠狠| 五月天婷婷成人资源站| 区美毛片子| 99国产精品白浆在线观看免费| 99热精品超碰| 中文字幕丰满乱孑伦无码专区| 只有久久精品免费| 超碰91在线| 久久五月婷天天干| 亚州色综合| 99婷婷五月天| 五月天亚洲综合网| 久热这里| 精品爆操| 天天干天天 亚洲| 人人97碰| 伊人激情综合| 亚洲五月婷婷在线| 色婷婷88| 国产欧美大香蕉一区| 婷婷成人综合| 国产偷人妻精品一区| 操一区| 色婷婷激情五月天| 青青草原亚洲天堂| 婷婷五月天干干| 婷婷97碰碰| 99婷五月| 五月丁香久久网| 色色色色av色色色色| 五月婷婷六月激情| 97人妻碰碰碰久久香蕉| 99综合激情久久精品久久| 日本丁香五月| 色爱综合五月| 四色女婷婷| 五月天大香蕉| 九九精品99久久久| xfplayav在线| 美女网黄| 亚洲热视频在线| 黑人巨粗进入警花疼哭A片| 色五月天堂| 亚洲av骚货| 丁香五月亚洲综合丝袜| 丁香色六月婷婷| 伊人婷婷综合| 中文网婷婷字幕婷| 天天天天天天天操| 丁香五月色情| 超碰在线观看99| 婷婷丁香五月综合免费视频百花| 综合久久十| 色的色综合| 天天爱天天爽| 黄网在线播放| 亚洲成人中心| 丁香五月www| 天天夜天天色天天| 五月天综合视频| 91日日日| 日日色五月天| 中文av网| 欧美日综合| 九九色综合网| 草榴视频网| 久机视频这只有精品| 六月丁花香啪啪激情欧美| 99色啊| 99热亚洲| 色五月激情视频在线综合| 99re热视频这里只精品5| 蜜乳中文字| 色135综合网| 丁香狠狠| 九九性视频| 亚洲国产色婷婷| 日日干天天爽| 亚洲丁香花色| 久久久久久久人妻| WWW,色五月| 色色色色网| 五月丁香久人妻中文| 丁香五月天激情网| 丁香五月之久操视频| 99热这里只有精品33| 激情丁香五月婷婷| 天天情天天狠天天透| 久久a热| 激情五月天久久丁香| 九九99精品| 91九色在线| 这里只有精品视频99| www.久久爱| 26UUU精品一区二区| 五月天婷五月天综合网小说首页-五月天激激婷婷大综合,婷婷亚洲综合五月天小说 | www,天天干| 天色色综合网| A久久| 97婷婷狠狠久久综合9色| 99久久综合精品五月天| 天堂在线观看视频| 亚洲视色| 五月丁香啪。| www999日韩精品| 大香蕉精品视频| 深爱激情丁香| 婷婷5月天激情综合| 国产精品涩涩涩视频网站| 国产又黄又爽又激情不遮挡视频在线观看| 人妻熟人中文字幕一区二区 | 91色久| 国产99美少妇| 欧洲MV日韩MV国产| 色五月丁香伊人| 97五月婷| 亚洲操B| 亚洲成人高清在线| 色99在线观看| 婷婷综合成人五月天| 超碰在线免费观看3 9| 人妻精品一区二区三区| 天堂久久婷婷| 九九热在线视频| 天天操天天操天天操| 97干在线视频精品店| 久久性爱视频网站| 亚洲99综合| 伊人婷婷五月天| www夜夜操wwwcon| 日本三级毛片| 丁香五月伊人| 天天舔天天摸天天透| 激情五月综合网| 国产精品久久7777777精品无码| www.99久久久久99| 婷婷啪啪| 99精品爱| 丁香色色五月| 色婷婷五月在线| 日韩a热| 色综合久久88色综合天天| 五月婷婷五月天亚洲无码| 草榴视频网| 久久色情| 亚洲色婷婷视频| 精品牛仔裤超碰| 日日操天天操| 精品五月天| 大香蕉综合在线| 精品成人在线| 人人操99| 五月婷婷自拍视频| 日本高清久久| 91操黄| 五月婷婷之综合激情| 夜夜天天久久婷婷| av免费在线观看0| 久色网| 狠色狠色综合久久| 国产成人AV在线| 日本黄色三级片内射| 欧美精品啪啪| 五月丁香久久综合| 亚洲成片在线观看| 色五月婷婷网| 狠狠色97| 激情 婷婷 插| 99久在线| 第四色色色色色丁香五月天| 手机旧版看人妻1025| 天天色五月| 操91综合网| 综合激情五月天| 五月婷婷六月丁香在线视频| 五月婷五月婷伊人伊人五月婷| 九97免费视频| 丁香五月天啪啪| 五月激情小说| 99热这里只有精品50| 久久婷婷色| 九九久久精品國產| 思思re视频在线| 婷婷五月成人色综合| 玖玖婷婷视频| 91se视频| 亚洲五月天激情| 色五月丁香婷婷| 婷婷综合成人五月天| 情色五月天 网站| 五月激情在线| 99热免| 丁香色啪综合| 大香网伊人久久综合| 成人片在线免费看| 成人亚洲精品久久久久 | 五月丁香婷婷激情爱爱| 97人人干| XX色综合| 精品99视频| 丁香五月婷婷激情蜜桃| 就爱啪啪婷婷| 2015好吊操| 国产avapp 网| 激情婷婷五月少妇| jiujiuxiangjiaowang| 97精品人人A片免费看| 久久婷婷成人综合色怡春院| 99热在线观看精品| 99热这里只有精品1| 九六五月天婷婷| 在线看片av| 玖玖综合网| 五月天婷婷丁香花| 九九热免费视频| 久热成人| 五月天久久婷婷| 色色色婷婷| 五月天淫乱视频| 五月天婷婷色播在线网| 成人va在线观看视频| 婷婷伊人综合中文字幕| 丁香婷婷婷五月综合色情| 五月婷婷综合在线视频| 九九热123| 欧美性色A片免费免费观看的| 免费精品99| 开心五月激情网| 激情婷婷丁香| 日韩色色视频| 五月丁香婷婷色| 中文字幕不卡+婷婷五月| 99色视频免费在线规看| 影音先锋 婷婷| 五月天成人伊人| 五月激情精品视频| 天天人人天天爽| 99热九九这里只有精品| 色五月综合网| 久久五月天婷婷| 婷婷五月av| 亚洲欧美成人在线| 成人AV在线网站| 超碰在线人人| 国产67194| 五月丁香| jiujiu无码五区| 激情婷婷丁香色五月综合| 五月六月激情婷婷| 伊人狠狠狠综合| 久久性爱网站| 欧美色欲色欲天天天www| 激情九九综合网| 狠狠狠狠狠狠草| 夜夜噜夜夜奇| 五月色精品| 五月丁香六月激情啪| 五月天五月天激情网| 五月婷婷官网色| 激情五月天偷拍综合网| 综合性爱网| 99精品性爱| 天天日天天插| 五月婷婷六月丁香综合| 亚洲综合色色色| 色色五月天丁香| www.五月天| 啪啪啪大香蕉| 日本片日本片祼观看网站在线看中文版网页在线看 | 久久久久久久97| 涩五月婷婷| 人与禽A片啪啪| AV片一区在线观看| 婷婷综合天堂| 黑人无码一区| 成人短视频在线| 六月婷婷五月丁香首页| 天天操,夜夜骑| 日欧大屏操| aa久久| 91色久| 一区二区成人电影免费播放| 丁J香六月首页| 色综合狠狠色| 亚洲sesesese| 色五月婷婷大| 久久精品这里只有精品免费首页| 在线视频另类| 久久AAAA片一区二区| 五月色亭丁香| 色色婷婷丁香| 五月婷综合性中心| 丁香桃色网| 二色av| 日本色色色色色色色色一色二色| 婷婷综合干| www99热| 99热最新| 亚洲婷婷激情888精品久| 夜夜撸夜夜骑| 夜夜爽天天爽| 9热成人在线视频| 玖玖色综合网| 综合狠狠五月婷婷| 久久五月天婷婷| 久久久网站| 99操网站| 婷婷色播色五月五色五月天色妇| 天堂草在线观| 亚韩在线视频| 夜夜爽77777妓女免费下载 | 激情综合网色播五月| 在线不卡视频| 丁香花社区av| 婷婷久久网| 婷婷五月天激情影片| 婷婷九月激情| 激情六月婷婷啪啪| 婷婷的久久网站| 丁香五月天啪啪激情综合网| 激情九月婷婷| 内射 无码 伊人| 久热婷婷| 婷婷狠狠操| www.夜夜操| 久超超碰| 思思精品久久艹| 美女网黄| 久在热99| 久久五月天综合视频网站| 天天草天天摸| 激情综合五月婷婷| 超碰成人av| 青青草日本亚洲| 99精品综合视频| 99国产在线精品视频| 免费黄色AV| 亭亭五月天黑人2014| 超碰在线人妻| 综合激情四射一theav| 天天爽成人综合网站| 天天干夜晚夜操| 国产午夜成人AV在线播放| 九月丁香婷婷综合| 丁香六月天堂| 亚洲无码色| 超碰91在线| 噜噜色婷婷| 丰满老熟妇BBBBB搡BBB| 成人av在线电影| 色在线视频网2025| 午夜天堂一区人妻| 伊人婷婷青青cao| 久久丁香综合| 久久九九思思| 天天操夜夜夜拍拍拍| 伊人久久五月天| 色婷婷色五月综合| 婷婷成人综合五月| 婷婷五月情| 婷婷操超碰| 天天色综网| 日日操夜夜擼| 久热这里只有精品6官网亚洲| 亚洲激情.com| 午夜天堂一区人妻| 99色综合网| 色伊人婷婷| 婷婷中文综合网| 狠狠色综合777| 婷婷五月情| 五月婷婷色在线| 五月丁香五月丁香| 久久九九国产精品怡红院| 久久99免费视屏| 这里只有免费的精品| 久久丁香| 武则天精品久久| ji'qi'luan'ren'lun| 综合久久丁丁香婷| 热的五码久久精品| 五月丁香自拍| 婷婷丁香五月激情密臀av| 99热这里只有精品最新| http:色情日本com| 蜜臀av无码久久久久久久久| 丁香六月在线| 色婷婷免费观看| 成人网址在线观看| 天天操天天曰天天射| 五月婷婷色五月| 丁香六月天婷婷| 超碰熟女拍拍| 丁香五月伊人| 五月婷婷精品无在线| 天天肏视奸| 好激情在线综合网| 人人综合色| 激情五月天色婷婷| 九九九九中文字幕| 啪啪小说五月天| 婷婷狠狠爱| 久久激情网| 五月婷免费视频| 夜夜骑天天玩天天日| 日韩婷久| 亚洲视频99| 六月婷婷七月丁香| 五月丁香六月婷| 丁香五月停停基地| 97狠狠色| 久/久精品99看9| 9999久久久久| 久久xxxx| 五月丁香综合激情| 五月婷婷视频啪啪美女| 日本欧美成人片AAAA| 五月婷婷干| 丁香五月综合| 91dy.av| 色婷婷狠狠禁久久| 天天狠狠干| 4399在线观看免费高清黄色视频| 9有码中文| 色噜噜综合网| 99精品久久| 五月天大香蕉| 国产亚洲精品AAAAAAA片| 开心日韩丁香婷婷五月| 91性交在线播放| 五月天婷婷人妻| 婷综合六月| 五月天成人在线播放| 久久五月激情| 丁香五月社区| 4399啪啪视频| 国产精品 的国产| 色爱亚洲| 97超级操操| 久操大香蕉| 99 频99热国里只有精品| 亚洲性爱AV在线| www.minyis.com【JT】实力收量可预付QQ2101460746 | 激情操逼婷婷| 九九视频这里只有精品| 97资源碰碰| 色婷婷五月天| 热久久视频99| 黄色91在线观看| 大香蕉婷婷色| 天天综合亚洲综合网天天αⅴ| 丁香五月婷婷激情97| 五月色影院| 欧美在线干| 色综合77777| 五月婷婷影院| 六月婷婷成人| 性爱激情五月| www,com,五月色色| 天天舔天天摸天天射| 99久久九九视频| 色综合另类| 丁香六月天AV| 精品九九久久| YJLZZJLZZ亚洲乱熟无码| 丁香五月激情六月| 久久99精品久久久久久青青AR| 久久婷婷综| 777精品成人a v久久| 视频在线免费观看欧洲乱码| 91热爆在线| 色婷婷丁香五月综合| 五月天丁香网站| 婷婷丁香中文字幕| 综合婷婷久久| 亚洲99视频| 五月丁香黄色| 九月激情婷婷丁香| 五月激情婷婷丁香| 这里有精品99| 亚洲精品无码99热| 九色PORNY自拍成人精彩视频| 婷婷五月天无码熟女| 日本丰满久久| 99精品久久久久| 狠狠色狠狠鲁| 丝袜熟女一区二区三区| 91碰碰| 五月天激情社区| 在线不卡中文字幕| 一起草AV| 99这里| 久久国产性爱A V| 伊人五月天97| 人与禽A片啪啪| 丁香五月人妻| 毛片毛片毛片毛片| 99热日韩| 91VIP在线观看| 中文成人在线| 色色婷婷丁香| 五月丁六月香| 色色色在线免费视频| 亚洲视频操| 91麻豆国产三级精品福利在线观看| 色玖玖爱| 丁香六月婷婷综合在线| 久久99热这里只有精品首| 97碰人人操| 色色色激情网| 免费视频99| 久久婷丁香五月| 日日爱699| 久久这里只有精品07| 黄网在线免费播放| 天堂网操| 久久精品国产一区二区三区四区| 激情丁香六月| 另类图片 五月激情| 婷婷五月天综合网| 久久久五月天网站| 丁香婷婷浪潮AV久久综合| 欧美久热| 成人国产综合| 九热视频在线精品15| 五月天亭亭俺也|