使用 SMTP 发送邮件

使用 SMTP 发送邮件

开启 SMTP 发信功能您需要先开启 SMTP 发信功能才能通过 SMTP 接口发送邮件。

登录 邮件推送控制台。

单击左侧导航栏中 发信地址,进入发信地址页面。

在发信地址列表中,找到您要开启 SMTP 发信功能的发信地址,在对应的操作栏中单击 设置 SMTP 密码。

在弹出对话框中填写 SMTP 密码,然后单击 确定。

SMTP 发信方法SMTP 协议是一个简单的邮件传输协议,利用它您可以将邮件发送给别人。此协议使用命令和应答在客户端与服务器之间传输报文。即客户端发出一个命令,服务器返回一个应答。发送方与接收方进行一问一答的交互,由发送方控制这个对话。

SMTP RFC 协议参考 RFC5321。

使用 SMTP 协议的邮件服务器分为两种:

一种为邮件发送服务器,通常叫做 smtpd,需要发件人进行认证。

一种为邮件接收服务器,通常叫做 mx,接收外部运营商用户投递给本地用户的邮件。

阿里云邮件推送的邮件服务器为 smtpd,所以需要进行用户认证(要求认证用户名和发件人必须一致),认证用户名(就是发件人)和密码可以通过控制台进行设置。

程序中调用 SMTP 发送邮件可以使用各种语言的 SMTP Library。详细参考,请见 SMTP 调用示例。

通过 SMTP 协议发送邮件的整体过程如下:

客户端使用 telnet 命令连接到SMTP服务器,建立会话。

客户端发送一个 HELO 或 EHLO 命令。

客户端发送一个 AUTH 认证命令进行用户登录(使用 smtpd 方式)。

客户端发送一个 MAIL 命令指定发件人。

客户端发送一个 RCPT 命令指定收件人。

客户端发送一个 DATA 命令准备输入邮件正文。

客户端发送一个 . 命令(点命令)表示 DATA 命令结束。

客户端发送一个 QUIT 命令结束会话。

示例为帮助您熟悉使用 SMTP 协议发送邮件的流程,提供以下 telnet 命令会话过程示例,来描述 SMTP 命令会话过程。

备注:其中 S 代表服务器,C 代表客户端。可以使用 Linux 命令 echo -n Content|base64 进行 base64 编码。

非加密方式:

$telnet smtpdm.aliyun.com 80

S:220 smtp.aliyun-inc.com MX AliMail Server(127.0.0.1)

C:EHLO test.com

S:250-smtp.aliyun-inc.com

S:250-8BITMIME

S:250-AUTH=PLAIN LOGIN XALIOAUTH

S:250-AUTH PLAIN LOGIN XALIOAUTH

S:250-PIPELINING

S:250 DSN

C:AUTH LOGIN

S:334 dXNlcm5hbWU6

C:YSoqKkBleGFtcGxlLm5ldA== 备注:用户名a***@example.net的base64编码

S:334 UGFzc3dvcmQ6

C:dGVzdA== 备注:用户密码test的base64编码

S:235 Authentication successful

C:MAIL FROM: 备注:注意用 <> 将发件人扩起来

S:250 Mail Ok

C:RCPT TO:

S:250 Rcpt Ok

C:DATA

S:354 End data with .

C:subject: test

C:from:

C:to:

C:

C:test

C:.

S:Data Ok: queued as freedom ###envid=148316944

C:QUIT

S:221 Bye加密方式(需要openssl工具配合):

openssl s_client -connect smtpdm.aliyun.com:465 -crlf

openssl s_client -connect smtpdm.aliyun.com:465 -tls1 -cipher AES128-SHA -crlf

openssl s_client -connect smtpdm.aliyun.com:465 -tls1_1 -cipher AES128-SHA -crlf

openssl s_client -connect smtpdm.aliyun.com:465 -tls1_2 -cipher AES128-GCM-SHA256 -crlf

openssl s_client -connect smtpdm.aliyun.com:465 -tls1_3 -cipher AES128-GCM-SHA256 -crlfopenssl连接成功后直接在同一窗口继续逐行输入下面客户端命令:

$openssl s_client -connect smtpdm.aliyun.com:465 -crlf

***

***

***

S:220 DirectMail Smtpd Server(127.0.0.1)

C:EHLO test.com

S:250-smtp.aliyun-inc.com

S:250-8BITMIME

S:250-AUTH=PLAIN LOGIN XALIOAUTH

S:250-AUTH PLAIN LOGIN XALIOAUTH

S:250-PIPELINING

S:250 DSN

C:AUTH LOGIN

S:334 dXNlcm5hbWU6

C:YSoqKkBleGFtcGxlLm5ldA== 备注:用户名a***@example.net的base64编码

S:334 UGFzc3dvcmQ6

C:dGVzdA== 备注:用户密码test的base64编码

S:235 Authentication successful

C:MAIL FROM: 备注:注意用 <> 将发件人扩起来

S:250 Mail Ok

C:rcpt to: 备注:rcpt to使用小写,大写可能识别错误

S:250 Rcpt Ok

C:DATA

S:354 End data with .

C:subject: test

C:from:

C:to:

C:

C:test

C:.

S:250 Data Ok: queued as freedom ###envid=600000105713504612

C:QUIT

S:DONE

其中,DATA 命令后输入的邮件正文示例中,采用了最简单的文本字符串数据。对于标准的富文本邮件,应该进行规范的 MIME 格式化,包括主题、正文的编码等,这样可以降低被接收方服务器判为垃圾邮件的风险。

MIME 协议可参考 RFC2045。可以使用阿里云官网提供的 SMTP 发送示例中的各种语言 Library 进行 MIME 邮件编码。

如何构建 MIME 邮件,请参见 如何通过 SMTP 方式发送带附件的邮件?

相关数据