根据现有的答案,这里有一个分步指南,通过 SMTP 发送自动电子邮件,使用 GMail 帐户,从命令行,不透露密码。
要求
首先,安装以下软件包:
这些说明假定为 Linux 操作系统,但应该很容易移植到 Windows(通过 Cygwin 或本机等效程序)或其他操作系统。
验证
将以下 shell 脚本另存为authentication.sh
:
#!/bin/bash
# Asks for a username and password, then spits out the encoded value for
# use with authentication against SMTP servers.
echo -n "Email (shown): "
read email
echo -n "Password (hidden): "
read -s password
echo
TEXT="\0$email\0$password"
echo -ne $TEXT | base64
使其可执行并按如下方式运行:
chmod +x authentication.sh
./authentication.sh
出现提示时,提供您的电子邮件地址和密码。这看起来像:
Email (shown): bob@gmail.com
Password (hidden):
AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg==
复制最后一行 ( AGJ...==
),因为这将用于身份验证。
通知
将以下期望脚本另存为notify.sh
(注意第一行指的是期望程序):
#!/usr/bin/expect
set address "[lindex $argv 0]"
set subject "[lindex $argv 1]"
set ts_date "[lindex $argv 2]"
set ts_time "[lindex $argv 3]"
set timeout 10
spawn openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
expect "220" {
send "EHLO localhost\n"
expect "250" {
send "AUTH PLAIN YOUR_AUTHENTICATION_CODE\n"
expect "235" {
send "MAIL FROM: <YOUR_EMAIL_ADDRESS>\n"
expect "250" {
send "RCPT TO: <$address>\n"
expect "250" {
send "DATA\n"
expect "354" {
send "Subject: $subject\n\n"
send "Email sent on $ts_date at $ts_time.\n"
send "\n.\n"
expect "250" {
send "quit\n"
}
}
}
}
}
}
}
进行以下更改:
- 粘贴
YOUR_AUTHENTICATION_CODE
身份验证脚本生成的身份验证代码。
- 更改
YOUR_EMAIL_ADDRESS
用于生成验证码的电子邮件地址。
- 保存文件。
例如(注意电子邮件地址保留了尖括号):
send "AUTH PLAIN AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg==\n"
send "MAIL FROM: <bob@gmail.com>\n"
最后,使通知脚本可执行如下:
chmod +x notify.sh
发送电子邮件
从命令行发送电子邮件,如下所示:
./notify.sh recipient@domain.com "Command Line" "March 14" "15:52"