C++发送邮件

        C++ 发送邮件

    在许多应用程序中,都会或多或少地用到邮件发送程序。本文首先介绍发送邮件必须用到的协议SMTP,然后给出用C++写的一个邮件发送类。

    邮件发送要用到邮件服务器和一个邮箱账户,这样你就可以用本文的demo程序进行邮件发送了。

    邮件发送协议用SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,而邮件的接收用POP3协议。

    在邮件发送程序中,我们实际用到的是SMTP命令,如下表格所示:


SMTP 命令
命令描述
DATA开始信息写作
EXPN<string>验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELO<domain>向服务器标识用户身份,返回邮件服务器身份
HELP<command>查询服务器支持什么命令,返回命令中的信息
MAIL FROM<host>在主机上初始化一个邮件会话
NOOP无操作,服务器应响应OK
QUIT终止邮件会话
RCPT TO<user>标识单个的邮件接收人;常在MAIL命令后面可有多个rcpt to:
RSET重置会话,当前传输被取消
SAML FROM<host>发送邮件到用户终端和邮箱
SEND FROM<host>发送邮件到用户终端
SOML FROM<host>发送邮件到用户终端或邮箱
TURN接收端和发送端交换角色
VRFY<user>用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令

    SMTP工作过程:

    1. 建立与邮件服务器之间的TCP连接。

    2. 客户端发送HELO命令,服务器返回250 ok。

    3. 客户端发送AUTH LOGIN, 传输用户名和密码到服务器,登陆邮件服务器。(注意:一般要求用户名和密码用BASE64加密)

    4. 发送MAIL FROM命令,初始一个邮件会话。

    5. 发送RCPT TO,表明收件人。

    6. 发送DATA,表示开始发送信息。

    7. 发送QUIT,退出。


    在每条命令发送结束,末尾加上\r\n,即<CRLF>,回车键,表示此条命令的结束。

    C++发送源代码详见https://github.com/duankai/mail

           其中,Base64.h是用来对用户名和密码进行加密的,mail.h定义了一些退出代码。如下是GosMail类的定义:

class GosMail
{
public:static GosMail * GetInstance();int SendMail(USER_INFO_T * pstUserInfo, MAIL_INFO_T * pstMailInfo);bool GetStatus();~GosMail();
private:GosMail();bool Init();void GetMailSocket(int iPort = 25);void FreeResource();int InitMailBox();int Login(USER_INFO_T * pstUserInfo);int SendContent(MAIL_INFO_T * pstMailInfo);int QuitEmailBox();
public:
private:SOCKET           m_socket;SOCKADDR_IN      m_sockAddr;bool             m_mailStatus;static GosMail * m_mailInst;int              m_iSockAddrLen;char             recvBuff[1024];char             sendBuff[1024 * 3];
};
     本文介绍的内容用C++实现了一个简单的邮件发送类,将来会将邮件接收类也补充完整,欢迎大家提出意见和指出不足之处。
   






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kibana客户端工具操作ElasticSearch(增删改查二)

#不指定id情况下 ElasticSearch自动生成id PUT /lib/user/ {"first_name":"Douglas","last_name":"Fir","age":23,"about":"I like to build cabinets","interests":["forestry"] …

机器学习笔记(一) : 线性建模——最小二乘法

讨论这个方法之前&#xff0c;先说些题外话。首先&#xff0c;我感觉机器学习是一门值得我们去了解和学习的一门技术&#xff0c;它不仅仅应用于我们的生活&#xff0c;而且不断地在改变着我们的方方面面。虽然很早就已经接触它&#xff0c;并开始学习&#xff0c;但是总体感觉…

昨天、今天、明天

三天&#xff1a;昨天、今天、明天。人的一生&#xff0c;用这简单的6个字概括&#xff0c;形成了人生的一条“经”线&#xff0c;富有哲理&#xff0c;令人遐思。 今天处于昨天与明天的交接点上&#xff0c;我们每一天都在告别昨天&#xff0c;每一天又都在迎接明天。如果…

ElasticSearch快速入门(一)介绍

Devops运维 ● Node(节点):单个的装有Elasticsearch服务并且提供故障转移和扩展的服务 器。 ●Cluster (集群) :一-个集群就是由一个或多个node组织在一 起&#xff0c;共同工作&#xff0c; 共同分享整个数据具有负载均衡功能的集群。 ● Document (文档) : -一个文档是-一个可…

flash遨游缓存问题

来源&#xff1a;http://leftice.iteye.com/blog/806605 Flash需要和JS交互,但是在ie外壳浏览器下,有时候缓存会导致页面刷新后flash无法工作. 会报出SecurityError. 这是因为Flash并没有完全准备好,就尝试和JS交互导致的问题. 解决的问题方式有几种: 1.在页面上设置不缓存,网上…

机器学习笔记(二)——多变量最小二乘法

在上一节中&#xff0c;我们介绍了最简单的学习算法——最小二乘法去预测奥运会男子100米时间。但是可以发现&#xff0c;它的自变量只有一个&#xff1a;年份。通常&#xff0c;我们所面对的数据集往往不是单个特征&#xff0c;而是有成千上万个特征组成。那么我们就引入特征的…

ElasticSearch快速入门二(Restful介绍)

本节课从三个方便讲解 什么是restful ? API: Application Programming Interface的缩写&#xff0c;中文意思就是应用程序接口. ●XML: . 可扩展标记语言&#xff0c;是一种程序与程序之间传输数据的标记语言 ●JSON: 英文javascript object notation的缩写&#xff0c;它是一…

机器学习笔记(三)——正则化最小二乘法

一. 模型的泛化与过拟合 在上一节中&#xff0c;我们的预测函数为&#xff1a; f(x;ω)ωTx其中&#xff0c; x[x1],ω[ω1ω0]x=\begin{bmatrix} x\\ 1 \end{bmatrix}, \omega=\begin{bmatrix} \omega_1\\ \omega_0 \end{bmatrix}上述称为线性模型&#xff0c;我们也可以将x…

严谨,保证,职业。

上午在教室上的课&#xff0c;老师对我们这些VB初学者又“耐着性子”侃了半天&#xff0c;具体讲的内容虽然不多&#xff0c;但是说来奇怪&#xff0c;总能从中得到动力。教育的艺术在于激励。 经过三天的学习&#xff0c;对VB感觉慢慢入门&#xff0c;这两天一遍看着视频一遍做…

ElasticSearch快速入门三(curl命令讲解)

API测试工具_微博开放平台&#xff1a;https://open.weibo.com/tools/console# 感兴趣是可以使用这个工具玩一下restful接口调用&#xff0c;可以更形象的了解restful 下面我们就继续下面的内内容讲解curl命令 什么是CURL&#xff1f; 就是以命令的方式来执行HTTP协议的请求…

机器学习笔记(四)——最大似然估计

一、最大似然估计的基本思想 最大似然估计的基本思想是&#xff1a;从样本中随机抽取n个样本&#xff0c;而模型的参数估计量使得抽取的这n个样本的观测值的概率最大。最大似然估计是一个统计方法&#xff0c;它用来求一个样本集的概率密度函数的参数。 二、似然估计 在讲最…

Log4j 入门总结

一、Log4j介绍 log4j是类似于java.util.logging的日志作用&#xff0c;即记录一些有用信息&#xff0c;是一个日志框架&#xff1b; log4j log for Java 日志框架的作用&#xff1a; (1)函数参数是否正确&#xff1b; (2)软件发布后&#xff0c;记录用户的每一步操作&#xff…

ElasticSearch API文档查看

elastic官方API文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html

机器学习笔记(五)——朴素贝叶斯分类

一、分类问题 分类实际上是我们在日常生活中经常使用的。比如说&#xff0c;在工作中&#xff0c;把自己手头的任务分为轻重缓急&#xff0c;然后按照优先级去完成它们。 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。 从数学的角度看C{c1,c2,…,ck}是类别的…

delphi函数,识别字符集编码

纪念不用 Delphi 开发7周年函数&#xff0c;获取web page文本&#xff0c;识别字符集编码&#xff1b;1 function CreateHttpRequest(proxyServer: string ; proxyPort: integer 0):2 TIdHTTP;3 function DecodeHttpRequestText(InString: string): string;4 implementatio…

取消Win7关机时的补丁更新

取消Win7关机时的补丁更新作者&#xff1a;三好 阅读&#xff1a; 30037人文&#xff1a;陕西 三好 Windows操作系统一直是在缝缝补补中前行的&#xff0c;Win7也不例外。由于系统自带的更新更安全更可靠&#xff0c;所以好多朋友都喜欢使用&#xff0c;如果将系统默认的“自动…

jdk下载

oracle官网&#xff1a;https://developer.oracle.com/java/ 一直往下拉到最低部 这里选择你需要的历史版本&#xff0c;我就选择 安装就不用我多说了&#xff0c;和以前安装jdk一样安装&#xff0c;配置环境变量

机器学习笔记(五)续——朴素贝叶斯算法的后验概率最大化含义

上一节中讲了朴素贝叶斯算法将实例分到后验概率最大的类。这等价于期望风险最小化。 假设使用0-1损失函数&#xff1a; L(Y,f(X)){1,0,Y≠f(X)Yf(X)L(Y, f(X)) = \Bigg\{ \begin{array} {ll}1, & Y \neq f(X) \\0, & Y = f(X)\end{array}上式中的f(x)是分类决策函数…

项目管理汇总

一、一个失败软件项目的思考 http://kb.cnblogs.com/page/113051/ 二、我们需要真正的软件项目经理 http://wangacidlemon.iteye.com/blog/1185903 评论写的不错&#xff0c;粘贴来先给大家分享一下 一个好的项目负责人&#xff0c;是不会自己去做具体事情的&#xff0c;他应…

ElasticSearch和solr的对比

关于ES&#xff1a;ElasticSearch是一个事实分布式搜索和分析引擎&#xff0c;使用其可以以前所未有的速度处理大数据&#xff0c;他用于全文搜索、结构化搜索、分析以及将这三者混合使用。维基百科使用ElasticSearch提供全文搜索并高亮关键字&#xff0c;以及输入实时搜索(sea…