「Linux」- 从命令行发送邮件

  CREATED BY JENKINSBOT

给本地用户发送邮件

该部分中演示的是使用mail命令给同一个系统中的其他用户发送邮件。

#!/bin/bash

echo "A Test Mail." | mail -s "Test Mail" zheng

# 当前登录的用户为root,所以发邮件的用户为root。命令中的zheng为系统中的另外一个用户。
# 上述命令发送一封主题为“Test Mail”且邮件内容为“A Test Mail.”的邮件给用户zheng。
# 用户zheng登录后,在终端中执行mail命令,即可查看邮箱中的邮件。
# 系统中所有的邮件位于/var/mial/$USER。注意,如果用户从未收到过邮件,那么在/var/mail中可能没有对应的文件。

使用telnet命令发送邮件

该部分中演示的是使用telnet命令,登录163邮箱服务器,给QQ邮箱发送邮件。

几点说明

  1. 在下面的示例中,需要用户输入的内容进行了加粗显示。
  2. 以「# 说明:」之类的文本为解释性内容,使用斜体显示。
  3. <ENTER>表示回车键。
  4. 示例中发件人的邮箱地址:sender@163.com
  5. 示例中收件人的地址为:recipient@qq.com
  6. 最重要的一点:以下命令的有些地方连一个空格都不能多。类似的地方会着重说明。

操作步骤如下

telnet smtp.163.com 25<ENTER> 		# 说明:SHELL命令。连接的163邮箱服务器及端口号。
Trying 220.181.12.11...
Connected to smtp.163.com.
Escape character is '^]'.
220 163.com Anti-spam GT for Coremail System (163com[20141201]) 	# 说明:表示连接成功。如果再按<ENTER>键,则直接退出。
helo localhost<ENTER>		# 说明:发送HELLO命令,开始会话。
250 OK
auth login<ENTER>		# 说明:请求认证登录命令。
334 dXNlcm5hbWU6			# 说明:“username:”的Base64值,提示你输入用户名。
ZG9uZ2hhbmhhbmdAMTYzLmNvbQ==<ENTER> 	# 将你的用户名base64编码后填入
334 UGFzc3dvcmQ6 	# 说明:"Password:"的Base64值,提示你输入密码。这个密码是授权码(登录邮箱客户端使用的那个),不是在网页登录邮箱使用的那个密码。
bGl1a2FpMTM4LC4=<ENTER>
235 Authentication successful		# 说明:登录成功。下面就是发送邮件了。
mail from:<sender@163.com><ENTER> 	# 说明:邮件发送者。发件人邮箱地址两侧的<和>不能省略。
250 Mail OK
rcpt to:<recipient@qq.com><ENTER> 	# 说明:邮件接收者。收件人邮箱地址两侧的<和>不能省略。
250 Mail OK
data<ENTER> 	# 说明:data命令开始书写邮件内容。
354 End data with <CR><LF>.<CR><LF>
to:recipient@qq.com<ENTER> 	# 说明:收件人邮箱跟上文保持一致。to:与recipient@qq.com之间不要有什么空格。不然会被退信。
from:sender@163.com<ENTER> 	# 说明:发件人邮箱跟上文保持一致。from:与sender@163.com之间不要有什么空格。否则可能会被退回。
subject:test mail<ENTER> 	# 说明:邮件主题。
<ENTER> # 说明:添加一个空行,分割协议头与邮件正文,如果不加入改行,会导致邮件被退回。
This is a test mail....<ENTER> # 说明:正文内容
.<ENTER> 	# 说明:正如上面的提示:354 End data with <CR><LF>.<CR><LF>,表示邮件结束。
250 Mail OK queued as smtp12,EMCowABnovABxQ1XZjKTAQ--.7259S2 1460520311
quit<ENTER> 	# 说明:退出
221 Bye
Connection closed by foreign host.

现在可以到收件人的邮箱中,查看是否收到了主题为test mail的邮件了。

问题解答

若是最后阶段出现如下信息:

554 DT:SPM 163 smtp8,DMCowAD3tGW3xQ1XTZwWAA--.342S2 1460520473,please see http://mail.163.com/help/help_spam_16.htm?ip=183.62.251.42&hostid=smtp8&time=1460520473

表示我们被退信了。可以到提示的URL查看邮件退回原因。

使用mail命令发送邮件

参考另篇文章 在GNU/Linux中,使用 mail 命令发送邮件,因为这里面涉及很多东西要介绍。

参考文献

Linux终端telnet连接xxx邮箱server通过命令行实现mail发送
How to Test SMTP AUTH using Telnet