使用 SMTP 發(fā)送郵件
開啟 SMTP 發(fā)信功能
您需要先開啟 SMTP 發(fā)信功能才能通過 SMTP 接口發(fā)送郵件。
登錄 郵件推送控制臺。
單擊左側(cè)導航欄中 發(fā)信地址,進入發(fā)信地址頁面。
在發(fā)信地址列表中,找到您要開啟 SMTP 發(fā)信功能的發(fā)信地址,在對應的操作欄中單擊 設置 SMTP 密碼。
在彈出對話框中填寫 SMTP 密碼,然后單擊 確定。
SMTP 發(fā)信方法
SMTP 協(xié)議是一個簡單的郵件傳輸協(xié)議,利用它您可以將郵件發(fā)送給別人。此協(xié)議使用命令和應答在客戶端與服務器之間傳輸報文。即客戶端發(fā)出一個命令,服務器返回一個應答。發(fā)送方與接收方進行一問一答的交互,由發(fā)送方控制這個對話。
SMTP RFC 協(xié)議參考 RFC5321。
使用 SMTP 協(xié)議的郵件服務器分為兩種:
一種為郵件發(fā)送服務器,通常叫做 smtpd,需要發(fā)件人進行認證。
一種為郵件接收服務器,通常叫做 mx,接收外部運營商用戶投遞給本地用戶的郵件。
阿里云郵件推送的郵件服務器為 smtpd,所以需要進行用戶認證(要求認證用戶名和發(fā)件人必須一致),認證用戶名(就是發(fā)件人)和密碼可以通過控制臺進行設置。
程序中調(diào)用 SMTP 發(fā)送郵件可以使用各種語言的 SMTP Library。詳細參考,請見 SMTP 調(diào)用示例。
通過 SMTP 協(xié)議發(fā)送郵件的整體過程如下:
客戶端使用 telnet 命令連接到SMTP服務器,建立會話。
客戶端發(fā)送一個 HELO 或 EHLO 命令。
客戶端發(fā)送一個 AUTH 認證命令進行用戶登錄(使用 smtpd 方式)。
客戶端發(fā)送一個 MAIL 命令指定發(fā)件人。
客戶端發(fā)送一個 RCPT 命令指定收件人。
客戶端發(fā)送一個 DATA 命令準備輸入郵件正文。
客戶端發(fā)送一個 . 命令(點命令)表示 DATA 命令結(jié)束。
客戶端發(fā)送一個 QUIT 命令結(jié)束會話。
示例
為幫助您熟悉使用 SMTP 協(xié)議發(fā)送郵件的流程,提供以下 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: <a***@example.net> 備注:注意用 <> 將發(fā)件人擴起來
S:250 Mail Ok
C:RCPT TO: <a***@example.net>
S:250 Rcpt Ok
C:DATA
S:354 End data with <CR><LF>.<CR><LF>
C:subject: test
C:from: <a***@example.net>
C:to: <a***@example.net>
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 -cipher AES128-GCM-SHA256 -connect smtpdm.aliyun.com:465 -tls1_3 -crlf
openssl連接成功后直接在同一窗口繼續(xù)逐行輸入下面客戶端命令:
$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: <a***@example.net> 備注:注意用 <> 將發(fā)件人擴起來
S:250 Mail Ok
C:rcpt to: <a***1@example.net> 備注:rcpt to使用小寫,大寫可能識別錯誤
S:250 Rcpt Ok
C:DATA
S:354 End data with <CR><LF>.<CR><LF>
C:subject: test
C:from: <a***@example.net>
C:to: <a***1@example.net>
C:
C:test
C:.
S:250 Data Ok: queued as freedom ###envid=600000105713504612
C:QUIT
S:DONE
其中,DATA 命令后輸入的郵件正文示例中,采用了最簡單的文本字符串數(shù)據(jù)。對于標準的富文本郵件,應該進行規(guī)范的 MIME 格式化,包括主題、正文的編碼等,這樣可以降低被接收方服務器判為垃圾郵件的風險。
MIME 協(xié)議可參考 RFC2045。可以使用阿里云官網(wǎng)提供的 SMTP 發(fā)送示例中的各種語言 Library 進行 MIME 郵件編碼。
如何構(gòu)建 MIME 郵件,請參見 如何通過 SMTP 方式發(fā)送帶附件的郵件?