首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当使用esmtp,C代码将二进制文件作为附件发送时,为什么'\r‘(CR)附加在'\n’(LF)之前

当使用esmtp,C代码将二进制文件作为附件发送时,'\r' (CR) 附加在 '\n' (LF) 之前是为了确保邮件内容在不同操作系统上的正确解析和显示。

在不同操作系统中,换行符的表示方式是不同的。在Unix/Linux系统中,换行符使用'\n' (LF) 表示;而在Windows系统中,换行符使用'\r\n' (CRLF) 表示。而在早期的Macintosh系统中,换行符使用'\r' (CR) 表示。

当使用esmtp发送邮件时,邮件内容需要遵循RFC 5322标准,该标准规定邮件内容的换行符应为'\r\n' (CRLF)。因此,为了确保邮件内容在不同操作系统上的正确解析和显示,C代码在将二进制文件作为附件发送时,需要在每个换行符之前添加'\r' (CR)。

这样做的目的是为了兼容不同操作系统上的邮件客户端和邮件服务器,确保邮件内容的可读性和正确性。如果不添加'\r' (CR),在某些操作系统上,邮件内容可能会出现换行错误或显示异常。

腾讯云提供的相关产品是腾讯企业邮,它是一款安全、稳定、高效的企业级邮件解决方案。腾讯企业邮支持esmtp协议,可以通过API或SMTP方式发送邮件。您可以通过腾讯企业邮的API文档了解更多详情:腾讯企业邮API文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Redis网络通信协议说明

    以下是通用形式: * CR LF $ CR LF CR LF .....$ CR LF CR LF 例子如下: *3 $3 SET $5 mykey $7 myvalue 上面的命令看上去像是单引号字符串...服务器发送的准确序列如下: "$6\r\nfoobar\r\n" 如果请求的值不存在,批量响应将使用特殊的值-1来作为数据长度,例如: C: GET nonexistingkey S: $-1 请求的对象不存在...例如: C: BLPOP key 1 S: *-1 这种情况发生,客户端库API返回空nil对象,且不是一个空列表。这必须有别于空列表和错误条件(例如:BLPOP命令的超时条件)。...批量命令 一些命令当用内联命令发送需要一种特殊的格式用于支持最后参数二进制安全。这种命令用最后参数作为“字节计数器”,然后发送批量数据(因为服务器知道读取多少个字节,所以是二进制安全的)。

    74510

    都2021了还不懂Redis的网络通信协议?

    $ CR LF CR LF 示例: ➜ ~ nc localhost 6379 keys * *2 $18...服务器发送的准确序列如下: "$6\r\nfoobar\r\n" 如果请求的值不存在,批量响应将使用特殊的值-1来作为数据长度,例如: C: GET nonexistingkey S: $-1 请求的对象不存在...正如您可以看到的多批量回复是以完全相同的格式使用Redis统一协议命令发送给服务器。...例如: C: BLPOP key 1 S: *-1 这种情况发生,客户端库API返回空nil对象,且不是一个空列表。这必须有别于空列表和错误条件(例如:BLPOP命令的超时条件)。...批量命令 一些命令当用内联命令发送需要一种特殊的格式用于支持最后参数二进制安全。这种命令用最后参数作为“字节计数器”,然后发送批量数据(因为服务器知道读取多少个字节,所以是二进制安全的)。

    35820

    Redis协议规范(译文)

    例如,许多Redis命令成功回复只有“OK”,因为RESP 单行字符串使用以下5个字节进行编码: "+OK\r\n" 为了发送二进制安全字符串,使用RESP 多行字符串代替。...所以字符串“foobar”的编码如下: "$6\r\nfoobar\r\n" 只是一个空字符串: "$0\r\n\r\n" RESP 多行字符串也可用于使用用于表示Null值的特殊格式来表示值的不存在...例如,BLPOP命令超时时,它返回一个计数为-1的Null数组,如下例所示: "*-1\r\n" Redis使用Null数组回复,客户端库API应返回空对象而不是空数组。...C: *2\r\n C: $4\r\n C: LLEN\r\n C: $6\r\n C: mylist\r\n S: :48293\r\n 通常我们协议的不同部分与换行符分开以简化,但实际的交互是客户端发送...可以使用对每个字符执行单个操作的代码处理批量和多个批量长度,同时扫描CR字符,如下面的C代码: #include int main(void) { unsigned char

    1K30

    SMTPPOP3IMAP 命令简介

    SMTP 是请求/响应协议,命令和响应都是基于 ASCII 文本,并以 CRLF 符结束。响应包括一个表示返回状态的三位数字代码。SMTP 在 TCP 协议 25 端口监听连接请求。...它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信,服务器会要求用户提供用户名和密码以便验证身份。验证之后的邮件发送过程与 SMTP 方式没有两样。...这个命令可以包含起始的路径位置和需要列出的文件夹所符合的特征,可以使用通配符"*"。...例如,可以利用FETCH命令提取邮件头、某一个附件、或某一邮件附件头部的某一字段,等等。...C: A341 CLOSE S: A341 OK CLOSE completed EXPUNGE EXPUNGE邮箱中所有打了删除标记的邮件彻底删除。

    2.6K30

    Python自动化运维1

    ; same_files:匹配的文件; diff_files:不匹配的文件; funny_files:两边文件夹中都存在,但无法比较的文件; subdirs: common_dirs 目录名映射到新的...python对SMTP的支持: ①email模块:负责构建邮件 ②smtplib模块:负责发送邮件 smtplib模块定义了一个SMTP客户机会话对象,可以使用该对象向任何具有SMTP或ESMTP侦听器守护进程的...exception smtplib.SMTPServerDisconnected #服务器意外断开连接,或者在SMTP实例连接到服务器之前尝试使用,会引发此异常。...exception smtplib.SMTPResponseException #包含SMTP错误代码的所有异常的基类SMTP服务器返回错误代码,会生成这些异常。...这样使用之后退出,SMTP QUIT命令将自动发出 (可以,判断连接是否正常) >>> with smtplib.SMTP("smtp.qq.com",25) as smtp: smtp.noop

    1.7K20

    Python自动化运维1

    ; same_files:匹配的文件; diff_files:不匹配的文件; funny_files:两边文件夹中都存在,但无法比较的文件; subdirs: common_dirs 目录名映射到新的...python对SMTP的支持: ①email模块:负责构建邮件 ②smtplib模块:负责发送邮件 smtplib模块定义了一个SMTP客户机会话对象,可以使用该对象向任何具有SMTP或ESMTP侦听器守护进程的...exception smtplib.SMTPServerDisconnected #服务器意外断开连接,或者在SMTP实例连接到服务器之前尝试使用,会引发此异常。...exception smtplib.SMTPResponseException #包含SMTP错误代码的所有异常的基类SMTP服务器返回错误代码,会生成这些异常。...这样使用之后退出,SMTP QUIT命令将自动发出 (可以,判断连接是否正常) >>> with smtplib.SMTP("smtp.qq.com",25) as smtp: smtp.noop

    2.6K10

    Redis 通信协议

    RESP 的规定一条命令的格式如下: * CR LF $ CR LF CR LF ......$ CR LF CR LF 命令本身也作为协议的其中一个参数来发送。...请求对象不存在,客户端应该返回空对象,而不是空字符串: 比如 Ruby 库应该返回 nil , 而 C 库应该返回 NULL (或者在回复对象中设置一个特殊标志), 诸如此类。...正如你所见到的那样, 多条批量回复所使用的格式, 和客户端发送命令使用的统一请求协议的格式一模一样。 它们之间的唯一区别是: 统一请求协议只发送批量回复。...因为 Redis 协议数据的长度放在数据正文之前, 所以程序无须像 JSON 那样, 为了寻找某个特殊字符而扫描整个 payload , 也无须对发送至服务器的 payload 进行转义(quote)

    75010

    很少人真正了解 nr 有什么区别!

    我们使用printf打印基本都会用到 \n 和 \r 之类控制字符,比如: printf("hello world!\r\n"); 那你知道这些 \n 和 \r 的区别吗?...\n : 换行符(newline),另起一行,对应ASCII值10(缩写:LF)。 \r : 回车符(return),回到一行的开头,对应ASCII值13(缩写:CR)。...在微软的MS-DOS和Windows中,使用“回车CR('\r')”和“换行LF('\n')”两个字符作为换行符; Windows系统里面,每行结尾是 回车+换行(CR+LF),即“\r\n”; Unix...在不同平台间使用FTP软件传送文件, 在ascii文本模式传输模式下, 一些FTP客户端程序会自动对换行格式进行转换. 经过这种传输的文件字节数可能会发生变化。...如果你不想ftp修改原文件, 可以使用bin模式(二进制模式)传输文本。一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件

    8.3K11

    一文让你搞明白文本或代码nr 的区别

    我们使用printf打印基本都会用到 \n 和 \r 之类控制字符,比如: printf("hello world!\r\n"); 那么,你知道 \n 和 \r 的区别吗?...\n : 换行符(newline),另起一行,对应ASCII值10(缩写:LF)。 \r : 回车符(return),回到一行的开头,对应ASCII值13(缩写:CR)。...在微软的MS-DOS和Windows中,使用“回车CR('\r')”和“换行LF('\n')”两个字符作为换行符; Windows系统里面,每行结尾是 回车+换行(CR+LF),即“\r\n”; Unix...在不同平台间使用FTP软件传送文件, 在ascii文本模式传输模式下, 一些FTP客户端程序会自动对换行格式进行转换. 经过这种传输的文件字节数可能会发生变化。...如果你不想ftp修改原文件, 可以使用bin模式(二进制模式)传输文本。一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件。 END

    7.1K20

    文本或代码nr 的区别

    素材来源:网络 编辑整理:strongerHuang 我们使用 printf 打印基本都会用到 \n 和 \r 之类控制字符,比如: printf("hello world!...在微软的 MS-DOS 和 Windows 中,使用“回车 CR('\r')”和“换行 LF('\n')”两个字符作为换行符; Windows 系统里面,每行结尾是 回车+换行(CR+LF),即“\r\...在不同平台间使用 FTP 软件传送文件, 在 ascii 文本模式传输模式下, 一些 FTP 客户端程序会自动对换行格式进行转换. 经过这种传输的文件字节数可能会发生变化。...如果你不想 ftp 修改原文件, 可以使用 bin 模式(二进制模式)传输文本。...一个程序在 windows 上运行就生成 CR/LF 换行格式的文本文件,而在 Linux 上运行就生成 LF 格式换行的文本文件

    4.1K20

    golang redis 客户端源码阅读(1)连接操作

    numScratch [40]byte } 以上就是连接操作的核心代码 因为redis是文本协议,因此发送需要按照redis协议序列化,接收的时候按照redis协议反序列化。...简单字符串 Simple Strings, 以 "+"加号 开头 格式:+ 字符串 \r\n 字符串不能包含 CR或者 LF(不允许换行) eg:..."+OK\r\n" 注意:为了发送二进制安全的字符串,一般推荐使用后面的 Bulk Strings类型 2....错误 Errors, 以"-"减号 开头   格式:- 错误前缀 错误信息 \r\n 错误信息不能包含 CR或者 LF(不允许换行),Errors与Simple Strings...大字符串类型 Bulk Strings, 以 "$"美元符号开头,长度限制512M   格式:$ 字符串的长度 \r\n 字符串 \r\n 字符串不能包含 CR或者 LF(

    50020

    Redis 用的很溜,了解过它用的什么协议吗?

    RDB 方式 RDB持久化是通过快照的方式,在指定的时间间隔内内存中的数据集快照写入磁盘。它以一种紧凑压缩的二进制文件的形式出现。...1、所有的写入命令会追加到aof_buf(缓冲区)中; 2、AOF缓冲区根据对应的策略向硬盘做同步操作; 3、随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩的目的; 4、Redis服务器重启...协议规则 请求命令 一条客户端发往服务器的命令的规则如下: * CR LF $ CR LF CR LF ......$ CR LF CR LF RESP 用\r\n作为分隔符,会表明此条命令的具体参数个数,在命令上看来,空格分隔的都表示一个参数,例如 set str:hello...n$6\r\nnews-2\r\n$6\r\nnews-1\r\n 多条批量回复和前面说的客户端发送命令的格式是一致的。

    45210

    zip命令打包文件

    婚假回来了,第一件事先打个测试机代码的压缩包,可能别的同事有ftp提交过代码 打压缩包 zip -q -r test.zip /home/test -q是不显示指令详情 -r是递归所有文件文件夹 在压缩包里删除指定的文件...-F 尝试修复已损坏的压缩文件。 -g 文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。 -h 在线帮助。 -i 只压缩符合条件的文件。...-j 只保存文件名称及其内容,而不存放任何目录名称。 -J 删除压缩文件前面不必要的数据。 -k 使用MS-DOS兼容格式的文件名称。 -l 压缩文件,把LF字符置换成LF+CR字符。...-ll 压缩文件,把LF+CR字符置换成LF字符。 -L 显示版权信息。 -m 文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。...-n 不压缩具有特定字尾字符串的文件。 -o 以压缩文件内拥有最新更改时间的文件为准,压缩文件的更改时间设成和该文件相同。 -q 不显示指令执行过程。

    1.6K30

    ASCII

    http://c.biancheng.net/c/ascii/ 转自C语言中文网 ASCII(American Standard Code for Information Interchange,美国信息互换标准代码...后来呢,NUL 被用于C语言中,表示字符串的结束,一个字符串中间出现 NUL ,就意味着这个是一个字符串的结尾了。...而C语言和 Unix 操作系统 LF 的含义重新定义为“新行”,即 LFCR 的组合效果,也就是回车且换行的意思。...输入 CR ,系统也常常隐式地将其转换为LF。 SO (14) 和 SI (15) SO,Shift Out,不用切换;SI,Shift In,启用切换。...而 127 这个值所对应的二进制值为111 1111(所有 7 个比特位都是1), DEL 用在现存的纸带上,所有的洞就都被穿孔了,就把已经存在的数据都擦除掉了,就起到了删除的作用。

    1.5K50
    领券