一、前言
郵件發送工具是好多年前就開源出來的,核心就是調用最底層socket通信來實作的郵件發送程式,以前用C#寫過,微軟都封裝好的,不知道底層是如何實作的,隻知道調用方法,這次用C++實作了下,參考了很多網上的例子。
其實說白了,無非就是smtp協定的使用,這個是國際通用的标準,是以QQ郵箱和163郵箱都可以用,都可以互發,來自百度百科的解釋:SMTP目前已是事實上的在Internet傳輸E-Mail的标準,是一個相對簡單的基于文本的協定。在其之上指定了一條消息的一個或多個接收者(在大多數情況下被确定是存在的),然後消息文本就傳輸了,可以自行搜尋具體原理。
其他說明:163郵箱和126郵箱,發送端口都是25,不使用SSL協定,而QQ郵箱必須使用SSL協定,端口為465。如果是QQ郵箱發送的話,前提要在QQ郵箱設定中将smtp協定開通,否則發送不成功,我就困在這裡半個小時,結果收到QQ郵箱發過來的一封郵件,你妹啊,預設QQ郵箱沒有開啟SMTP服務。
主要功能:
- 持主流郵箱例如163郵箱QQ郵箱的發送。
- 支援富文本發送,可以發送帶有HTML格式的文本。
- 支援多個附件發送,附件可以是圖檔。
二、代碼思路
void SendEmailThread::run()
{
while (!stopped) {
int count = contents.count();
if (count > 0) {
mutex.lock();
QString content = contents.takeFirst();
QString fileName = fileNames.takeFirst();
mutex.unlock();
QString result;
QStringList list = sendEmailAddr.split("@");
QString tempSMTP = list.at(1).split(".").at(0);
int tempPort = 25;
//QQ郵箱端口号為465,必須啟用SSL協定.
if (tempSMTP.toUpper() == "QQ") {
tempPort = 465;
}
SmtpClient smtp(QString("smtp.%1.com").arg(tempSMTP), tempPort, tempPort == 25 ? SmtpClient::TcpConnection : SmtpClient::SslConnection);
smtp.setUser(sendEmailAddr);
smtp.setPassword(sendEmailPwd);
//建構郵件主題,包含發件人收件人附件等.
MimeMessage message;
message.setSender(new EmailAddress(sendEmailAddr));
//逐個添加收件人
QStringList receiver = receiveEmailAddr.split(';');
for (int i = 0; i < receiver.size(); i++) {
message.addRecipient(new EmailAddress(receiver.at(i)));
}
//建構郵件标題
message.setSubject(emialTitle);
//建構郵件正文
MimeHtml text;
text.setHtml(content);
message.addPart(&text);
//建構附件-報警圖像
if (fileName.length() > 0) {
QStringList attas = fileName.split(";");
foreach (QString tempAtta, attas) {
QFile *file = new QFile(tempAtta);
if (file->exists()) {
message.addPart(new MimeAttachment(file));
}
}
}
if (!smtp.connectToHost()) {
result = "郵件伺服器連接配接失敗";
} else {
if (!smtp.login()) {
result = "郵件使用者登入失敗";
} else {
if (!smtp.sendMail(message)) {
result = "郵件發送失敗";
} else {
result = "郵件發送成功";
}
}
}
smtp.quit();
if (!result.isEmpty()) {
emit receiveEmailResult(result);
}
msleep(1000);
}
msleep(100);
}
stopped = false;
}
三、效果圖

四、開源首頁
以上作品完整源碼下載下傳都在開源首頁,會持續不斷更新作品數量和品質,歡迎各位關注。