python实现匿名发邮件_Python写自己主动化之邮件发送(匿名)

为了可以实现邮件发送功能。首先。我们须要了解一下邮件的发送过程是什么样子的,此处不再具体说明,请大家自行搜索或查看http://www.sogouqa.com/?p=438

在了解了邮件的发送过程后,为了实现邮件的全自己主动匿名发送,我们须要通过windows的命令行,解析邮件的匿名server。然后使用匿名server,发送邮件到对应的邮箱

代码例如以下:

def _get_mail_exchanger(domain_name,name_server=""):

#print domain_name

temp_file=os.getenv("temp")+"\\temp.lsh"

os.system("nslookup -qt=mx "+domain_name+" "+name_server+" >"+temp_file+" 2>&1")

f=open(temp_file)

c=f.read()

f.close()

os.remove(temp_file)

#print c

internet_addresses_map=_get_internet_address(c)

mail_exchangers=re.findall(r"mail\s+exchanger\s*=\s*(\S+)",c)

#mail_exchangers=[internet_addresses_map.get(i,i) for i in mail_exchangers]

mail_exchangerIPs=[]

for i in mail_exchangers:

try:

mail_exchangerIPs.append(internet_addresses_map[i])

except:

ip=_getIP(i)

if ip:

mail_exchangerIPs.append(ip)

if mail_exchangerIPs or name_server:

print "mail_exchangers",mail_exchangerIPs

return mail_exchangerIPs

else:

print "mail_exchangers from 预配置",g_mail_exchanger.get(domain_name,[])

return g_mail_exchanger.get(domain_name,[])当中有个函数用于获取匿名邮箱服务器地址,使用正则分析返回值。代码例如以下:

def _get_internet_address(content):

internet_addresses=re.findall(r"(\S+)\s+internet\s+address\s*=\s*(\S+)",content)

internet_addresses_map={}

for internet_address in internet_addresses:

internet_addresses_map[internet_address[0]]=internet_address[1]

return internet_addresses_map

然后,有了地址后,我们须要通过解析出地址的IP,相同,使用windows命令获取结果并正则分析获取IP,代码例如以下:

def _getIP(domain_name,name_server=""):

temp_file=os.getenv("temp")+"\\temp.lsh"

os.system("nslookup -qt=a "+domain_name+" "+name_server+" >"+temp_file+" 2>&1")

f=open(temp_file)

c=f.read()

f.close()

os.remove(temp_file)

ips=re.findall(domain_name+r"\s*Address\s*:\s*(\S+)",c,re.I)

if ips:

return ips[0][0]

elif name_server=="":

return _getIP(domain_name,"8.8.8.8")

else:

return None

有了邮箱server的IP,剩下的事情就是使用IP去发送邮件了。代码比較简单

def _send_to_mail_exchanger(mail_exchanger,mail_from,rcpt_to,From="",To="",Subject="",Date=None,Body="",attachments=None,encoding="gbk"):

import smtplib,email

from email.MIMEMultipart import MIMEMultipart

from email.MIMEText import MIMEText

from email.MIMEImage import MIMEImage

# 构造MIMEMultipart对象做为根容器

main_msg=email.MIMEMultipart.MIMEMultipart()

# 设置根容器属性

main_msg['From'] = From

main_msg['To'] = To

main_msg['Subject'] = Subject

if Date:

main_msg['Date'] = Date

else:

main_msg['Date'] = email.Utils.formatdate()

# 构造MIMEText对象做为邮件显示内容并附加到根容器

text_msg = email.MIMEText.MIMEText(Body,'html', encoding)

main_msg.attach(text_msg)

# 构造MIMEBase对象做为文件附件内容并附加到根容器

if attachments:

for attachment in attachments:

if not os.path.isfile(attachment):

continue

if IsImage(attachment):

try:

fp = open(attachment, "rb")

file_msg = MIMEImage(fp.read())

fp.close()

file_msg.add_header("Content-ID", os.path.basename(attachment).replace(".jpg", "").replace(".png", ""))

main_msg.attach(file_msg)

except:

pass

else:

file_msg=email.MIMEBase.MIMEBase("application","octet-stream")

f=open(attachment,'rb')

file_msg.set_payload(f.read())

f.close()

email.Encoders.encode_base64(file_msg)

file_msg.add_header('Content-Disposition','attachment',filename=os.path.basename(attachment))

main_msg.attach(file_msg)

# 用smtp发送邮件

data=main_msg.as_string()

for i in range(2):

try:

Log(mail_exchanger)

server=smtplib.SMTP(mail_exchanger)

Log(mail_from)

Log(rcpt_to)

ret=server.sendmail(mail_from,rcpt_to,data)

break

except:

import traceback

Log(traceback.format_exc())

ret=False

try:

server.quit()

except:

pass

try:

server.quit()

except:

pass

if ret==False or ret:

#print "发往例如以下的邮件失败:",rcpt_to

return False

return Trueok,这样把整个流程整理清楚后,就能够自己主动发送邮件了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要现定时运行 Python 脚本并发送邮件,可以使用 Python 的第三方库 schedule 和 smtplib。 首先,安装这两个库: ```python pip install schedule ``` ```python pip install secure-smtplib ``` 接下来,编 Python 脚本,实现定时发送邮件的功能: ```python import schedule import time import smtplib from email.mime.text import MIMEText from email.header import Header # 定义发送邮件的函数 def send_email(): # 邮件内容 mail_content = '这是一封测试邮件' # 发送方信息 sender = '发送方邮箱' password = '发送方邮箱密码' # 接收方信息 receivers = ['接收方邮箱'] # 邮件标题和内容 message = MIMEText(mail_content, 'plain', 'utf-8') message['From'] = Header(sender) message['To'] = Header(','.join(receivers)) message['Subject'] = Header('测试邮件') # 发送邮件 try: smtp_obj = smtplib.SMTP_SSL('smtp.qq.com', 465) smtp_obj.login(sender, password) smtp_obj.sendmail(sender, receivers, message.as_string()) print('邮件发送成功') except smtplib.SMTPException as e: print('邮件发送失败', e) # 定义定时任务 def job(): print('开始发送邮件...') send_email() # 设置定时任务,每隔一定时间执行一次 schedule.every(10).minutes.do(job) # 每隔10分钟执行一次 # schedule.every().hour.do(job) # 每小时执行一次 # schedule.every().day.at('10:30').do(job) # 每天10:30执行一次 # 循环执行定时任务 while True: schedule.run_pending() time.sleep(1) ``` 在上述代码中,`send_email()` 函数定义了如何发送邮件,而 `job()` 函数则定义了定时任务的具体内容。在这里,我们将每隔10分钟执行一次 `job()` 函数,可以根据自己的需要设置定时任务的时间间隔。 最后,在命令行中运行该 Python 脚本即可。注意,为了保证邮件能够正常发送,需要在发送方邮箱的设置中开启 SMTP 服务,并且在代码中填正确的发送方邮箱和密码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值