简单邮件传输协议SMTP封装类

SMTP封装类与身份验证实战指南 SMTP是一种应用层的协议,它定义了邮件服务器之间如何发送邮件,以及邮件客户端如何与邮件服务器进行交互。SMTP协议运行在TCP端口25、465或587上,这允许邮件服务进行可靠的数据传输。在软件开发中,封装类是一种常见的编程模式,它的核心思想是将数据(属性)和行为(方法)绑定到一个单一的单元中。在SMTP协议的应用中,封装类的作用尤为突出,因为SMTP涉及多个阶段和不同的操作,封装类有助于管理和维护邮件发送的各个细节。 阅读详情
简单邮件传输协议SMTP封装类


作者:Asif Rasheed 翻译:刘建强

在Internet上,Email是最流行的传输媒体。这篇文章包括两个协议:. POP 3 协议: POP3协议(邮政传输协议)就是指从Email服务器接收信件。我已经提交了一个封装POP3协议的类。该协议官方的描述你可查阅RFC1225。 SMTP协议: SMTP (简单邮件传输协议) 指发送邮件到它的目的地。 有关SMTP 协议的细节你可参考RCF 821 .我最新地贡献是封装了SMTP协议。我不能完全实现 SMTP协议但你可用它在许多应用场合发送邮件。该类有若干方法,我选方法名同SMTP命令, 所以你很容易理解。 在该类中,我再一次使用了CSocket作为类成员,所以我能在线程中使用它. 下面是该类的编码及注释:

//
// SMTP.h: interface for the CSMTP class.
//
//

#if !defined(AFX_SMTP_H__617F7E82_7F4D_11D1_88A0_00001C302581__INCLUDED_)
#define AFX_SMTP_H__617F7E82_7F4D_11D1_88A0_00001C302581__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#define CONNECTION_CHECK 0
#define HELLO_CHECK 1
#define MAIL_CHECK 2
#define RCPT_CHECK 3
#define DATA_START_CHECK 4
#define DATA_END_CHECK 5
#define QUIT_CHECK 6
#define DATA_CHECK 7


class CSMTP
{
public:
BOOL Mail(); //
CString GetErrorMessage();
BOOL Data(CString Subject, CString Body);
CString GetTo();
BOOL SetTo(CString to);
CString GetFrom();
void SetFrom(CString from);
BOOL Mail(CString from);
BOOL Disconnect();
CString GetHost();
void SetHost(CString Host);
BOOL Connect(CString Host, CString Me);
BOOL Connect();
CSMTP();
virtual ~CSMTP();

private:
CString GetError(CString Response);
CString m_ErrorMessage;
BOOL CheckResponse(int Type);
int m_NoOfTo;
CStringArray m_To;
CString m_From;
CSocket m_SMTPServer;
CString m_Host;
};

#endif // !defined(AFX_SMTP_H__617F7E82_7F4D_11D1_88A0_00001C302581__INCLUDED_)


//
// SMTP.cpp: implementation of the CSMTP class.
//
//

#include "stdafx.h"
#include "MailSend.h"
#include "SMTP.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//
// Construction/Destruction
//

CSMTP::CSMTP()
{
m_NoOfTo = 0;
m_SMTPServer.Create();
}

CSMTP::~CSMTP()
{
m_SMTPServer.Close();
}

// Connect to the SMTP Server
BOOL CSMTP::Connect()
{
return Connect(m_Host,m_From);
}

// Connect to the SMTP Server
BOOL CSMTP::Connect(CString Host,CString From)
{
if (!m_SMTPServer.Connect(Host,25)) // 25 for SMTP Port
{
m_ErrorMessage = _T("Server cannot be connected");
return FALSE;
}
else
{
if(CheckResponse(CONNECTION_CHECK)==FALSE)
return FALSE;

char buf [512];

wsprintf (buf, "HELO %s/r/n", (LPCSTR) From);
m_SMTPServer.Send(buf, strlen (buf));
if (CheckResponse(HELLO_CHECK)==FALSE)
return FALSE;
else
return TRUE;

return TRUE;
}
}

// Setting the Host String
void CSMTP::SetHost(CString Host)
{
m_Host = Host;
}

// Returing the Host String
CString CSMTP::GetHost()
{
return m_Host;
}

// 发送"QUIT"命令到SMTP服务器:
BOOL CSMTP::Disconnect()
{
char buf[256];

wsprintf (buf, "QUIT /r/n");
m_SMTPServer.Send(buf, strlen (buf));
if (CheckResponse(QUIT_CHECK)==FALSE)
return FALSE;
else
return TRUE;
}

// 发送"MAIL" 命令到SMTP服务器:
BOOL CSMTP::Mail(CString from)
{
char buf[256];

wsprintf (buf, "MAIL From:
smtp.h 邮件收发类头文件 立即下载

相关推荐

http、smtp协议封装

用c++封装的http和smtp协议,可以实现http下载和邮件客户端,实现了邮件的发送

用.net发送 Email 帮助类 EmailHelper

上一篇转人家的, 虽然复制粘贴简单, 但找参数都要找半天的…… 发送邮件不就是知道人家的地址,再输入主题和内容就可以了嘛! 1. 配置文件 App.config 2. EmailHelper 类 using System; using System.Collections.Gener

我想我是海 冬天的大海 心情随风轻摆 1万+

这是一个简单代理服务器;支持HTTP/POP3/SMTP/FTP代理。其中只有HTTP为标准协议,其他为自定义简易协议;支持多连接并发访问。目的是为了网络的代理出口,以及隐藏IP信息。

这是一个简单代理服务器;支持HTTP/POP3/SMTP/FTP代理。其中只有HTTP为标准协议,其他为自定义简易协议;支持多连接并发访问。目的是为了网络的代理出口,以及隐藏IP信息。

SMTP说明(与HTTP的对比)

SMTP简单说明 下去是因特网电子邮件系统的总体情况: 从该图中我们可以看到它有3个主要组成部分:用户代理(user agent)、邮件服务器(mail server)和简单邮件传输协议( Simple Mail Transfer Protocol ,SMTP)。用户代理允许用户阅读、回复、转发、保存和撰写报文。微软的Outlook和 Apple Mail 是电子邮件用户代理的例子。完成邮件撰写时,邮件代理向其邮件服务器发送邮件,此时邮件放在邮件服务器的报文队列中。邮件服务器形成了电子邮件体系结构的核心。

qq_46045632的博客 5837

VC SMTP邮件发送程序

VC SMTP邮件发送程序,是在VS2008上开发的,不过里面有核心代码SMTP.h和SMTP.cpp也可以很方便地在VC6.0中使用

【全部更新】2025金地杯E题山西省大学生数学建模思路代码文章教学:高速铁路牵引供电系统能耗优化

问题四将列车的运行速度与发车时间同时作为优化变量,建立联合优化模型,目标是在考虑电价机制和调度均衡性的前提下,使牵引供电系统一天内的总电费支出最小。问题三在考虑分时电价机制的基础上,基于遗传算法优化列车速度组合,使牵引供电系统一天内的总电费支出最小。然而,在实际运营中,不同时段的电价差异显著,合理安排列车的运行时间与运行速度,可有效降低系统的总电费支出。本研究聚焦于高速铁路牵引供电系统的能耗与电费优化问题,针对列车运行速度、发车时间与分时电价的综合影响,提出一系列数学模型,以实现系统能耗与电费的最小化。

xb459149247的博客 5289

轻量级邮件发送组件:基于 Socket/SMTP 协议的浅层封装

Java 发送邮件组件,大家第一时间想到的就是 JavaMail。JavaMail 本身也不大,才 500kb 的 jar 包,足够轻量级。而今天为大家介绍的,可以说“羽量级”,核心一个类就可以发送邮件了,除了依赖 JDK 无须依赖什么。如果我们了解 SMTP 协议以及 Socket 的简单使用,就知道其中过程并不复杂——实质都是基于文本的协议交互。

zhangxin09的专栏 566

CloudCompare点云变换保姆级教程:从平移、旋转到绕任意点旋转,一次搞定

本文提供CloudCompare点云变换的全面教程,涵盖从基础平移、旋转到绕任意点旋转的高级技巧。通过详细的操作步骤和实战案例,帮助用户掌握点云数据处理的核心技能,提升三维模型对齐和变换的效率与精度。

weixin_28717969的博客 291

Python SMTP发邮件终极教程

本文介绍了使用Python的smtplib模块通过SMTP协议发送邮件的完整指南。主要内容包括: SMTP协议基础概念和工作原理 环境准备:获取邮箱授权码等必要信息 发送纯文本邮件的基本步骤 使用第三方SMTP服务(QQ/163/Gmail)发送邮件 发送HTML格式邮件和带附件的邮件 在HTML正文中嵌入图片的方法 smtplib核心对象与方法的详细介绍 封装可重用的邮件发送类 常见问题解决方案 进阶主题如异步发送和重试机制 实战案例:自动发送报表邮件 文章详细说明了各种场景下的代码实现

2601_95045387的博客 306

【COMSOL】将一个面上数据导出CSV或txt格式的方法

在COMSOL中参数化扫描后,把一个面上或体里的数据按照CSV或TXT格式导出的方法。

dave496206的博客 2990

Stata新手避坑:用reghdfe搞定行业、地区多重固定效应,告别‘共线性’报错

本文详细介绍了如何使用Stata中的reghdfe命令高效处理多重固定效应问题,解决传统方法在面板回归中遇到的共线性报错和低R²问题。通过实战案例和高级技巧,帮助新手快速掌握行业、地区等多维固定效应的控制方法,提升经济学和金融学研究的分析效率。

weixin_30635053的博客 419
上一篇: SOCKET类的设计和实现
下一篇: 在VC6.0中编写网络应用程序
techcrunch
博客等级 码龄19年 34粉丝 3441原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值