吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3628|回复: 33
收起左侧

[学习记录] python学习的第十七天——基础语法毕业!

[复制链接]
hz1010 发表于 2020-9-6 22:05
最近这几天自己有点偷懒了,学习进度慢了一些,不过还好,基础语法算是学完了,也基本掌握了七七八八,具体操作能力如何无法确定。
值得欣慰的是自己喜欢的一件事情坚持了下来。先给自己一些鼓励~~ 还在学习的童鞋请加油~你是最棒的

为什么没有每天来发一下自己学习的内容呢, 主要因为学习的一些地方比较简洁,也没有可以操作的练习题,所以就继续往下学习了~
那么第十三天到十七天,四天时间,我这边学习了以下内容:
encode()编码与decode()解码
读取文本内容与写入文本内容
利用with方法如何操作
学习了如何调用py文件,包含(import语句,from.....improt......语句,if__name__=='__main__'语句)
最后学习了调用csv文件读取与写入,方法跟读取文本相似。

先说一下从最开始学习到现在为止的一个感想,说白了,我自己学习这个只是出于到写代码的爱好,它到底能在工作或技能上帮助自己多少,能做哪些东西,其实我也不是很清楚。
我相信很多人都学着学着就放弃了,有着各种原因。但是该坚持的总要去坚持一下,或许能给到一个不一样的自己。

学了半个多月,自己掌握了多少不重要,重要的是在你做一个项目或练习题时,你可以知道翻你的哪些笔记,度娘什么问题就好。
python其实不算很难,有点像中文一样,把每个项目拆的散一些,根据逻辑一步一步实现就好了。如同作文似的。
或许在后面的爬虫,数据分析,web开发更复杂,但是先学了再说嘛。

废话不多说,总要拿出一点学习记录来,接下来是手动写一个收发邮件功能程序。也希望给在学的一些启发,大佬给予一些建议~~

使用Python发送邮件, 需要使用smtplib与email两个模块啊。
也就是说email模块负责构造邮件;smtplib模块负责发送邮件,这就是这节课要使用的模块解决的问题。
SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。首先, 我们来构造一个简单的邮件。
[Python] 纯文本查看 复制代码
1
2
3
from email.mime.text import MIMEText
import smtplib
msg = MIMEText('hello, Python auto send email', 'plain', 'utf-8')
在这里, 我们把email模块与smtplib模块引入进来,我们还使用MIMEText构造了邮件内容。
现在有了邮件的正文, 但是还缺少, 发件人,收件人; 接下来,我们向用户收集信息。
[Python] 纯文本查看 复制代码
1
2
3
4
5
6
7
# 输入Email地址和口令:
from_addr = input('From: ')
password = input('Password: ')
# 输入SMTP服务器地址:
smtp_server = input('SMTP server: ')
# 输入收件人地址:
to_addr = input('To: ')
在这里, 我们需要拿到, 发件人的邮箱,邮箱的密码, SMTP服务器地址, 还有收件人的邮箱。

那么这个STMP服务器地址什么意思

SMTP服务器地址,实际上就是代收发服务器地址,是由邮箱服务商提供的。说白了,你用哪家公司的邮箱, 就是哪家公司收发邮件服务器的地址。

我们编写的程序以QQ邮箱来测试. 我们使用QQ邮箱的收发邮件服务器的地址。

QQ邮箱SMTP服务器地址:smtp.qq.com, 端口465, QQ邮箱默认的端口是25, 我们这里使用的是加密端口465。
[Python] 纯文本查看 复制代码
1
2
server = smtplib.SMTP_SSL(smtp_server, 465) # SMTP协议加密端口是465
server.set_debuglevel(1)               #调试级别
用set_debuglevel(1)就可以打印出和SMTP服务器交互的所有信息。

好了,接下来我们就要想着发送邮件了, 完成SMTP发送邮件功能
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
login()方法用来登录SMTP服务器,参数有两个, from_addr是用户输入的发件邮箱, password是发件邮箱的密码。

sendmail()方法就是发邮件,需要引入三个参数:

第一个参数:from_addr是发件人的邮箱地址

第二个参数:[to_addr] 是收件人的邮箱地址, 是列表形式。因为邮件可能一次发给多个人,使用列表,如果发送多个人,就写多个邮箱,中间使用逗号隔开。

第三个参数:msg.as_string()把邮件内容MIMEText对象变成str。

好了,接下来我们整合所有代码.如下:
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
from email.mime.text import MIMEText
import smtplib
msg = MIMEText('hello, Python auto send email', 'plain', 'utf-8')
# 输入Email地址和口令:
from_addr = input('请输入发件人的邮箱号码From: ')
password = input('请输入发件人的邮箱密码Password: ')
# 输入SMTP服务器地址:
smtp_server = input('请输入邮箱服务器地址SMTP server: ')
# 输入收件人地址:
to_addr = input('请输入收件人邮箱地址To: ')
 
import smtplib
server = smtplib.SMTP_SSL(smtp_server, 465) # SMTP协议加密端口是465
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
server.quit()语句,是邮件发送结束后,停止服务的意思.好了,基本的版本算是完成了,那么现在还存在如下两个问题 1.邮件没有主题; 2.收件人的名字没有显示为友好的名字,比如Mr Green 这是因为邮件主题、如何显示发件人、收件人等信息并不是通过SMTP协议发给MTA,而是包含在发给MTA的文本中的,
所以,我们必须把From、To和Subject添加到MIMEText中,才是一封完整的邮件:
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
 
def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr(( Header(name, 'utf-8').encode(), addr))
# 输入Email地址和口令:
from_addr = input('请输入发件人的邮箱号码From: ')
password = input('请输入发件人的邮箱密码Password: ')
# 输入SMTP服务器地址:
smtp_server = input('请输入邮箱服务器地址SMTP server: ')
# 输入收件人地址:
to_addr = input('请输入收件人邮箱地址To: ')
 
msg = MIMEText('hi,你好吗,我的朋友', 'plain', 'utf-8')
msg['From'] = _format_addr(u'努力吧 <%s>' % from_addr)
msg['To'] = _format_addr(u'管理员 <%s>' % to_addr)
msg['Subject'] = Header(u'来自Hz的问候……', 'utf-8').encode()
 
server = smtplib.SMTP_SSL(smtp_server, 465)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
分析整个代码:

先看引入的模块文件
[Python] 纯文本查看 复制代码
1
2
3
4
5
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
这次引入的模块文件有点多,增加了四个模块。

1、encoders模块负责编码
2、Header模块负责处理邮件头
3、MIMEText模块负责处理文本
4、parseaddr模块与formataddr模块 负责将输入的内容格式化
[Python] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
9
def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr(( Header(name, 'utf-8').encode(), addr))
# 之后对输入的内容进行格式化操作,将格式化后的内容赋值给变量
 
msg = MIMEText('hi,[/backcolor]你好吗,我的朋友', 'plain', 'utf-8')
[backcolor=white]msg['From'] = _format_addr(u'[/backcolor]努力吧 <%s>' % from_addr)
[backcolor=white]msg['To'] = _format_addr(u'管理员 <%s>' % to_addr)
msg['Subject'] = Header(u'来自Hz的问候……', 'utf-8').encode()
我们将发送邮箱、接收邮箱、邮件主题格式化完毕。
好了,接下来运行一下代码
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
 
def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr(( Header(name, 'utf-8').encode(), addr))
# 输入Email地址和口令:
from_addr = input('请输入发件人的邮箱号码From: ')
password = input('请输入发件人的邮箱密码Password: ')
# 输入SMTP服务器地址:
smtp_server = input('请输入邮箱服务器地址SMTP server: ')
# 输入收件人地址:
to_addr = input('请输入收件人邮箱地址To: ')
 
msg = MIMEText('hi,你好吗,我的朋友', 'plain', 'utf-8')
msg['From'] = _format_addr(u'努力吧 <%s>' % from_addr)
msg['To'] = _format_addr(u'管理员 <%s>' % to_addr)
msg['Subject'] = Header(u'来自Hz的问候……', 'utf-8').encode()
 
server = smtplib.SMTP_SSL(smtp_server, 465)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
邮件主题、发件人、内容是不是都有, 比之前规范多了。
但是,还有个小问题。
现在,我们的内容有点少,能不能多写点内容。
可以啊。 下面,我们将邮件内容丰富起来。
我们使用字符串增加邮件内容,使用三引号的字符串,就可以原样显示字符串内容。
[Python] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
content = '''
亲爱的小明朋友:
    你好!
    我现在学习python写邮件!
    希望更方便!
'''
 
msg = MIMEText(content, 'plain', 'utf-8')
使用三引号字符串,将邮件内所有内容放入content变量中;将msg中的内容,换成content变量;将msg中的内容,换成content变量。

最终完整代码
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
#对邮箱地址进行格式化
def _format_addr(s):
    name, addr = parseaddr(s)
    #formataddr是email类的内部函数,用于格式化
    return formataddr(( Header(name, 'utf-8').encode(), addr))
 
try:
    # 输入Email地址和口令:
    from_addr = input('请输入发件人的邮箱号码From: ')
    password = input('请输入发件人的邮箱密码Password: ')
    # 输入SMTP服务器地址:
    smtp_server = input('请输入邮箱服务器地址SMTP server: ')
    # 输入收件人地址:
    to_addr = []
 
    while True:
        #输入收件人邮箱地址
        a=input('请输入收件人邮箱:')
        to_addr.append(a)
        b=input('是否继续输入,n退出,任意键继续:')
        #如果b等于n,不再继续输入
        if b == 'n':
            break
 
    content = '''
    亲爱的小明朋友:    你好!
    我现在学习python写邮件!
    希望更方便!    '''
    #邮件内容
    msg = MIMEText(content, 'plain', 'utf-8')
    #发件人地址格式化
    msg['From'] = _format_addr(u'努力吧 <%s>' % from_addr)
    #收件人地址格式化
    msg['To'] = _format_addr(u'管理员 <%s>' % to_addr)
    #主题标题,进行编码
    msg['Subject'] = Header(u'来自Hz的问候……', 'utf-8').encode()
    # 邮件转发中心,发件人邮箱的smtp服务器,默认是25
    server = smtplib.SMTP_SSL(smtp_server, 465)
    #设置调试级别,可以查看发送过程中的信息
    server.set_debuglevel(1)
    #登入
    server.login(from_addr, password)
    #发送,收件人可以是多个,所以是数组
    server.sendmail(from_addr, [to_addr], msg.as_string())
    print('恭喜,发送成功')
except:
    print('发送失败,请重试')
 
server.quit()

最后说一下,其实很多内容我也不是太懂,也是参考了一些,虽然邮件功能可以直接调用,但是多少想了解一些。今天就到此为止~~

免费评分

参与人数 5吾爱币 +11 热心值 +4 收起 理由
楠宝 + 1 用心讨论,共获提升!
深水夜藏 + 1 + 1 热心回复!
EVANLEE + 1 + 1 我很赞同!
苏紫方璇 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ciss520 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

白晓生 发表于 2020-9-6 22:23
感谢楼主无私分享,现在找个课程很火呀,这回可以学学了
李斯隆 发表于 2020-9-6 22:30
leasae 发表于 2020-9-6 22:37
ygrdkl 发表于 2020-9-6 22:55
以后在学,学业较忙
Joshuacsj 发表于 2020-9-6 23:13
你学习的是哪个资源的 推荐下
小人类 发表于 2020-9-6 23:36
感谢分享学习经验!
yao5201478 发表于 2020-9-6 23:47
加油!!!!
bigdawn 发表于 2020-9-6 23:50
收藏备用。好好学一下
jiajia1714 发表于 2020-9-7 00:15
哈哈,我学的java,到现在都很懵逼,还在基础中挣扎
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-23 10:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表