使用msmtp发送邮件的例子

2012/07/31 12:37
阅读数 4.5K
最近在搞一个东西需要做邮件通知,又不想在服务器上多搞个邮件服务.
怎么办呢?
能否用各种免费邮箱来发邮件呢?
答案当然是可以啦!
用什么客户端呢?
我想到了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}


展开阅读全文
打赏
0
3 收藏
分享
加载中
iwkt博主
经测试发中文内容邮件是可以的,这个脚步只是演示如何做?但不实用.发邮件的动作在send函数中,TLS其实就是通信过程加密而已,hotmail,163,gmail登陆stmp服务器时都要求tls支持
qq邮箱不要求也不支持tls.
2012/08/01 09:33
回复
举报
弱弱的问一句,这个脚本在 Linux 平台上运行,那是不是就不能发送中文邮件内容,还是说,通过程序去调用这个脚本,往其中传入参数以发送任意内容的邮件?另外,注意到邮件提供商都是免费的,是不是因为权限验证这块有问题,所以不能出现 TLS 或者相关的验证?
2012/07/31 15:03
回复
举报
更多评论
打赏
2 评论
3 收藏
0
分享
返回顶部
顶部