首页 > 技术文章 > qt5.5.1+vs2010发送邮件

dachen408 2017-08-05 11:50 原文

最近用到了这个功能,用于验证登陆~为此在网上找了好久,发现这方面的问答并不多!唯独这篇的解答实在。原文传送

1、首先选定自己的发送方的邮箱,无论是163还是qq邮箱等,首先都得开通SMTP服务;以163为例:

这里写图片描述
开启之后会收到一个授权码(自己设置的),在之后的登陆处使用的并不是邮箱密码,而是这个授权码。

2、准备好sendemailapi文件夹放置项目源文件目录下,里面存放的公开的第三方的支持发送附件和富文本的MIME协议文件,拖进一个PushButton用以测试,右击项目文件点击“Add Existing Directory” 把sendemailapi添加进来。记得添加–>这里写图片描述

这里写图片描述

3、至于这个槽怎么写 ,上面那篇文章写的很清楚了,Qt5 版本可能不支持toAscii(),可以用toLatin1()代替。 
4、

 SmtpClient smtp("smtp.163.com",
                    25,
                   SmtpClient::TcpConnection);// SmtpClient::SslConnection
    smtp.setUser("*******@163.com");
    smtp.setPassword("");
    //依次是服务器,端口,传输协议,邮箱名,以及上面提到的授权码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
//构建邮件主题,包含发件人收件人附件等.
MimeMessage message;
message.setSender(new EmailAddress("*******@163.com"));

//逐个添加收件人
    message.addRecipient(new EmailAddress("×××××××@163.com"));//添加多个可利用循环
//构建邮件标题
message.setSubject("××××××");

//构建邮件正文
//HTML格式

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

//如果直接发送简单文本,使用以下方法
   MimeText text;
   text.setText("");

message.addPart(&text);

//构建附件
QString atta="";
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();

sendemailapi文件下载

推荐阅读