实战背景描述
将端口扫描结果存储到txt文件内,通过qq邮箱将扫描结果文件发送给其他人。
调用方法
在实际端口扫描结束后,调用邮件发送方法即可 。
实现邮件发送代码
# !/usr/bin/python3
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import formataddr
my_sender = '27860*****@qq.com' # 发件人邮箱账号
my_pass = 'xaodfcr*******' # 发件人邮箱密码
my_user = '523*****@qq.com' # 收件人邮箱账号,我这边发送给自己
def mail():
ret = True
try:
# msg = MIMEText('填写邮件内容', 'plain', 'utf-8')
msg = MIMEMultipart()
msg['From'] = formataddr(["From金卷卷", my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To'] = formataddr(["To绿豆麻麻", my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject'] = "端口扫描结果报告" # 邮件的主题,也可以说是标题
msg.attach(MIMEText('附件为端口扫描结果报告,请查收', 'plain', 'utf-8'))
# 构造附件
# att = MIMEText(open('E:\\study_socket\\第四课\\1.png', 'rb').read(), 'base64', 'utf-8')
# att["Content-Type"] = 'application/octet-stream'
#附件名字为非中文的写法
# att["Content-Disposition"] = 'attachment; filename="1.png"'
# msg.attach(att)
# 构造附件2--
att = MIMEText(open('界面化_扫描结果.txt', 'rb').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream'
# 附件名字为中文
att.add_header("Content-Disposition", "attachment", filename=("gbk", "", "界面化_扫描结果.txt"))
msg.attach(att)
server = smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件人邮箱中的SMTP服务器,端口是25
server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() # 关闭连接
except Exception: # 如果 try 中的语句没有执行,则会执行下面的 ret=False
ret = False
return ret
# ret = mail()
def send_mail():
ret = mail()
if ret:
print("邮件发送成功")
else:
print("邮件发送失败")
# if __name__ == '__main__':
# send_mail()
邮件发送结果
邮件发送给多人
场景:从页面的输入框内获取接收人邮箱(字符串类型)
------------------------------------------------
def send_mail(url,executor_account,executor_pwd,Receivers):
#1.将获取到的邮箱列表通过“,”进行切割为列表
Receivers_list = Receivers.split(',')
# print (f'发件人邮箱executor_account={executor_account}')
# print (f'发件邮箱的授权密码executor_pwd={executor_pwd}')
# print (f'接收人邮箱列表Receivers={Receivers}')
ret = True
try:
msg = MIMEMultipart()
msg['From'] = formataddr(["executor_account", executor_account])
#2.将多人邮箱通过“,”拼接后传递给 msg['To']
msg['To'] = ','.join(Receivers_list)
msg['Subject'] = "自动化运行结束"
msg.attach(MIMEText('您的自动化已执行结束,请查收~点击查看报告内容'+url, 'plain', 'utf-8'))
server = smtplib.SMTP_SSL("smtp.qq.com", 465)
server.login(executor_account, executor_pwd)
#3.发送邮件时,多个收件人以列表形式传递
server.sendmail(executor_account, msg['To'].split(','), msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit() # 关闭连接
print ("邮件发送成功")
except Exception:
ret = False
return ret