注:仅用于学习,切莫做其他用途。
全称“简单邮件传输协议”
主要作用:
1、提交邮件。当用户在电脑上输入电子邮件信息时,电子邮件客户端会使用SMTP将用户输入的电子邮件提交至服务器,由该服务器负责将电子邮件发送至接收服务器。
2、传输邮件。电子邮件服务器使用SMTP来传输消息。每条消息中途都会经过互联网上的多台邮件服务器,直到到达负责接手电子邮件地址域(domain,电子邮件地址中在@符号后面的部分)的服务器为止。
详见
gmail(google.com)
POP3服务器地址:pop.gmail.com(SSL启用 端口:995)
SMTP服务器地址:smtp.gmail.com(SSL启用 端口:587)
163.com:
POP3服务器地址:pop.163.com(端口:110)
SMTP服务器地址:smtp.163.com(端口:25)
QQ邮箱
POP3服务器地址:pop.qq.com(端口:110)
SMTP服务器地址:smtp.qq.com (端口:25)
SMTP服务器需要身份验证
QQ企业邮箱
POP3服务器地址:pop.exmail.qq.com (SSL启用 端口:995)
SMTP服务器地址:smtp.exmail.qq.com(SSL启用 端口:587/465)
SMTP.set_debuglevel(level) | 设置输出debug调试信息,默认不输出 |
---|---|
SMTP.docmd(cmd[, argstring]) | 发送一个命令到SMTP服务器 |
SMTP.connect([host[, port]]) | 连接到指定的SMTP服务器 |
SMTP.helo([hostname]) | 使用helo指令向SMTP服务器确认你的身份 |
SMTP.ehlo(hostname) | 使用ehlo指令像ESMTP(SMTP扩展)确认你的身份 |
SMTP.ehlo_or_helo_if_needed() | 如果在以前的会话连接中没有提供ehlo或者helo指令,这个方法会调用ehlo()或helo() |
SMTP.has_extn(name) | 判断指定名称是否在SMTP服务器上 |
SMTP.verify(address) | 判断邮件地址是否在SMTP服务器上 |
SMTP.starttls([keyfile[, certfile]]) | 使SMTP连接运行在TLS模式,所有的SMTP指令都会被加密 |
SMTP.login(user, password) | 登录SMTP服务器 |
SMTP.sendmail(from_addr, to_addrs, msg, mail_options=[], rcpt_options=[]) | 发送邮件from_addr:邮件发件人to_addrs:邮件收件人msg:发送消息 |
SMTP.quit() | 关闭SMTP会话 |
SMTP.close() | 关闭SMTP服务器连接 |
smtper.login(sender,'password')
'password’处要填入网易邮箱网页中的授权码。
163邮箱设置有反垃圾邮件机制,该邮件已被当作垃圾邮件。
问题出现在代码中关于信件收发人的格式部分,需将message中的From和To改成以下格式
message['From'] = "[email protected]"
message['To'] = "[email protected]"
啥是tkinter界面
发送邮箱只限于网易邮箱
import tkinter as tk
from tkinter import messagebox
from smtplib import SMTP
from email.header import Header
from email.mime.text import MIMEText
import time
#设置tkinter主界面
window = tk.Tk()
window.title('攻击邮件')
window.geometry('800x700')
#设置各种输入框
l_1 = tk.Label(window, text='请输入发送邮箱:')
l_1.grid(row=0)
e_sender = tk.Entry(window, show = None)
e_sender.grid(row=0, column=1, sticky=tk.W)
l_2 = tk.Label(window, text='请输入发送邮箱授权码:')
l_2.grid(row=1)
e_password = tk.Entry(window, show = None)
e_password.grid(row=1, column=1, sticky=tk.W)
tk.Label(window, text="请输入接收邮箱:").grid(row=2)
e_receivers = tk.Entry(window, width=70,show = None)
e_receivers.grid(row=2, column=1, sticky=tk.W)
tk.Label(window, text='请输入发送内容标题:').grid(row=3)
e_title = tk.Entry(window, show=None)
e_title.grid(row=3, column=1, sticky=tk.W)
tk.Label(window, text='请输入发送内容:').grid(row=4)
t = tk.Text(window)
t.grid(row=4, column=1, sticky=tk.W)
tk.Label(window, text='请输入发送次数:').grid(row=5)
e_times = tk.Entry(window, show = None)
e_times.grid(row=5, column=1, sticky=tk.W)
tk.Label(window, text='请设置发送时间间隔(单位s):').grid(row=6)
e_sleep = tk.Entry(window, show = None)
e_sleep.grid(row=6, column=1, sticky=tk.W)
#获取用户输入的值赋值给变量
def submit():
global sender
sender = e_sender.get()
global password
password = e_password.get()
global receivers
receivers = e_receivers.get()
global something
something = t.get('0.0','end')
global times
times = e_times.get()
global sleep
sleep = e_sleep.get()
global title
title = e_title.get()
#发送邮件
def do():
message = MIMEText(something, 'plain', 'utf-8')
message['From'] =sender #发件人
message['To'] = receivers #收件人
subject = title
message['Subject'] = Header(subject, 'utf-8') #邮件头设置
smtper = SMTP('smtp.163.com') #服务器地址
#请自行修改下面的登录口令
smtper.login(sender,password) #此处password输入授权码
#循环发送times次
for i in range(int(times)):
smtper.sendmail(sender, receivers, message.as_string())
time.sleep(int(sleep)) #设置发送间隔
tk.messagebox.showinfo(title='好哇', message='邮件发送成功'+times+'次!')
tk.Button(window, text='提交', command=submit).grid(row=7)
tk.Button(window, text='发送', command=do).grid(row=7, column=1)
window.mainloop()
运行结果: