C++发送邮件和附件

本文介绍如何利用C++编程通过SMTP协议发送邮件,并详细讲解如何添加附件。内容涵盖必要的头文件引用,模块实现及socket通信关键步骤。

 头文件

/***********************************************************************
*发送邮件模块头文件
*可以发送文本和附件(支持多个附件一起发送)
*************************************************************************/
#pragma once
struct sMailInfo //邮件信息
{
	char*	m_pcUserName;//用户登录邮箱的名称
	char*	m_pcUserPassWord;//用户登录邮箱的密码
	char*	m_pcSenderName;//用户发送时显示的名称
	char*	m_pcSender;//发送者的邮箱地址
	char*	m_pcReceiver;//接收者的邮箱地址
	char*	m_pcTitle;//邮箱标题
	char*	m_pcBody;//邮件文本正文
	char*	m_pcIPAddr;//服务器的IP
	char*	m_pcIPName;//服务器的名称(IP与名称二选一,优先取名称)
	sMailInfo(){memset(this,0,sizeof(sMailInfo));}
};
class CSendMail
{
public:
	CSendMail(void);
	~CSendMail(void);

public:
	bool SendMail(sMailInfo &smailInfo);//发送邮件,需要在发送的时候初始化邮件信息
	void AddFilePath(char * pcFilePath);//添加附件的决定路径到附件列表中
	void DeleteFilePath(char* pcFilePath);//删除附件路径,如果有的话
	void DeleteAllPath(void);//删除全部附件的路径

protected:
	void GetFileName(char* fileName,char* filePath);//从附件的路径中获取文件名称
	void Char2Base64(char* pBuff64,char* pSrcBuff,int iLen);//把char类型转换成Base64类型
	bool  CReateSocket(SOCKET &sock);//建立socket连接
	bool Logon(SOCKET &sock);//登录邮箱,主要进行发邮件前的准备工作
	int GetFileData(char* FilePath);//由文件路径获取附件内容

	bool SendHead(SOCKET &sock);//发送邮件头
	bool SendTextBody(SOCKET &sock);//发送邮件文本正文
	bool SendFileBody(SOCKET &sock);//发送邮件附件
	bool SendEnd(SOCKET &sock);//发送邮件结尾
protected:
	CList<char*,char*> m_pcFilePathList;//记录附件路径

	char  m_cSendBuff[4096];//发送缓冲区
	char  m_cReceiveBuff[1024];
	char* m_pcFileBuff;//指向附件内容
	sMailInfo m_sMailInfo;
};


模块实现文件

/************************************************************************
* 发送邮件模块
*可以发送文本和附件(支持多个附件一起发送)
*Date:2011-12-01
************************************************************************/
#include "StdAfx.h"
#include "SendMail.h"
#include "winsock2.h"
#pragma comment(lib,"WSOCK32")

CSendMail::CSendMail(void)
{
	m_pcFileBuff=NULL;
	memset(m_cSendBuff,0,sizeof(m_cSendBuff));
	memset(m_cReceiveBuff,0,sizeof(m_cReceiveBuff));
}


CSendMail::~CSendMail(void)
{
	DeleteAllPath();
}


void CSendMail::Char2Base64(char* pBuff64,char* pSrcBuff,int iLen)
{
	//1   1   1   1   1   1   1   1
	// 分配给pBuff64  ↑ 分配给pBuff64+1
	/
评论 43
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值