Qt5.5 使用smtp發郵件的各種坑


本人剛開始學習C++,用的是Qt5.5的IED,經過了兩天的學習和查找資料,終於成功發了第一封郵件。以163郵箱為例,簡單總結一下。

 

1、設置郵箱

這一步比較關鍵,要開通smtp服務,在開通的過程中會讓你輸入一個郵箱客戶端授權碼,這個才是你后面要用到的密碼,而不是你登陸郵箱的密碼;

 

2、找代碼

也許你會問我,為什么不自己寫呢?還是不太懂smtp,先看看別人的怎么寫。

先了解了一下郵件是怎么被發出去的。

 

telnet命令發送郵件

打開cmd.

1. 輸入 telnet smtp.163.com 25 回車

我試驗了好幾個郵箱服務器,大都有嚴厲的反垃圾郵件系統,導致郵件發不出去,幸好163的郵箱竟然可以.TX威武呀.smtp的協議端口為25.

2. 輸入 HELO smtp.163.com 回車

我搜集的一些資料中既有使用helo又有使用ehlo的,結果還使我糾結了好久,后來又google才知道,原來都可以.這句應該是與服務器打招呼.如果返回250表示服務器准備就緒,可以進行下一步了.

3. 輸入 AUTH LOGIN 回車

這是指定登錄的模式,這句應該是一般模式.返回334就可以進行下一步了.

4. 輸入 經過base64加密的你的賬戶名,比如你的qq號是123456,就去百度下 base64加密,然后找個地方將你的q號加密,copy到命令行回車返回334,下一步是輸入經過base64加密過的你的密碼

5. 輸入 你的base64加密過的密碼,方法同上,然后服務器返回235,表示驗證通過,可以進行下一步了.

6. 輸入 mail from:<****@qq.com> 這里寫你的qq郵箱,服務器返回250.

7. 輸入 rcpt to:<****@qq.com> 這里寫你要發送給的qq郵箱,貌似其他郵箱不可以,服務器返回250,下一步

8. 輸入 data,表示開始傳送數據,服務器返回354

9. 輸入 subject:你的主題此處服務器無回顯

10. 輸入 此處什么也不用寫,直接回車換行,作為主題與正文的分界此處服務器無回顯

11. 輸入 在這里寫你的正文就可以了此處服務器也無回顯

12. 輸入 .對,就是一個英文句號,表示數據傳送完畢,服務器返回250

13. 輸入 quit服務器返回221,就安了,完成了,看看郵件收到了沒.

 

3、如果你發成功了,就可以考慮如何用代碼實現這個發郵件的過程。

 網上找了一個比較靠譜的發郵件的工具類,可以拿來用,叫 sendemailapi (http://messyink.cn/download/sendemailapi.zip)。

當然有些代碼還是需要寫的~

 

//實例化發送郵件對象
SmtpClient smtp("smtp.163.com", 25, SmtpClient::TcpConnection); smtp.setUser("******@163.com"); smtp.setPassword("******"); //構建郵件主題,包含發件人收件人附件等.
MimeMessage message; message.setSender(new EmailAddress("******@163.com")); //逐個添加收件人
message.addRecipient(new EmailAddress("******@163.com")); //構建郵件標題
message.setSubject(QStringLiteral("系統檢測")); //構建郵件正文
MimeText text; text.setText(QStringLiteral("測試簡單文本發送!")); message.addPart(&text); if (!smtp.connectToHost()){ qDebug() << QStringLiteral("服務器連接失敗!"); } if (!smtp.login()){ qDebug() << QStringLiteral("用戶登錄失敗!"); } if (!smtp.sendMail(message)){ qDebug() << QStringLiteral("郵件發送失敗!"); }else{ qDebug() << QStringLiteral("郵件發送成功!"); } smtp.quit();

 

 

4、到了這一步,確實是把郵件發出來了。但是一看郵件頓時驚呆了。竟然全都是亂碼,最后通過朋友的幫助,在所有的漢字上加上了QStringLiteral(),結果才算好了。

 

參考:

http://blog.csdn.net/etwdone/article/details/52995496

http://www.qtcn.org/bbs/read-htm-tid-56050.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM