QT5 使用163郵箱傳送郵件

2021-08-11 15:40:11 字數 2880 閱讀 2794

所以研究了一下smtp的原理,自己寫了乙個簡單的smtp類,跟大家分享一下。

先說一下實現的功能:qt5.5(msvc_x64)使用163郵箱向 qq郵箱 和 163郵箱 傳送郵件(其餘郵箱我沒有測試,也沒有寫接收郵件的功能)

先說一下前期的實驗工作,後面我會貼原始碼,只關注程式的童鞋可以直接向後翻。

1.在osi協議中,smtp屬於應用層,所使用的傳輸層協議是tcp。

2.登入163郵箱,設定開啟smtp。

忘記授權碼的童鞋可以重置一下,記住這個授權碼,後面要用。

假設郵箱是[email protected],授權碼是bbbbbb,收件人的郵箱是[email protected]

3.使用windows自帶的telnet來進行資料測試:(這一部分主要借鑑於qt5.5 使用smtp發郵件的各種坑)

telnet不是內部或外部命令的解決方案

首先開啟cmd.

輸入 telnet smtp.163.com 25 回車

會返回220 163.com anti-spam gt for coremail system (163com[20141201])輸入 helo smtp.163.com 回車

如果返回250 ok表示伺服器準備就緒,可以進行下一步了.

輸入 你的base64加密過的密碼,方法同上.

返回235 authentication successful,表示驗證通過,可以進行下一步了.

輸入 mail from:[email protected] 這裡寫你的郵箱

返回250 mail ok.

輸入 rcpt to:[email protected] 這裡寫收件人的郵箱

返回250 mail ok.

輸入 data,表示開始傳送資料

返回354 end data with .(要以英文的 . 截止資料)

輸入 from:[email protected]

伺服器無返回.

輸入 to:[email protected]

伺服器無返回.

輸入 subject:test 回車 (「test」為郵件主題)

伺服器無返回.

輸入 此處什麼也不用寫,直接回車換行,作為主題與正文的分界

伺服器無返回.

輸入 this is a test mail. 回車 (「this is a test mail.」 為郵件正文)

伺服器無返回.

輸入 . 乙個英文句號,表示資料傳送完畢

返回250 mail ok queued as smtp14即為傳送成功.(現在就可以去查收一下郵件了)

輸入 quit

返回221 bye

但是cmd中輸入中文會亂碼, 這個問題不用擔心,程式中是可以傳送中文的。(可能是編碼方式的問題)

好了,到這裡準備工作已經結束了,程式分為以下幾個部分。

1. tcp客戶端與smtp.163.com:25 進行連線和資料通訊

2. 資料加密問題,將使用者名稱和密碼使用base64加密,使用qbytearray.tobase64()

qt使用qtcpsocket和qtcpserver通訊是出現亂碼的問題

建立mailtest的qt工程

mailtest.pro

sources += \

main.cpp \

smtp.cpp

headers += \

smtp.h

qt += network

新增smtp class

smtp.h

#ifndef smtp_h

#define smtp_h

#include

#include

#include

class

smtp

;#endif // smtp_h

smtp.cpp

#include "smtp.h"

#include

smtp::smtp(qbytearray username,qbytearray password)

else

qdebug()<

}void

smtp::send(qbytearray recvaddr,qstring subject,qstring content)

main.cpp

#include

int main()

yii使用163郵箱傳送郵件

1.在配置檔案中 main local.php 新增下列 注意是放到 components 引數裡 return components db class yii db connection dsn mysql host localhost dbname yii1 username root pass...

Python中通過163郵箱傳送郵件

與郵件傳送有關的模組 import smtplib 在設定郵件的主題 內容時需要用到的模組 from email.mime.text import mimetext 163 郵箱的伺服器位址,如果需要實現用其它郵箱實現傳送 郵件,這裡需要改為其它郵箱的伺服器位址 mail163server smtp...

呼叫API傳送郵件163郵箱Python

發郵件的庫 import smtplib from email.mime.text import mimetext smtp伺服器 smtpsever smtp.163.com 發郵件的位址 sender 18332191389 163.com 傳送這郵箱的密碼 passwd xx 設定傳送的內容 ...