QT開發之旅四郵件發送工具


終於有了一個晚上安靜的寫寫程序,最近一直忙着公司商務上的事情,一直想用QT實現一個調用最底層socket通信來實現的郵件發送程序,以前用C#寫過,微軟都封裝好的,不知道底層是如何實現的,只知道調用方法,這次用C++實現了下,參考了很多網上的例子。

其實說白了,無非就是smtp協議的使用,這個是國際通用的標准,所以QQ郵箱和163郵箱都可以用,都可以互發,來自百度百科的解釋:SMTP目前已是事實上的在Internet傳輸E-Mail的標准,是一個相對簡單的基於文本的協議。在其之上指定了一條消息的一個或多個接收者(在大多數情況下被確定是存在的),然后消息文本就傳輸了。可以參見http://baike.baidu.com/link?url=UAahhbpfOatRRHfUpG6jUyrgYgF3Kj7ll2WkJ6104RiAETv-jh-f-Xm1fwWMotrP

 

項目名稱:郵件發送工具

開發環境:XP+QT4.7+QT CREATOR2.8+MINGW

已編譯通過測試平台:XP、Win7、ubuntu、tiny210、TE6410

技術實現:通過socket通信實現smtp協議,根據應答解析協議並作出處理發送郵件

基本功能:

1:支持主流郵箱例如163郵箱QQ郵箱的發送。

2:支持富文本發送,可以發送帶有HTML格式的文本。

3:支持多個附件發送,附件可以是圖片。

說明:163郵箱和126郵箱,發送端口都是25,不使用SSL協議,而QQ郵箱必須使用SSL協議,端口為465。如果是QQ郵箱發送的話,前提要在QQ郵箱設置中將smtp協議開通,否則發送不成功,我就困在這里半個小時,結果收到QQ郵箱發過來的一封郵件,內容如下:

你妹啊,默認QQ郵箱沒有開啟SMTP服務。

 

運行截圖:

 

 

 

粗略步驟:

第一步:布局好界面,控件命名好,建議用pascal命名法。

第二步:准備好sendemailapi文件夾,里面存放的公開的第三方的支持發送附件和富文本的MIME協議文件。添加到項目中。

第三步:實例化郵件發送對象

    SmtpClient smtp(ui->cboxServer->currentText(),

                    ui->cboxPort->currentText().toInt(),

                    ui->ckSSL->isChecked()?SmtpClient::SslConnection:SmtpClient::TcpConnection);

    smtp.setUser(ui->txtSender->text());

    smtp.setPassword(ui->txtSenderPwd->text());

 

第四步:構建郵件主題,包含發件人收件人附件等

MimeMessage message;

    message.setSender(new EmailAddress(ui->txtSenderAddr->text()));

 

    //逐個添加收件人

    QStringList receiver = ui->txtReceiverAddr->text().split(';');

    for (int i = 0; i < receiver.size(); i++){

        message.addRecipient(new EmailAddress(receiver.at(i)));

    }

    //構建郵件標題

    message.setSubject(ui->txtTitle->text());

 

    //構建郵件正文

    MimeHtml text;

    text.setHtml(ui->txtContent->toHtml());

 

    //    //如果直接發送簡單文本,使用以下方法

    //    MimeText text;

    //    text.setText("測試簡單文本發送!");

 

    message.addPart(&text);

 

    //構建附件

    QString atta=ui->txtAtta->text();

    if (atta!=""){

        QStringList attas=atta.split(";");

        foreach (QString tempAtta, attas) {

            QFile *file=new QFile(tempAtta);

            if (file->exists()){

                message.addPart(new MimeAttachment(file));

            }

        }

}

 

第五步:登錄服務器發送郵件

if (!smtp.connectToHost()){

        QMessageBox::critical(this,"錯誤","服務器連接失敗!");

        return;

    }

    if (!smtp.login()){

        QMessageBox::critical(this,"錯誤","用戶登錄失敗!");

        return;

    }

    if (!smtp.sendMail(message)){

        QMessageBox::critical(this,"錯誤","郵件發送失敗!");

        return;

    }else{

        QMessageBox::information(this,"錯誤","郵件發送成功!");

    }

smtp.quit();

 

 

 

CSDN下載地址:

 

源碼下載:http://download.csdn.net/detail/feiyangqingyun/7030449 

可執行文件下載:http://download.csdn.net/detail/feiyangqingyun/7030459 


免責聲明!

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



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