简单邮件传输协议(SMTP)

article/2025/11/11 8:26:50

C语言代码见: http://download.csdn.net/detail/huangminqiang201209/4841370  (这个代码不太好,图片为附件有些问题,不过,现已经解决了大笑

 

一、电子邮件的组成
  在SMTP协议中,电子邮件由三部分组成,信封、首部和正文。
1) 信封 
    信封包括发信人的邮件地址和接收人的邮件地址,用两条SMTP 命令指明。
    ① MAIL FROM:<发信人的地址>,告诉SMTP服务器发信人的地址。
    ② RCPT TO:<收信人的地址>,告诉SMTP服务器收信人地址。
2)首部
     首部中常用命令:
     ① FROM :< 姓名>< 邮件地址> ,表明邮件发送者是谁。
     ② TO :< 姓名>< 邮件地址> ,表明邮件接收者是谁。
     ③ SUBJECT :< 邮件标题> ,表明邮件的主题。
     ④ DATE :< 时间> ,表明发邮件的时间。
     ⑤ REPLY-TO :< 邮件地址> ,表明邮件的回复地址。
     ⑥ Content-Type :< 邮件类型> ,表明邮件包含文本、HTML 超文本和附件的哪些类型。
     ⑦ X-Priority :< 邮件优先级> ,表明邮件的发送优先级。
     ⑧ MIME-Version :< 版本> ,MIME 的意思是Multipurpose Internet Mail Extensions ,即多用途Internet 邮件扩展标准,它对传输内容的消息、附件及其他的内容定义了格式。
3)正文
       正文是邮件的内容。首部以一个空行结束,再下面就是正文部分。
4) 结束符号 
       邮件以“.” 结束。

 

二、与邮件服务器连接
1.与SMTP服务器的连接
    使用命令格式:HELO<信息发送端的名称>
    格式举例:HELO Local
2.与ESMTP服务器建立连接
    (1) 使用命令格式:EHLO<信息发送端的名称>
      格式举例:EHLO Local
    (2) 启动服务器认证
      命令格式:AUTH LOGIN
3.断开与服务器的连接
    命令格式:QUIT
    使用QUIT命令退出系统,断开与服务器的连接。

 

三、邮件的发送过程
   以与ESMTP服务器建立连接发送邮件为例。
1.客户端先与服务器建立连接
       1) 客户端发送EHLO Local
       2) 客户端发送AUTH LOGIN
       3) 客户端发送经过Base64编码处理的用户名
       4) 客户端发送经过Base64编码处理的密码
2.客户端开始发送邮件的信封
       5) 客户端发送 MAIL FROM:<发信人的地址>
       6) 客户端发送 RCPT TO:<收信人的地址>
3.客户端开始发送邮件数据
          7) 客户端发送DATA
          8) 客户端可以选择发送邮件的首部字段
          9) 客户端发送一个空行表示邮件首部结束。
         10) 客户端开始发送正文。
         11) 客户端发送“.”表示邮件发送结束。
4.客户端先服务器断开连接
         12) 客户端发送QUIT表示断开连接。


四、SMTP Server返回值表 

 

五、C++语言实现(头文件)

/****************************************************************************************************************文件:Email.h**编写者:huangminqiang**编写日期:2012年12月12号**简要描述:邮件发送头文件**修改者:**修改日期:**注:注意extern "C" 和__cplusplus的用法**************************************************************************************************************/
#ifndef __Email_H__
#define __Email_H__typedef struct Email_info{char* smtp_server;char* username;char* password;char* sender_name;char* sender_Email;char* recv_Email;char* subject;char* textinfo;char* attachment[10];
}Email_info_t;#ifdef __cplusplus
#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
using namespace std;#ifdef __cplusplus
extern "C" {
#endif //__cplusplus#define _DEBUG(msg...)    printf("[ %s,%s, %d ]=>",__FILE__, __FUNCTION__, __LINE__); printf(msg); printf("\r\n")
#define _ERROR(msg...)    printf("[ error: %s, %d]=>", __FILE__,  __LINE__); printf(msg); printf("\r\n")
#define SOCKET_ERROR      -1
#define INVALID_SOCKET    -1
#define BUFFER_SIZE       (10*1024)     // 收发数据的大小:1M
#define BUFFER_CNT        5             // 附件中最大数据包的个数,附件不能超过5M = (BUFFER_SIZE) * (BUFFER_CNT)
typedef int SOCKET;class Email  
{
public:Email();~Email();void AddAttachment(const char* path);   void AddTextMsg(const char* Text);void Send();void SetSubject(const char* );void SetSenderName(const char* );void SetSenderEmail(const char* );void SetRecvEmail(const char* );void SetUsername(const char* );void SetPassword(const char* );void SetSMTPServer(const char* server,const unsigned short port=0);bool is_send;  private:string SMTPSrvName;unsigned short SMTPSrvPort;string Username;string Password; string EmailFrom;string EmailTo;string NameFrom;string TextMsg;string Subject;SOCKET hSocket;        char* SendBuf;char* RecvBuf;vector<std::string> Attachments;void ReceiveData();void SendData();int FormatHeader(char* );int SmtpRecdigits();SOCKET ConnectRemoteServer(const char* serverIP, const unsigned short port=0);string base64_encode(unsigned char const*, unsigned int len);     
};int Email_send(Email_info_t );#ifdef __cplusplus
}
#endif //__cplusplus#endif //__cplusplus
#endif // __Email_H__
 

    因为邮件发送只是一个模块而已,项目中涉及到C\C++混合编程问题,所以,强调了extern "C"和__cplusplus的作用。Email_info_t这个结构体的用途为提供对外的传参信息,通过int Email_send(Email_info_t )函数----C++对外的接口函数,C文档(*.c)中只需调用这个接口就ok了,而C++(*.cpp)接着把这些函数分别实现,然后,就可以实现邮件功能了大笑。 

 


http://chatgpt.dhexx.cn/article/hXRRXOGS.shtml

相关文章

电子邮件协议(SMTP协议,POP3协议)

电子邮件协议&#xff08;SMTP协议&#xff0c;POP3协议&#xff09; SMTP使用Telnet访问SMTP服务器POP3使用Telnet访问POP3服务器 SMTP STMP&#xff08;简单邮件传输协议&#xff09;是因特网电子邮件的核心。如下图所示&#xff0c;SMTP是负责将用户代理&#xff08;如Outl…

电子邮件--详解SMTP和POP3协议

文章目录 前言一、电子邮件概述1.邮件信息格式2.邮件系统的组成结构 二、SMTP协议1.协议概述2.通信过程(1)连接建立(2)邮件传送(3)连接释放 3.多媒体扩展 三、POP3协议四、IMAP协议五、HTTP协议总结 前言 提示&#xff1a;以下是本篇文章正文内容 一、电子邮件概述 1.邮件信息…

标准邮件协议

1.POP3协议 pop3协议为邮局协议版本3&#xff0c;是TCP/IP协议族中的一员&#xff0c;由RFC1939 定义&#xff0c;主要用于支持使用客户端远程管理在服务器上的电子邮件。POP3 使用 TCP 作为传输协议&#xff0c;端口号是110。 用户从邮件服务器上接收邮件的典型通信过程如下…

邮件协议详解

邮件的发送和接收过程——STMP、POP、IMAP、MIME 电子邮件发送协议 是一种基于“ 推 ”的协议&#xff0c;主要包括 SMTP &#xff1b; 邮件接收协议 则是一种基于“ 拉 ”的协议&#xff0c;主要包括 POP协议 和 IMAP协议 &#xff0c;在正式介绍这些协议之前&#xff0c;我们…

电子邮件协议详解

邮件的发送和接收过程——STMP、POP、IMAP、MIME 电子邮件发送协议 是一种基于“ 推 ”的协议,主要包括 SMTP ; 邮件接收协议 则是一种基于“ 拉 ”的协议,主要包括 POP协议 和 IMAP协议 ,在正式介绍这些协议之前,我们先给出邮件收发的体系结构: 从上图可以看出邮件…

NR PUSCH(六) PUSCH UL Transmission shcemes

微信公众号同步更新欢迎关注同名modem协议笔记 PDSCH只支持一种传输模式&#xff0c;就是基于DMRS的空分复用传输&#xff0c;PDSCH的DMRS和PDSCH采用相同的预编码矩阵&#xff0c;基站无需指示码本信息&#xff0c;即non-codebook传输。 PUSCH 传输模式要比PDSCH 复杂&#…

码本

Type I 是指像原来LTE一样反馈基于码本的PMI等隐含信道信息的方式&#xff1b;Type II反馈部分显性信道信息的增强型反馈方式&#xff0c;直接反馈信道协方差矩阵等信息&#xff0c;具体可参加会议report的原文&#xff1a; – Type I feedback: Normal • Code…

戴老师论文阅读:Channel Feedback Based on AoD-AdaptiveSubspace Codebook in FDD MassiveMIMO Systems

Channel Feedback Based on AoD-Adaptive Subspace Codebook in FDD Massive MIMO Systems 2018.11 感觉与信道估计无关&#xff0c; feedback overhead path AoDs vary more slowly than the path gains. 第二章 MASSIVE MIMO SYSTEM MODEL 假设每个用户已得到下行链路信道矩…

5G NR Type II CSI Codebook简介

文章目录 5G NR Type II CSI Codebook简介简单概述: NR Type II CSI for rank 1 and 2Wideband中的Beam选取(Wideband Only)每个Beam的幅度和相位反馈幅度和相位调整的比特分配PMI Indices小结Type II Codebook小结参考 5G NR Type II CSI Codebook简介 5G NR Type II Codeboo…

CSI Report中关于codebook/PMI的理解(2)

笔者在微信公众号GiveMe5G定期发布学习文章(更多更及时)&#xff0c;欢迎订阅和分享&#xff0c;文章下方有二维码。 有了上一篇文章的内容铺垫&#xff0c;本文将结合协议描述一些细节。目前现网的codeebook配置主要使用Type I Single-Panel&#xff0c;以此为例&#xff0c;我…

༺ཌ༈最好的电子书共享:https://github.com/EbookFoundation/free-programming-books༈ད༻

曾经自己也有心搞一个计算机图书的免费共享项目&#xff0c;结果发现现有的这个项目就非常好&#xff1a;github.com/EbookFoundation/free-programming-books 这是网上很多人共同维护的一个项目&#xff0c;有几万个star了。 内容非常全&#xff0c;质量非常高。 里面还推荐了…

认识5G(一):5G 单天线阵面Type I码本(Type I Single Panel codebook)生成过程

认识5G(一)&#xff1a;5G 单天线阵面Type I码本&#xff08;Type I Single Panel codebook&#xff09;生成过程 文章目录 认识5G(一)&#xff1a;5G 单天线阵面Type I码本&#xff08;Type I Single Panel codebook&#xff09;生成过程零. 关于5G码本的分类一.DFT码本的基础…

Multi-modal Alignment using Representation Codebook

Multi-modal Alignment using Representation Codebook 题目Multi-modal Alignment using Representation Codebook译题使用表示子空间的多模态对齐期刊/会议CVPR 摘要&#xff1a;对齐来自不同模态的信号是视觉语言表征学习&#xff08;representation learning&#xff09;…

5G NR CSI Report中关于codebook/PMI的理解(1)

笔者在微信公众号GiveMe5G定期发布学习文章(更多更及时)&#xff0c;欢迎订阅和分享&#xff0c;文章下方有二维码。 本文主要讨论PDSCH codebook&#xff0c;介绍NR下行数据传输precoding的特点&#xff0c;以及Type I和Type II codebook是什么。 gNB是如何做下行Precoding的&…

【Stata】CGSS数据清理:Codebook速成法

对数据使用者来说&#xff0c;了解一个调查数据基本情况的常见途径就是查看该数据的codebook。 对数据所有者/提供方来说&#xff0c;制作一份详细的codebook是其数据管理工作中不可或缺的一环。 2016年上半年CGSS项目组把CGSS2003年到CGSS2013年期间的8年年度数据合并成一个…

CodeBook算法

年份论文题目作者论文内容2004Background modeling and subtraction by codebook constructionK. Kim, T. Chalidabhongse, D. Harwood, and L. Davis提出了CodeBook算法2005Real-time foreground–background segmentation using codebook modelK. Kim, T. Chalidabhongse, D.…

图像处理之前景检测(三)之码本(codebook)(主要为代码升级)

图像处理之前景检测&#xff08;三&#xff09;之码本&#xff08;codebook&#xff09; CodeBook算法的基本思想是得到每个像素的时间序列模型。这种模型能很好地处理时间起伏&#xff0c;缺点是需要消耗大量的内存。CodeBook算法为当前图像的每一个像素建立一个CodeBook(CB)结…

RIDCP: Revitalizing Real Image Dehazing via High-Quality Codebook Priors(CVPR2023)论文记录

通过高质量码本先验重塑真实图像去雾&#xff08;CVPR2023&#xff09; RIDCP: Revitalizing Real Image Dehazing via High-Quality Codebook Priors通过高质量码本先验重塑真实图像去雾&#xff08;CVPR2023&#xff09;摘要一、数据合成流程二、VQGAN 预训练&#xff1a;构建…

【AI人工智能绘画 CV】Towards Robust Blind Face Restoration with Codebook Lookup Transformer

Towards Robust Blind Face Restoration with Codebook Lookup Transformer (NeurIPS 2022) 使用 Codebook Lookup Transformer 实现稳健的盲脸修复 Blind face restoration is a highly ill-posed problem that often requires auxiliary guidance to 1) improve the mapping…

2021-11-10-Codebook理解

《Deep Visual-Semantic Quantization for Efficient Image Retrieval》中提到的codebook是什么意思&#xff1f; Specifically, each image embedding zn is quantized using a set of M codebooks C [C1, . . . , CM ], each codebook Cm contains K codewords Cm [Cm1, .…