最近在搞一个东西需要做邮件通知,又不想在服务器上多搞个邮件服务.
怎么办呢?
能否用各种免费邮箱来发邮件呢?
答案当然是可以啦!
用什么客户端呢?
我想到了msmtp,msmtp配置好后发邮件非常方便.
当然啦!通过msmtp使用免费邮箱发邮件有风险.
发多了,发频繁了,很可能邮箱就被封.
想当年哥读书时,觉得msmtp很神奇,
于是乎用msmtp在我的两个163邮箱之间,
连续发了几十封邮件.结果两个邮箱全被网易封了,
说我恶意发邮件.哥,对灯发誓哥绝无恶意!
好了,不说废话了!看脚本吧!
#!/bin/bash
# filename: msmtp_send
#
# Copyright 2010 wkt <weikting@gmail.com>
#
#
#注意:
# 1 请不要使用这个脚本乱来
# 2 这个脚本有风险,要你的邮箱因为使用这个脚本中的方法发邮件而被被封杀,请不要怪我!
#使用方法:
# msmtp_send from@from_domain.com mailto@mailto_domain.com
#
#from@from_domain.com可以
#支持是gmail,163,hotmail,网易免费企业邮箱,QQ邮箱
#
rc=$(mktemp /tmp/.mailrc.XXXXXXXX)
#rc=/tmp/.mailrc.XXXXXXXX
from='user@my_domain.com'
to='mailto@mailto_domain.com'
smtp_server=smtp.ym.163.com
test -n "$1" && from=$1
test -n "$2" && to=$2
test -n "$3" && smtp_server=$3
get_user()
{
dn=$(get_domain $1)
if test "$dn = hotmail.com";then
echo $1
else
echo $1 |sed 's|@.*||g'
fi
}
get_domain()
{
echo $1 |sed 's|.*@||g'
}
get_smtp_server()
{
local dn
dn=$(get_domain $1)
if test "$dn" = hotmail.com;then
echo smtp.live.com
else
echo smtp.$dn
fi
}
cat <<___eof_ > ${rc}
defaults
#keepbcc on
###QQ邮箱不支持tls,使用QQ邮箱需要关闭tls_starttls
#tls_starttls off
tls on
###网易免费企业邮箱的ssl证书通不过验证,所以使用 网易免费企业邮箱 时,只能关闭tls证书验证
#tls_certcheck off
syslog on
auth on
#使用 网易免费企业邮箱 时,需要注释掉tls_trust_file
tls_trust_file /usr/lib/ssl/certs/ca-certificates.crt
account normal
host $(get_smtp_server $from)
from $from
user $(get_user $from)
##可以在这里填写邮箱密码,当然这样不是很安全
#password my_password
account qiye
host $smtp_server
from $from
user $from
#password my_password
tls_certcheck off
tls_trust_file
#设置默认msmtp使用的账号信息
#使用 网易免费企业邮箱,需要把normal改为qiye
account default : normal
___eof_
#更改配置文件权限,权限不对mstp拒绝干活
chmod og-rwx $rc
send()
{
cat <<__mail_ |msmtp -C $rc $to
TO:$to
FROM:$from
SUBJECT:test msmtp
This is a Test for msmtp!
$(date '+%Y/%m/%d %T.%N')
__mail_
}
send
rm -f ${rc}