ESMTP身份验证的机制有很多种,最常见的是LOGIN机制,类似于POP3的身份验证方式,即分两步输入账号和密码。在所有的验证机制中,信息全部采用Base64编码。

例如,用smtp.elong.com邮件服务器发送邮件,从开始连接到身份验证的过程如下(红色和蓝色分别代表客户端和服务器):

(连接到smtp.elong.com:25)
220 sp1 ESMTP v2.1
EHLO ABCDEFG
250-smtp.elong.com
250-PIPELINING
250-SIZE 20480000
250-ETRN
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5  (支持的身份验证机制种类: LOGIN, PLAIN等)
250 8BITMIME
AUTH LOGIN
334 VXNlcm5hbWU6                      (Base64解码后: Username:)
Ymh3YW5n                              (Base64编码前: bhwang)
334 UGFzc3dvcmQ6                      (Base64解码后: Password:)
bXlwYXNzd29yZCFteXBhc3N3b3JkISE=      (Base64编码前: ********)
235 Authentication successful

另外一种较常见的机制是PLAIN。与LOGIN机制的不同之处在于一次性输入账号和密码,格式为“<NUL>账号<NUL>密码”,其中<NUL>为字节0。用PLAIN机制代替上面的身份验证过程:

AUTH PLAIN
334 
AGJod2FuZwBteXBhc3N3b3JkIW15cGFzc3dvcmQhIQ==  (Base64编码前: <NUL>bhwang<NUL>********)
235 Authentication successful

有的ESMTP服务器,例如采用CoreMail系统的smtp.163.com, smtp.163.net, smtp.tom.com, smtp.netease.com等,不回复334代码行,客户端在输入AUTH PLAIN后,直接输入符合格式要求的账号和密码即可。

LOGIN和PLAIN机制没有对账号和密码进行加密,相当于明文传输,Base64编码只是一层纸而已。DIGEST-MD5, CRAM-MD5, GSSAPI, KERBEROS_V4等身份验证机制能够加密传输内容。

 SMTP(Simple Mail TransferProtocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,或者说是由它来控制信件传输的一种中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,我们就可以把Email寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转电子邮件。

  SMTP的开发最初是为了在封闭的网络中传送相对来说不太重要的简短邮件,而不是为了在互联网中传送重要而敏感的信息,因此最初通过SMTP传输邮件时,安全性不高。

SMTP协议常用命令集

1.SMTP是工作在两种情况下:一是电子邮件从客户机传输到服务器;二是从某一个服务器传输到另一个服务器
2.SMTP是个请求/响应协议,命令和响应都是基于ASCII文本,并以CR和LF符结束。响应包括一个表示返回状态的三位数字代码
3.SMTP在TCP协议25号端口监听连接请求
4.连接和发送过程:
a.建立TCP连接
b.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令服务器端正希望以OK作为响应,表明准备接收
c.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行服务器端则表示是否愿意为收件人接受邮件
d.协商结束,发送邮件,用命令DATA发送
e. 以.表示结束输入内容一起发送出去
f.结束此次发送,用QUIT命令退出。
5.另外两个命令:
VRFY---用于验证给定的用户邮箱是否存在,以及接收关于该用户的详细信息。
EXPN---用于扩充邮件列表。

6.邮件路由过程:
  SMTP服务器基于‘域名服务DNS中计划收件人的域名来路由电子邮件。SMTP服务器基于DNS中的MX记录来路由电子邮件,MX记录注册了域名和相关的SMTP中继主机,属于该域的电子邮件都应向该主机发送。

若SMTP服务器mail.cnpaf.com收到一封信要发到mail@cnpaf.net:

a.Sendmail请求DNS给出主机mail.cnpaf.net的CNAME记录,如有,假若CNAME到mail.cnpaf.net,则再次请求mail.cnpaf.net的CNAME记录,直到没有为止
b.假定被CNAME到mail.cnpaf.net,然后sendmail请求@abc.com域的DNS给出mail.cnpaf.net的MX记录
shmail    MX   5   mail.cnpaf.net
           0   shmail2.abc.com
c. Sendmail最后请求DNS给出mail.cnpaf.net的A记录,即IP地址,若返回值为1.2.3.4
d. Sendmail与1.2.3.4连接,传送这封给mail@cnpaf.net的信到1.2.3.4这台服务器的SMTP后台程序

7.SMTP基本命令集:

命令       描述
------------------------------
HELO      向服务器标识用户身份发送者能欺骗,说谎,但一般情况下服务器都能检测到。

MAIL      初始化邮件传输
          mail form :
RCPT      标识单个的邮件接收人;常在MAIL命令后面  可有多个rcpt to:
DATA      在单个或多个RCPT命令后,表示所有的邮件接收人已标识,并初始化数据传输结束。
VRFY      用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令
EXPN      验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELP      查询服务器支持什么命令
NOOP      无操作,服务器应响应OK
QUIT      结束会话
RSET      重置会话,当前传输被取消
--------------------------------

8. MAIL form 命令中指定的地址是称作 envelope form地址,不需要和发送者自己的地址是一致的。
     RCPT TO 与之等同,指明的接收者地址称为envelope to地址,而与实际的to:行是什么无关。
9.为什么没有RCPT CC和RCPT BCC:?
   所有的接收者协商都通过RCPT TO命令来实现,如果是BCC,则协商发送后在对方接收时被删掉信封接收者
10.邮件被分为信封部分,信头部分和信体部分
   envelope form , envelope to 与message form:, message to:完全不相干。
   evnelope是由服务器主机间SMTP后台提供的,而message form /to是由用户提供的。有无冒号也是区别。

11. 怎样由信封部分检查是否一封信是否是伪造的?
a. received行的关联性。
   现在的SMTP邮件传输系统,在信封部分除了两端的内部主机处理的之个,考虑两个公司防火墙之间的部分,若两台防火墙机器分别为A和B,但接收者检查信封received:行时发现经过了C.则是伪造的。
b. received:行中的主机和IP地址对是否对应如:
   Receibed: form galangal.org (turmeric.com [104.128.23.115] by mail .bieberdorf.edu....
c. 被人手动添加在最后面的received行:
    Received: form galangal.org ([104.128.23.115]) by mail .bieberdorf.edu (8.8.5)
    Received: form  lemongrass.org by galangal.org (8.7.3)
    Received: form  graprao.com by lemongrass.org (8.6.4)

POP3命令列表:
一般telnet pop3Server110后就可以用这些命令了,大小写不敏感,不包括口令本身,注意不要让口令回显,等验证通过后再允许回显好了。

user username 认可
pass password 认可 执行成功则状态转换
apop name,digest 认可 一种安全传输口令的办法,执行成功导致状态转换,请参见RFC 1321
stat 处理 请求server回送邮箱统计资料,如邮件数、邮件总字节数
uidl n 处理 server返回用于该指定邮件的唯一标识,如果没有指定,返回所有的
list n 处理 server返回指定邮件的大小等
retr n 处理 server返回邮件的全部文本
dele n 处理 server标记删除,quit命令执行时才真正删除
rset 处理 撤消所有的dele命令
top n,m 处理 返回n号邮件的前m行内容,m必须是自然数
noop 处理 server返回一个肯定的响应
quit client希望结束会话。如果server处于'处理'状态,则现在进入'更新'状态,删除那些标记成删除的邮件。如果server处于'认可'状态,则结束会话时server不进入'更新'状态

关于apop命令

如果client使用user命令,口令将是明文。使用apop命令时,client第一次与server连接时,server向client发送一个ascii码问候,该问候由一个字符串组成,它对于每个client的连接都是唯一的,client把它的纯文本口令附加到从server接收到的字符串之后,然后计算结果字符串的MD5摘要,client把username和MD5摘要作为apop命令的参数一起发送出去。

telnet pop3Server 110
user username
pass ****
stat
list
retr 1
retr 2
...
dele 1
dele 2
...
quit

SMTP 命令简介

什么是 SMTP
SMTP (Simple Mail Transfer Protocol) :电子邮件从客户机传输到服务器或从某一个服务器传输到另一个服务器使用的传输协议。 SMTP 是请求/响应协议,命令和响应都是基于ASCII 文本,并以 CR 和 LF 符结束。响应包括一个表示返回状态的三位数字代码。SMTP 在 TCP 协议 25端口监听连接请求。

什么是 ESMTP
ESMTP (Extended SMTP),顾名思义,扩展 SMTP 就是对标准 SMTP 协议进行的扩展。它与 SMTP服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP发信时,服务器会要求用户提供用户名和密码以便验证身份。验证之后的邮件发送过程与 SMTP 方式没有两样。

SMTP 命令
SMTP 命令包括:
HELO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
EHLO 向服务器标识用户身份。发送者能欺骗,说谎,但一般情况下服务器都能检测到。
MAIL FROM 命令中指定的地址是发件人地址
RCPT TO 标识单个的邮件接收人;可有多个 RCPT TO;常在 MAIL 命令后面。
DATA 在单个或多个 RCPT 命令后,表示所有的邮件接收人已标识,并初始化数据传输,以 CRLF.CRLF 结束
VRFY 用于验证指定的用户/邮箱是否存在;由于安全方面的原因,服务器常禁止此命令
EXPN 验证给定的邮箱列表是否存在,扩充邮箱列表,也常被禁用
HELP 查询服务器支持什么命令
NOOP 无操作,服务器应响应 OK
RSET 重置会话,当前传输被取消
QUIT 结束会话

连接 Winmail Server 使用 SMTP 命令发送邮件
例如:安装 Winmail 的邮件服务器IP是192.168.0.1 (蓝色字体内容由客户端输入,红色字体内容是服务返回的)

telnet 192.168.0.1 25--------------------------------------- 使用 telnet 命令连接服务器 25端口
Trying 192.168.0.1...--------------------------------------- 正在连接服务器 25 端口
Connected to 192.168.0.1.----------------------------------- 连接服务器 25 端口成功
220 Winmail Mail Server ESMTP ready------------------------- 显示服务器的标识名称 (Winmail管理工具->高级设置->系统参数->基本参数中可更改)
helo cnu.com------------------------------------------------向服务器标识用户身份,发信不要认证,跳过下面几步直接发送 mail from 命令
250 Winmail Mail Server
ehlo cnu.com------------------------------------------------ ESMTP命令,发信需要认证。
250-Winmail Mail Server
250-PIPELINING
250-AUTH=LOGIN PLAIN
250-AUTH LOGIN PLAIN
250-SIZE 20480000
250 8BITMIME
auth login------------------------------------------------- 进行用户身份认证
334 VXNlcm5hbWU6 
Y29zdGFAYW1heGl0Lm5ldA==----------------------------------- BASE64 加密后的用户名
334 UGFzc3dvcmQ6 
MTk4MjIxNA==----------------------------------------------- BASE64 加密后的密码
235 auth successfully-------------------------------------- 身份认证成功
(535 auth failure------------------------------------------ 身份认证失败)
发到本系统中域名下的账户可跳过身份认证。
mail from:<test1@domain.com>------------------------------ mail from 地址 test1@domain.com
250 ok----------------------------------------------------- 命令执行成功
rcpt to:<test2@domain.com>-------------------------------- 递送给地址 test2@domain.com
250 ok----------------------------------------------------- 命令执行成功
data-------------------------------------------------------数据传输初始化
354 go ahead----------------------------------------------- 开始传输数据
From: test1@domain.com
To: test2@domain.com
Date: Mon, 25 Oct 2004 14:24:27 +0800
Subject: test mail

Hi, test2
This is a test mail, you don't reply it.

.
------------------------------------------------------------数据内容,包括BASE64加密后的邮件内容, 以 CRLF.CRLF 结束数据传输
250 ok message accepted for delivery----------------------- 命令执行成功
quit------------------------------------------------------- 结束会话
221  Winmail MailServer
Connection closed by foreign host.------------------------- 断开连接

SMTP示例:

5.2.  Mail Forwarding

When Alice sends a message to Bob at his almamater.edu.example
   account, the SMTP session from her SUBMIT server might look something
   like this:

S: 220 almamater.edu.example ESMTP server ready
      C: EHLO example.com
      S: 250-almamater.edu.example
      S: 250-DSN
      S: 250-AUTH
      S: 250-SUBMITTER
      S: 250 SIZE
      C: MAIL FROM:<alice@example.com> SUBMITTER=alice@example.com
      S: 250 <alice@example.com> sender ok
      C: RCPT TO:<bob@almamater.edu.example>
      S: 250 <bob@almamater.edu.example> recipient ok
      C: DATA
      S: 354 okay, send message
      C: (message body goes here)
      C: .
      S: 250 message accepted
      C: QUIT
      S: 221 goodbye

The almamater.edu.example MTA must now forward this message to
   bob@company.com.example.  Although the original sender of the message
   is alice@example.com, Alice is not responsible for this most recent
   retransmission of the message.  That role is filled by
   bob@almamater.edu.example, who established the forwarding of mail to
   bob@company.com.example.  Therefore, the almamater.edu.example MTA
   determines a new purported responsible address for the message,
   namely, bob@almamater.edu.example, and sets the SUBMITTER parameter
   accordingly.  The forwarding MTA also inserts a Resent-From header in
   the message body to ensure the purported responsible address derived
   from the RFC 2822 headers matches the SUBMITTER address.

S: 220 company.com.example ESMTP server ready
      C: EHLO almamater.edu.example
      S: 250-company.com.example
      S: 250-DSN
      S: 250-AUTH
      S: 250-SUBMITTER
      S: 250 SIZE
      C: MAIL FROM:<alice@example.com>
              SUBMITTER=bob@almamater.edu.example
      S: 250 <alice@example.com> sender ok
      C: RCPT TO:<bob@company.com.example>
      S: 250 <bob@company.com.example> recipient ok
      C: DATA
      S: 354 okay, send message
      C: Resent-From: bob@almamater.edu.example
      C: Received By: ...
      C: (message body goes here)
      C: .
      S: 250 message accepted
      C: QUIT
      S: 221 goodbye

5.3.  Mobile User

Alice is at the airport and uses her mobile e-mail device to send a
   message to Bob.  The message travels through the carrier network
   provided by mobile.net.example, but Alice uses her example.com
   address on the From line of all her messages so that replies go to
   her office mailbox.

Here is an example of the SMTP session between the MTAs at
   mobile.net.example and almamater.edu.example.

S: 220 almamater.edu.example ESMTP server ready
      C: EHLO mobile.net.example
      S: 250-almamater.edu.example
      S: 250-DSN
      S: 250-AUTH
      S: 250-SUBMITTER
      S: 250 SIZE
      C: MAIL FROM:<alice@example.com>
              SUBMITTER=alice@mobile.net.example
      S: 250 <alice@example.com> sender ok
      C: RCPT TO:<bob@almamater.edu.example>
      S: 250 <bob@almamater.edu.example> recipient ok
      C: DATA
      S: 354 okay, send message
      C: Sender: alice@mobile.net.example
      C: Received By: ...
      C: (message body goes here)
      C: .
      S: 250 message accepted
      C: QUIT
      S: 221 goodbye

Note that mobile.net.example uses the SUBMITTER parameter to
   designate alice@mobile.net.example as the responsible submitter for
   this message.  Further, this MTA also inserts a Sender header to
   ensure the purported responsible address derived from the RFC 2822
   headers matches the SUBMITTER address.

Likewise, conventional ISPs may also choose to use the SUBMITTER
   parameter to designate as the responsible submitter the user’s
   address on the ISP’s network if that address is different from the
   MAIL FROM address.  This may be especially useful for ISPs that host
   multiple domains or otherwise share MTAs among multiple domains.

When the message is subsequently forwarded by the
   almamater.edu.example MTA, that MTA will replace the SUBMITTER
   parameter with bob@almamater.edu.example as in Section 5.2 and add
   its own Resent-From header.

5.4.  Guest E-Mail Service

While on a business trip, Alice uses the broadband access facilities
   provided by the Exemplar Hotel to connect to the Internet and send
   e-mail.  The hotel routes all outbound e-mail through its own SMTP
   server, email.hotel.com.example.

The SMTP session for Alice’s message to Bob from the Exemplar Hotel
   would look like this:

S: 220 almamater.edu.example ESMTP server ready
      C: EHLO email.hotel.com.example
      S: 250-almamater.edu.example
      S: 250-DSN
      S: 250-AUTH
      S: 250-SUBMITTER
      S: 250 SIZE
      C: MAIL FROM:<alice@example.com>
              SUBMITTER=guest.services@email.hotel.com.example
      S: 250 <alice@example.com> sender ok
      C: RCPT TO:<bob@almamater.edu.example>
      S: 250 <bob@almamater.edu.example> recipient ok
      C: DATA
      S: 354 okay, send message
      C: Resent-From: guest.services@email.hotel.com.example
      C: Received By: ...
      C: (message body goes here)
      C: .
      S: 250 message accepted
      C: QUIT
      S: 221 goodbye

Note that email.hotel.com.example uses the SUBMITTER parameter to
   designate a generic account guest.services@email.hotel.com.example as
   the responsible submitter address for this message.  A generic
   account is used since Alice herself does not have an account at that
   domain.  Furthermore, this client also inserts a Resent-From header
   to ensure the purported responsible address derived from the RFC 2822
   headers with the SUBMITTER address.

As before, when the message is subsequently forwarded by the
   almamater.edu.example MTA, that MTA will replace the SUBMITTER
   parameter with bob@almamater.edu.example as in Section 5.2 and add
   its own Resent-From header.

5.5.  SUBMITTER Used on a Non-Delivery Report

Alice sends an incorrectly addressed e-mail message and receives a
   non-delivery report from a SUBMITTER-compliant server.

S: 220 example.com ESMTP server ready
      C: EHLO almamater.edu.example
      S: 250-example.com
      S: 250-DSN
      S: 250-AUTH
      S: 250-SUBMITTER
      S: 250 SIZE
      C: MAIL FROM:<> SUBMITTER=mailer-daemon@almamater.edu.example
      S: 250 OK
      C: RCPT TO:<alice@example.com>
      S: 250 OK
      C: DATA
      S: 354 OK, send message
      C: (message body goes here)
      C: .
      S: 250 message accepted
      C: QUIT
      S: 221 goodbye

SMTP协议在发送SMTP和接收SMTP之间的会话是靠发送SMTP的SMTP命令和接收SMTP反馈的应答来完成的。在通讯链路建立后,发送SMTP发送MAIL命令指令邮件发送者,若接收SMTP此时可以接收邮件则作出OK的应答,然后发送SMTP继续发出RCPT命令以确认邮件是否收到,如果接收到就作出OK的应答,否则就发出拒绝接收应答,但这并不会对整个邮件操作造成影响。双方如此反复多次,直至邮件处理完毕。SMTP协议共包含10个SMTP命令,列表如下:

  SMTP命令说明

  HELLO<domain><CRLF>识别发送方到接收SMTP的一个HELLO命令

  MAILFROM:<reverse-path><CRLF><reverse-path>为发送者地址。此命令告诉接收方一个新邮件发送的开始,并对所有的状态和缓冲区进行初始化。此命令开始一个邮件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。

  RCPTTO:<forward-path><CRLF><forward-path>标识各个邮件接收者的地址

  DATA<CRLF>

  接收SMTP将把其后的行为看作邮件数据去处理,以<CRLF>.<CRLF>标识数据的结尾。

  REST<CRLF>退出/复位当前的邮件传输

  NOOP<CRLF>要求接收SMTP仅做OK应答。(用于测试)

  QUIT<CRLF>要求接收SMTP返回一个OK应答并关闭传输。

  VRFY<string><CRLF>验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命令。

  EXPN<string><CRLF>验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用。

  HELP<CRLF>查询服务器支持什么命令

  注:<CRLF>为回车、换行,ASCII码分别为13、10(十进制)。

  SMTP协议的每一个命令都会返回一个应答码,应答码的每一个数字都是有特定含义的,如第一位数字为2时表示命令成功;为5表失败;3表没有完成。一些较复杂的邮件程序利用该特点,首先检查应答码的首数字,并根据其值来决定下一步的动作。下面将SMTP的应答码列表如下:

  应答码说明

  501参数格式错误

  502命令不可实现

  503错误的命令序列

  504命令参数不可实现

  211系统状态或系统帮助响应

  214帮助信息

  220<domain>服务就绪

  221<domain>服务关闭

  421<domain>服务未就绪,关闭传输信道

  250要求的邮件操作完成

  251用户非本地,将转发向<forward-path>

  450要求的邮件操作未完成,邮箱不可用

  550要求的邮件操作未完成,邮箱不可用

  451放弃要求的操作;处理过程中出错

  551用户非本地,请尝试<forward-path>

  452系统存储不足,要求的操作未执行

  552过量的存储分配,要求的操作未执行
  
553邮箱名不可用,要求的操作未执行

  354开始邮件输入,以"."结束

  554操作失败

ESMTP协议与SMTP协议相关推荐

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

    电子邮件协议(SMTP协议,POP3协议) SMTP 使用Telnet访问SMTP服务器 POP3 使用Telnet访问POP3服务器 SMTP STMP(简单邮件传输协议)是因特网电子邮件的核心.如 ...

  2. 深入理解SMTP协议之邮件客户端

    本文将使用Python从零实现一个简易的邮件客户端,通过本文你将对SMTP协议有更深入的了解,同时掌握使用Python实现标准协议的经验. 我们将开发一个简单的邮件客户端,将邮件发送给任意收件人.我们 ...

  3. 利用Telnet登录qq邮箱发送邮件——SMTP协议学习

    最近看<计算机网络>,在应用层学到了一个协议叫SMTP协议,该协议用于系统间Email的传输. 明白了其中的原理,下面动手尝试实现一个SMTP交互的实例. 一.启用Windows的&quo ...

  4. JavaMail学习笔记(一)、理解邮件传输协议(SMTP、POP3、IMAP、MIME)

    电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行传递,就必须遵循一定的规则,这些规则就是邮件传输协议.SMTP协议定了邮件客户端与SMTP服务之间,以及两台SMTP服务器之间发送邮 ...

  5. exchange无法收发邮件_Python使用POP3和SMTP协议收发邮件!

    先来了解一下收/发邮件有哪些协议: SMTP协议 SMTP(Simple Mail Transfer Protocol),即简单邮件传输协议.相当于中转站,将邮件发送到客户端. POP3协议 POP3 ...

  6. 【计算机网络】应用层 : 电子邮件 ( SMTP 协议 | MIME 协议 | POP3 协议 | IMAP 协议 | 基于万维网的电子邮件 )

    文章目录 一.电子邮件信息格式★ 二.电子邮件系统 组成 结构 ★ 三.SMTP 协议 ( 简单邮件传送协议 ) ★ 四.SMTP 协议 连接建立流程 五.SMTP 协议 邮件发送 流程 六.SMTP ...

  7. ARP协议SMTP协议MIME

    文章目录 1.ARP协议 1.1.ARP协议的概念 1.2.ARP解析案例 1.3.3. ARP原理 2.SMTP协议 2.1.SMTP协议简介 2.2.SMTP协议原理 2.3.发送邮件应用举例 3 ...

  8. 利用smtp协议实现命令行发送邮件

    事实上只要知道邮件准确服务器的地址,即使没有邮箱也能给它发邮件,这里使用smtp协议演示使用电脑黑框发邮件. 先介绍一下smtp协议,smtp协议是简单邮件传输协议,在本例中相当于中转服务器. 任务 ...

  9. C++Qt开发——SMTP协议

    1. SMTP协议简介 SMTP协议:全称为 Simple Mail Transfer Protocol,简单邮件传输协议.它定义了邮件客户端软件和SMTP邮件服务器之间,以及两台SMTP邮件服务器之 ...

最新文章

  1. php access增删改查,同一窗体实现增删改查
  2. 微信小程序实践_4显示新闻(2)
  3. 说说你知道的数据库常用架构方案?
  4. 电脑安装python失败-解决“Windows 7 Python3.6 安装失败”问题
  5. 美团点评效果广告实验配置平台的设计与实现
  6. windows与虚拟机的linux共享一个文件夹
  7. POJ1007 UVA612 UVALive5414 ZOJ1188 HDU1379 Bailian4086 DNA Sorting【排序+逆序数】
  8. UE4之脚本导入fbx
  9. windows php redis扩展安装,怎么在Windows下安装PHP的Redis扩展服务
  10. 地震及断层分析相关软件
  11. dnf服务器运行库,游戏运行库|3DM游戏必备运行库合集安装包(史上最全) V3.0
  12. 【中文说唱巅峰】幼稚园杀手(aka小号王)的炸弹 “异界来客“ 无损flac试
  13. Steam中如何下载锁区的游戏?一直出现 正在更新票证怎么办?
  14. 客户需求分析工具-$APPEALS
  15. 2022泰迪杯B题思路解析(LSTM神经网络,时间序列ARIMA模型)可供学习参考
  16. 百度地图 LBS API 使用
  17. 计算机里多了一个硬盘q,电脑上多了个本地磁盘Q怎么回事
  18. 《老男孩》——记录我们逝去的青春
  19. C语言处理/proc/meminfo
  20. outlook邮箱邮件大小限制_Office Outlook 2010、2013附件大小超过了允许的范围限制三种解决方法图解 – 爱分享...

热门文章

  1. 【linux基础-1】linux下的快捷键-根目录结构-用户目录
  2. 百度实习转正学长面经-Java常见面试题目和解答,值得收藏
  3. 实现微信小程序精准定位
  4. MACE源码解析【ARM卷积篇(一) 】1*N和N*1卷积实现
  5. Unity 性能优化基础
  6. 使用Android SwipeRefreshLayout了解Android的嵌套滑动机制
  7. Vue中为对象添加字段
  8. 多元函数的泰勒级数展开公式
  9. PINO——一个开放的机器人项目
  10. linux下route路由设置命令详解