好友
阅读权限 10
听众
最后登录 1970-1-1
最近这几天自己有点偷懒了,学习进度慢了一些,不过还好,基础语法算是学完了,也基本掌握了七七八八,具体操作能力如何无法确定。
值得欣慰的是自己喜欢的一件事情坚持了下来。先给自己一些鼓励~~ 还在学习的童鞋请加油~你是最棒的
为什么没有每天来发一下自己学习的内容呢, 主要因为学习的一些地方比较简洁,也没有可以操作的练习题,所以就继续往下学习了~
那么第十三天到十七天,四天时间,我这边学习了以下内容:
encode()编码与decode()解码
读取文本内容与写入文本内容
利用with方法如何操作
学习了如何调用py文件,包含(import语句,from.....improt......语句,if__name__=='__main__'语句)
最后学习了调用csv文件读取与写入,方法跟读取文本相似。
先说一下从最开始学习到现在为止的一个感想,说白了,我自己学习这个只是出于到写代码的爱好,它到底能在工作或技能上帮助自己多少,能做哪些东西,其实我也不是很清楚。
我相信很多人都学着学着就放弃了,有着各种原因。但是该坚持的总要去坚持一下,或许能给到一个不一样的自己。
学了半个多月,自己掌握了多少不重要,重要的是在你做一个项目或练习题时,你可以知道翻你的哪些笔记,度娘什么问题就好。
python其实不算很难,有点像中文一样,把每个项目拆的散一些,根据逻辑一步一步实现就好了。如同作文似的。
或许在后面的爬虫,数据分析,web开发更复杂,但是先学了再说嘛。
废话不多说,总要拿出一点学习记录来,接下来是手动写一个收发邮件功能程序。也希望给在学的一些启发,大佬给予一些建议~~
使用Python发送邮件, 需要使用smtplib与email两个模块啊。
也就是说email模块负责构造邮件;smtplib模块负责发送邮件,这就是这节课要使用的模块解决的问题。 SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。 首先, 我们来构造一个简单的邮件。 [Python] 纯文本查看 复制代码
from email.mime.text import MIMEText
import smtplib
msg = MIMEText('hello, Python auto send email', 'plain', 'utf-8') 在这里, 我们把email模块与smtplib模块引入进来,我们还使用MIMEText构造了邮件内容。
现在有了邮件的正文, 但是还缺少, 发件人,收件人; 接下来,我们向用户收集信息。 [Python] 纯文本查看 复制代码
# 输入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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
content = '''
亲爱的小明朋友:
你好!
我现在学习python写邮件!
希望更方便!
'''
msg = MIMEText(content, 'plain', 'utf-8') 使用三引号字符串,将邮件内所有内容放入content变量中;将msg中的内容,换成content变量;将msg中的内容,换成content变量。
最终完整代码 [Python] 纯文本查看 复制代码
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()
最后说一下,其实很多内容我也不是太懂,也是参考了一些,虽然邮件功能可以直接调用,但是多少想了解一些。今天就到此为止~~
免费评分
查看全部评分