赞
踩
通过qt实现发送邮件,使用smtp进行发送。但是不能发送附件。(功能研究中)
首先我们需要打开邮箱的smtp协议,以163邮箱为例
点击设置按钮
选择pop3选项
然后需要将我们的电脑打开telnet功能。
首先打开电脑的控制面板
点击程序。
选择启用或关闭功能。
将telent这个服务勾选上然后点击确定。
测试telent是否可用。打开cmd命令窗口,输入telnet
若弹出这个窗口则说明可用
将这个几个服务打开,并且增加一个授权码,授权码就是你通过smtp登录邮箱的密码。
前置工作准备完成。
代码部分就是通过smtp登录邮箱并且发送邮件。直接看代码。
smtp.h
#ifndef SMTP_H #define SMTP_H #include<QByteArray> #include<QString> #include<QTcpSocket> class Smtp { public: Smtp(QByteArray username,QByteArray password); ~Smtp(); void SendData(QByteArray sendIp,QByteArray s_Title,QByteArray s_Content); QString WaitAndReadData(); private: QByteArray m_UserName=""; QByteArray m_Password=""; QTcpSocket * m_pSocket=nullptr; QString m_ReceiverData=""; }; #endif // SMTP_H
smtp.cpp
#include "smtp.h" #include<QDebug> Smtp::Smtp(QByteArray username,QByteArray password) { if(username.contains("@163")) { m_UserName= username; m_Password = password; } else { qDebug()<<"Error"; } } void Smtp::SendData(QByteArray sendIp, QByteArray s_Title, QByteArray s_Content) { m_pSocket=new QTcpSocket(); m_pSocket->connectToHost("smtp.163.com",25,QTcpSocket::ReadWrite); //连接163邮箱 m_pSocket->waitForConnected(1000); WaitAndReadData(); m_pSocket->write("helo localhost\r\n"); WaitAndReadData(); m_pSocket->write("auth login\r\n"); WaitAndReadData(); m_pSocket->write(m_UserName.toBase64()+"\r\n"); //写入用户名 WaitAndReadData(); m_pSocket->write(m_Password.toBase64()+"\r\n"); //写入密码 WaitAndReadData(); m_pSocket->write("mail from: <"+m_UserName+">\r\n"); //发送的邮箱 WaitAndReadData(); m_pSocket->write("rcpt to: <"+sendIp+">\r\n"); //接收的邮箱 WaitAndReadData(); m_pSocket->write("data\r\n"); //开始写入 WaitAndReadData(); m_pSocket->write("from:<"+m_UserName+">\r\n"); //发送名称 WaitAndReadData(); m_pSocket->write("to:<"+sendIp+">"); //接受名称 WaitAndReadData(); m_pSocket->write("data\r\n"); WaitAndReadData(); m_pSocket->write("Subject:"+s_Title+"\r\n"); //标题 m_pSocket->write("\r\n"); m_pSocket->write(s_Content.append("\r\n")); //内容 m_pSocket->write(".\r\n"); WaitAndReadData(); m_pSocket->write("quit\r\n"); m_pSocket->disconnect(); } QString Smtp::WaitAndReadData() { m_pSocket->waitForReadyRead(1000); m_ReceiverData = m_pSocket->readAll(); return m_ReceiverData; } Smtp::~Smtp() { delete m_pSocket; }
好了,然后测试下我们的程序。
Smtp smtp("邮箱名称","授权码"); //邮箱和密码都要用自己的 //注意是授权码,不是你登录邮箱的密码
smtp.SendData("aaa@qq.com","你好","这是一个测试程序");
邮箱收到信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。