我们公司的exchange,smtp使用587端口,关于smtpsever的配置就是
self.sender = smtplib.SMTP("smtp.gtland.cn", 587)
而不是网上说的tls配置成
self.sender = smtplib.SMTP_SSL("smtp.gtland.cn", 587)
测试下邮箱的发送
for i in {huangshumao@gtland.cn,106140873@qq.com};do /etc/keepalived/send.py ${i} 'Keepalive 节点一恢复正常' '192.168.20.191已成为主机!'; done
base64加密
#!/usr/bin/python2.7
# coding=utf-8
import base64
a = base64.b64encode('this is an example')
print a
print base64.b64decode(a)
记得chmod +x example-base64
./example-base64
dGhpcyBpcyBhbiBleGFtcGxl
this is an example
发送邮件脚本
#!/usr/bin/python2.7
# coding=utf-8
import smtplib,sys
import base64
from email.mime.text import MIMEText
from email.header import Header
class Msmtp():
def __init__(self, target, subject, content):#收件人、标题、内容
self.msg_from = '邮箱地址'
self.password = base64.b64decode('加密后的密码')
self.sender = smtplib.SMTP("smtp服务器地址", 587)
#如https://blog.csdn.net/zyx_ly/article/details/88032283
#这个文章才是正确的很多文章tls都是配置587用SMTP_SSL
#公司的邮箱配置587是用smtplib.SMTP("smtp服务器地址", 587)
# smtp = smtplib.SMTP_SSL(smtpHost, sslPort)
self.msg_to = target
self.subject = subject
self.content = content
def _login(self):
self.sender.login(self.msg_from, self.password)
def _msg(self):
self.msg = MIMEText(self.content)
self.msg['Subject'] = self.subject
self.msg['From'] = self.msg_from
self.msg['To'] = self.msg_to
def send_mail(self):
self.sender.set_debuglevel(1)
self.sender.docmd("EHLO server")
self.sender.starttls()
#self.sender.docmd("AUTH LOGIN")
self._login()
self._msg()
self.sender.sendmail(self.msg_from, self.msg_to, self.msg.as_string())
self.sender.quit()
# email log 记录日志
# with open('data.txt','w') as f:
with open('/var/log/Email.log', 'a') as f:
date=time.strftime("%y-%m-%d %H:%M:%S")
str = date + " " + sys.argv[1] +" " + sys.argv[2] + "\r\n" + "\n"
# str1 = str.decode('gbk').encode('utf-8')
# print("%s" %str1)
# f.write(str)
print("%s" %str)
f.write(str)
if __name__ == '__main__':
a = Msmtp(sys.argv[1], sys.argv[2], sys.argv[3])
a.send_mail()
发送邮箱开了debug模式,在命令行可以看到base64加密后的用户名和密码
下以是通用实例,请根据实际情况配置。
# !/usr/bin/python
# coding:utf-8
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr, formatdate
import smtplib
import sys
import importlib
# 设置默认字符集为UTF8 不然有些时候转码会出问题
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
importlib.reload(sys)
sys.setdefaultencoding(default_encoding)
# 发送邮件的相关信息,根据你实际情况填写
smtpHost = 'smtp.qq.com'
smtpPort = '25'
sslPort = '587'
fromMail = 'zyx'
toMail = 'xxxxxxxxxxx@163.com'
username = 'xxxxxxxxxx@qq.com'
password = 'xxxxxxxxxxxxxxxx'
# 邮件标题和内容
subject = u'[Notice]hello'
body = u'hello,this is a mail from ' + fromMail
# 初始化邮件
encoding = 'utf-8'
mail = MIMEText(body.encode(encoding), 'plain', encoding)
mail['Subject'] = Header(subject, encoding)
mail['From'] = fromMail
mail['To'] = toMail
mail['Date'] = formatdate()
try:
# 连接smtp服务器,明文/SSL/TLS三种方式,根据你使用的SMTP支持情况选择一种
# 普通方式,通信过程不加密
# smtp = smtplib.SMTP(smtpHost, smtpPort)
# smtp.ehlo()
# smtp.login(username, password)
# tls加密方式,通信过程加密,邮件数据安全,使用正常的smtp端口
smtp = smtplib.SMTP(smtpHost, smtpPort)
smtp.set_debuglevel(True)
smtp.ehlo()
smtp.starttls()
smtp.ehlo()
smtp.login(username, password)
# 纯粹的ssl加密方式,通信过程加密,邮件数据安全
# smtp = smtplib.SMTP_SSL(smtpHost, sslPort)
# smtp.ehlo()
# smtp.login(username, password)
# 发送邮件
smtp.sendmail(fromMail, toMail, mail.as_string())
smtp.close()
print('OK')
except Exception as e:
print(e)