首页 » PHP教程 » 邮箱控件php技巧_Qt开拓小对象之四邮件发送对象

邮箱控件php技巧_Qt开拓小对象之四邮件发送对象

duote123 2024-12-06 0

扫一扫用手机浏览

文章目录 [+]

实在说白了,无非便是smtp协议的利用,这个是国际通用的标准,以是QQ邮箱和163邮箱都可以用,都可以互发,来自百度百科的阐明:SMTP目前已是事实上的在Internet传输E-Mail的标准,是一个相对大略的基于文本的协议。
在其之上指定了一条的一个或多个吸收者(在大多数情形下被确定是存在的),然后文本就传输了。

二、开拓环境

项目名称:邮件发送工具

邮箱控件php技巧_Qt开拓小对象之四邮件发送对象

开拓环境:XP+QT4.7+QT CREATOR2.8+MINGW

邮箱控件php技巧_Qt开拓小对象之四邮件发送对象
(图片来自网络侵删)

已编译通过测试平台:XP、Win7、ubuntu、tiny210、TE6410

技能实现:通过socket通信实现smtp协议,根据应答解析协议并作出处理发送邮件

三、基本功能

1:支持主流邮箱例如163邮箱QQ邮箱的发送。

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

3:支持多个附件发送,附件可以是图片。

四、其他解释

163邮箱和126邮箱,发送端口都是25,不该用SSL协议,而QQ邮箱必须利用SSL协议,端口为465。
如果是QQ邮箱发送的话,条件纲在QQ邮箱设置中将smtp协议开通,否则发送不堪利,我就困在这里半个小时,结果收到QQ邮箱发过来的一封邮件。

五、效果图

六、开拓步骤

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

第二步:准备好sendemailapi文件夹,里面存放的公开的第三方的支持发送附件和富文本的MIME协议文件。
添加到项目中。

第三步:实例化邮件发送工具。

第四步:构建邮件主题,包含发件人收件人附件等。

第五步:登录做事器发送邮件

#include \公众sendemailthread.h\公众#include \"大众sendemail/smtpmime.h\公众QScopedPointer<SendEmailThread> SendEmailThread::self;SendEmailThread SendEmailThread::Instance(){ if (self.isNull()) { static QMutex mutex; QMutexLocker locker(&mutex); if (self.isNull()) { self.reset(new SendEmailThread); } } return self.data();}SendEmailThread::SendEmailThread(QObject parent) : QThread(parent){stopped = false;emialTitle = \公众邮件标题\"大众;sendEmailAddr = \"大众feiyangqingyun@126.com\"大众;sendEmailPwd = \"大众123456789\公众;receiveEmailAddr = \"大众feiyangqingyun@163.com;517216493@qq.com\公众;contents.clear(); fileNames.clear();}SendEmailThread::~SendEmailThread(){ this->stop(); this->wait(1000);}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;}void SendEmailThread::stop(){ stopped = true;}void SendEmailThread::setEmialTitle(const QString &emailTitle){this->emialTitle = emailTitle;}void SendEmailThread::setSendEmailAddr(const QString &sendEmailAddr){this->sendEmailAddr = sendEmailAddr;}void SendEmailThread::setSendEmailPwd(const QString &sendEmailPwd){this->sendEmailPwd = sendEmailPwd;}void SendEmailThread::setReceiveEmailAddr(const QString &receiveEmailAddr){this->receiveEmailAddr = receiveEmailAddr;}void SendEmailThread::append(const QString &content, const QString &fileName){ mutex.lock();contents.append(content);fileNames.append(fileName); mutex.unlock();}

相关文章

php入门指针技巧_10分钟掌握C措辞指针

在讲指针之前,我们先来理解下变量在「内存」中是如何存放的。在程序中定义一个变量,那么在程序编译的过程中,系统会根据你定义变量的类型...

PHP教程 2024-12-08 阅读0 评论0